-1. Innodb_thread_concurrency 란?
MariaDB는 싱글 프로세스지만 CPU core 수를 최대한 활용하기 위해 멀티 쓰레드 방식으로 구성됩니다.
DB 내 동시에 수행되는 쓰레드가 너무 많으면 context switching 이 다량 발생하면서 성능이 저하 되고,
반대로 동시에 수행되는 쓰레드가 너무 적으면 서버 성능을 다 사용하지 못하는 비효율이 발생하게 되는데
이 동시 수행가능 쓰레드를 설정하는 파라미터가 innodb_thread_concurrency 입니다.
innodb_thread_concurrency의 default value는 0 으로 필요한 thread 만큼 동시에 수행하겠다는 의미이며 권고값은 cpu core * 2 입니다.
-2. innodb_thread_concurrency 테스트
* 제 테스트 환경은 1 Processor / 2 core 입니다.
dori:sysbench mac$ sysbench --mysql-host=11.111.111.111 --mysql-port=3310 --mysql-user=sysbench --mysql-password=test --mysql-db=sysbench --threads=10 --table-size=5000000 --tables=10 /usr/local/share/sysbench/oltp_read_write.lua run
=> 10개 테이블에 대해 10개의 쓰레드로 select / DML 쿼리 수행
mysql> set global innodb_thread_concurrency=4; Query OK, 0 rows affected (0.00 sec) mysql> show variables like 'innodb_thread_con%'; +---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | innodb_thread_concurrency | 4 | +---------------------------+-------+ 1 row in set (0.01 sec)
=> innodb_thread_concurrency 는 dynamic / global 파라미터로 운영 중 변경 가능함
-3. TEST 결과
innodb_thread_concurreny | TPS |
0 | 100.25 |
1 | 57.16 |
2 | 81.68 |
4 | 90.75 |
8 | 100.13 |