MySQL 최적화
MySQL stress test
여러가지 tool 들이 있다.
- mysql-stress-test.pl [ref. 1]
- mysqlslap [ref. 2]
- Sysbench [ref. 3]
- super-smack[ref. 4]
- mysqltuner[ref. 7]
max_connections 과 thread_cache_size[ref. 4]
현재 connection 상태를 알아보는 방법
mysql> show status like '%conn%'; +----------------------+-------+ | Variable_name | Value | +----------------------+-------+ | Aborted_connects | 0 | | Connections | 8611 | | Max_used_connections | 396 | | Threads_connected | 1 | +----------------------+-------+ mysql> show status like '%thr%'; +------------------------------------------+-------+ | Variable_name | Value | +------------------------------------------+-------+ | Delayed_insert_threads | 0 | | Performance_schema_thread_classes_lost | 0 | | Performance_schema_thread_instances_lost | 0 | | Slow_launch_threads | 0 | | Threads_cached | 7 | | Threads_connected | 1 | | Threads_created | 5575 | | Threads_running | 1 | +------------------------------------------+-------+
새로운 thread가 생성되면 Threads_created 값이 1씩 증가하고, cache에 있는 thread를 사용할 경우는 Threads_created 값은 증가하지 않는다.
즉 Connections 값과 Threads_created 값, 그리고 현재 MySQL 서버가 얼마정도로 바쁜지를 파악하여 이 thread_cache_size 값을 조절해줘야 한다.
그러나 MySQL 서버가 상당히 바쁘고(STATUS == busy 이상) 이 값이 작으면 Connections이 이루어질때마다 새로운 thread가 생성된다
아래와 같은 공식으로 thread_cache_size 를 맞춰주면 된다고 한다.[ref. 6]
- 100 - ((Threads_created / Connections) * 100)
MySQL 모니터링
먼저 기본적으로 MySQL 에서 제공하는 slow_query_log 와 performance schema 를 이용해 보는 것이 좋을 듯 하다.
slow_query_log
Performance Schema 관련
- An Overview of the MySQL Performance Schema — DatabaseJournal.com : performace schema 의 memory 나 성능, 각 table 에 대한 설명이 나와 있다.
- MySQL :: MySQL 8.0 Reference Manual :: 25.18 Using the Performance Schema to Diagnose Problems
- Monitoring MySQL performance metrics
SHOW GLOBAL STATUS LIKE "Questions";
SHOW GLOBAL STATUS LIKE "Com_select";
Writes = Com_insert + Com_update + Com_delete
Munin
- Munin vs Nagios: Munin 은 real time 의 정보를 보여주는 역할은 아니라고 한다.
- Monitoring with Munin : 댓글들을 확인하자.
Percona
- MySQL Monitoring Tools and Plugins by Percona
- Percona Monitoring and Management Documentation
- Percona PMM - MySQL/MariaDB 모니터링하기 SystemV's
- 대략 1 node 의 monitoring 을 하는데에 2GB 정도의 memory 를 고려하라고 한다.
References
- MySQL: mysql-stress-test.pl — Server Stress Test Program
- How do I... Stress test MySQL with mysqlslap? - TechRepublic
- Linux ETC - Sysbench를 통한 System, MySQL 성능 테스트
- MySQL의 max_connections과 thread_cache에 대해 - Mimul's Developer World
- MariaDB Memory Allocation - MariaDB Knowledge Base
- 15 Useful MySQL/MariaDB Performance Tuning and Optimization Tips - Part 2
- 15 Useful MySQL/MariaDB Performance Tuning and Optimization Tips - Part 4
댓글 없음:
댓글 쓰기