[DB] Mysql Connection Monitoring command

SHOW PROCESSLIST;

SHOW STATUS WHERE `variable_name` = ‘Threads_connected’;

SHOW VARIABLES LIKE ‘max_connections’;
SHOW STATUS LIKE ‘max_used_connections’;

Advertisements

[Mysql] MYISAM table lock issue

MYISAM lock 이슈에 대해 사전 조사 중 읽어 볼만한 블로그 포스트가 있어 소개한다.

http://devoluk.com/mysql-myisam-table-lock-issue.html

위 내용은 다 읽을 필요 없고 이 문장 뒤로 읽어보면 된다.

It turned out we were having a classic table locking issue

And due to table level locking no write (INSERT) statement was allowed to run until the read (SELECT) query is finished.

non indexed select query 에서 지연이 발생하는데 insert는 우선순위가 select에 비해 낮아 insert query가 수행이 끝나기를 기다리느라 발생한 이슈라고 한다.(MYISAM)

2007년이라 좀 그렇긴 하지만 위에 언급한 내용과 동일하다.

http://nileshbansal.blogspot.kr/2007/07/mysql-lock-contention.html

After investigating a bit in why a SELECT was blocking other SELECT operations, I found an explanation in MySQL docs.

결국 원인은 slow query이며 Query 튜닝은 반드시 하여 slow Query가 발생하지 않도록 미연에 방지 하는 것이 중요하겠다.

[Mysql] Thread Cache 최적화

만약 DB 서버가 빈번하게 connection 요청이 온다면 threads_created 값이 증가하지 않을 때까지 충분히 크게 설정해야 한다. CPU 로드가 줄어든다고 한다.

thread-created값을 확인하는 명령어는 다음과 같다.

mysql> show status like ‘threads_created’;
+—————–+——-+
| Variable_name | Value |
+—————–+——-+
| Threads_created | 1 |
+—————–+——-+
1 row in set (0.00 sec)

다음 명령어는 thread들의 cache 크기를 보여주는 명령어이다.

mysql> show variables like ‘thread_cache_size’;

+——————-+——-+
| Variable_name | Value |
+——————-+——-+
| thread_cache_size | 8 |
+——————-+——-+
1 row in set (0.00 sec)

최적화 하는 방법은 간단하다. threads_connected에 관계된 수치들을 지켜보면서
임계 workload를 견뎌낼 수 있는 정도까지 thread_cache_size를 충분히 늘려주면 된다.

다음은 thread에 관계된 상태를 조회하는 명령어이다.

mysql> show status like ‘thread_%’;
+——————-+——-+
| Variable_name | Value |
+——————-+——-+
| Threads_cached | 0 |
| Threads_connected | 1 |
| Threads_created | 1 |
| Threads_running | 1 |
+——————-+——-+
4 rows in set (0.00 sec)

자료 출처는 다음과 같다.

http://www.fosiul.com/index.php/2009/08/how-to-optimized-thread-cache-variables-for-mysql-server/comment-page-1/#respond