새소식

MySQL & Maria

[Maria] Thread 모니터링

  • -
반응형

Maria & Mysql 모두 Thread 방식의 아키텍처로 설계되어있다. 

Client가 접속하게되면 Thread를 할당해주고 접속이 종료되면 할당했던 Thread를 회수하게 됩니다.

클라이언트가 접속할 때마다 스레드를 할당하고 제거하는 작업은 MySQL 서버 시스템 입장에서 보면 많은 리소스 낭비  성능 저하를 발생시키기 때문에 모니터링은 매우 중요한다.
오늘은 접속 스레드에 대한 모니터링과 튜닝 방법에대해 포스팅하도록 하겠습니다.

 

■ Status

MariaDB [(none)]> show global status like '%threads_%';

- Threads_cached

스레드 캐시에 있는 스레드 수

- Threads_connected

현재 오픈된 스레드 수

- Threads_created

연결을 다루기 위해 생성된 스레드 수

- Threads_running

Sleep 상태가 아닌 실행되고  있는 Thread 수

 

Ex) 현재 Threads_created =4 / Threads_connected =4 이다. 이상태에서 Thread_connected =2로 줄게되면

Threads_created=4 / Threads_connected=2 / Threads_cached =2 가 되게된다. 

*생성되고 남은 Thread는 Cache로 반납되게된다.

 

■ 성능

1. Thread_cache_size

Thread_created 변수가 빠르게 증가하는경우 Thread_cache_size값을 증가시킬 필요가 있다.

Thread_cache_size는 Connection_pool과 비슷한 개념으로 Connection을 미리 만들어 놓아 Client가 접속할시 Thread를 만들지 않고 Cache의 Thread를 사용자에게 할당하게된다. 

Cache의 Thread를 사용하게되면서 Thread를 만드는 부하를 감소시켜 성능에 장점이 생기게된다.

 

 

2.cache miss ratio

cache miss ratio는 Threads_created / Connections * 100으로 계산한다.

이떄 cache miss ratio가 낮은것이 좋다. 그러나 이 비율을 낮추기위해서는 Thread_cache_size 변수를 늘려야한다. 하지만 이 값을 늘리게 될경우 시스템 메모리를 사용하게된다. 

 

일반적으로 Threads_connected Paek-time시 보다 약간 낮은 수치로 설정하는것이 좋습니다.

가능하면 Threads_connected의 수가 100 ~ 120인 경우 캐시 크기는 20정도로 설정하고 500~700인경우 200으로 설정합니다.

 

 

■ 성능 TEST

1) Thread_cache_size가 8일경우 

MariaDB [(none)]> show variables like '%thread_cache_size%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| thread_cache_size | 8     |
+-------------------+-------+
1 row in set (0.00 sec)


MariaDB [(none)]> show status like 'connections';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Connections   | 2025  |
+---------------+-------+
1 row in set (0.00 sec)


MariaDB [(none)]> show status like '%threads_%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_cached    | 7     |
| Threads_connected | 2     |
| Threads_created   | 237   |
| Threads_running   | 1     |
+-------------------+-------+

Cache Miss 11.7%

 

2)Thread_cache_size 200으로 변경 ## 실제 서비스에서 한번에 큰수로 변경하게된다면 Memory단의 문제가 발생할 수 도있다.

MariaDB [(none)]> show variables like '%thread_cache_size%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| thread_cache_size | 200   |
+-------------------+-------+
1 row in set (0.00 sec)


MariaDB [(none)]> show status like 'connections';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Connections   | 13788 |
+---------------+-------+
1 row in set (0.00 sec)


MariaDB [(none)]> show status like '%threads_%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_cached    | 83    |
| Threads_connected | 2     |
| Threads_created   | 1033  |
| Threads_running   | 1     |
+-------------------+-------+
4 rows in set (0.00 sec)


Cache Miss 7%

 

https://dung-beetle.tistory.com/70

 

[튜닝] thread cache miss rate 1%를 향해 (mysql parameter tuning)

mysql에 thread_cache_size라는 것이 있다. 이것의 역할은 connection당 스레드를 생성하고 해제할 때 메모리를 할당하고 캐시할 메모리(192K or 256K)를 미리 생성해놓고 적절하게 관리하는 용도이다. 일종

dung-beetle.tistory.com

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.