1. DB 서버 상태 확인(상태 변수 조회)
[형식]
# SHOW STATUS
SHOW [GLOBAL | SESSION] STATUS
[LIKE 'pattern' | WHERE expr]
-----------------------------------------------
# SELECT
SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS;
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS;
MySQL Command-Line Client 접속하여 확인
# mysql -u root -p'계정 비밀번호';
mysql> SHOW STATUS;
+-----------------------------------------------+---------------+
| Variable_name | Value |
+-----------------------------------------------+---------------+
| Aborted_clients | 470588 |
| Aborted_connects | 1853 |
| ... | |
+-----------------------------------------------+---------------+
mysql> SHOW STATUS LIKE 'Threads_%
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_cached | 13 |
| Threads_connected | 45 |
| Threads_created | 370 |
| Threads_running | 1 |
+-------------------+-------+
MySQL Command-Line Client 접속 없이 확인
# mysql -u root -p'계정 비밀번호' -e "SHOW STATUS;"
+-----------------------------------------------+---------------+
| Variable_name | Value |
+-----------------------------------------------+---------------+
| Aborted_clients | 470588 |
| Aborted_connects | 1853 |
| ... | |
+-----------------------------------------------+---------------+
# mysql -u root -p'계정 비밀번호' -e "SHOW STATUS LIKE 'Threads_%';"
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_cached | 13 |
| Threads_connected | 45 |
| Threads_created | 370 |
| Threads_running | 1 |
+-------------------+-------+
[GLOBAL 변수와 SESSION 변수]
- 영향을 미치는 범위
- GLOBAL 변수 : MySQL 서버에서 단 하나의 값을 가지며, 시스템에 영향을 미치는 변수입니다.
- SESSION 변수 : 각 세션에만 적용되는 값으로 커넥션 단위로 값을 변경할 수 있습니다.
- GLOBAL, SESSION 둘 다 해당하는 변수도 존재합니다.
2. 주요 서버 상태 변수
[주의 사항]
변수의 범위가 GLOBAL일 경우 SHOW STATUS 쿼리를 사용할 경우 자동으로 SHOW GLOBAL STATUS 적용됩니다.
그러나 변수의 범위가 GLOBAL, SESSION 둘 다 일 경우 SHOW SESSION STATUS 적용됩니다.
더 많은 다양한 서버 상태 변수는 아래의 링크에 접속하면 설명되어있습니다.
https://dev.mysql.com/doc/refman/8.0/en/server-status-variables.html
- Aborted_clients
- GLOBAL Status Variable
- 클라이언트가 연결을 제대로 닫지 않고 종료되어 중단된 연결 수
- 연결 프로그램에서 연결은 해놓고 닫지 않은 경우 증가
- max_allowed_packet을 초과하는 쿼리가 발생한 경우 증가
- wait_timeout이 경과할 때까지 동작 수행이 계속되어 mysql 자체에서 강제로 끊는 경우 증가
- Aborted_connects
- GLOBAL Status Variable
- MySQL 서버에 대한 연결 시도 실패 횟수
- 최대 동시접속자(Max_used_connections) 수치가 설정보다 높을 경우 증가
- Connections
- GLOBAL Status Variable
- MySQL 서버에 대한 연결 시도 횟수(성공)
- Connections / Uptime = 초당 연결 수
- Max_used_connections
- SESSION Status Variable
- 동시에 열린 최대 연결 수
- 서버가 시작된 이후 동시에 사용된 최대 연결 수입니다.
- Com_%
- GLOBAL Status Variable, SESSION Status Variable
- xxx 명령문이 실행된 횟수
- Com_insert, Com_update, Com_delete Com_show_status 등
- Queries
- GLOBAL Status Variable, SESSION Status Variable
- 서버에서 실행한 명령문(쿼리)의 수
- COM_PING 및 COM_STATISTICS를 제외
- 저장된 프로그램 내에서 실행된 명령문도 계산한다는 점에서 Questions과 다릅니다.
- Questions
- GLOBAL Status Variable, SESSION Status Variable
- 서버에서 실행한 명령문(쿼리)의 수
- COM_PING, COM_STATISTICS, COM_STMT_PREPARE, COM_STMT_CLOSE 및 COM_STMT_RESET을 제외
- 저장된 프로그램 내에서 실행된 명령문을 계산하지 않는다는 점에서 Queries와 다릅니다.
- Questions / Uptime = 초당 쿼리 수
- Questions / Connections = 연결당 쿼리 처리수
- Slow_queries
- GLOBAL Status Variable, SESSION Status Variable
- 지정한 시간(long_query_time) 보다 실행하는데 오래 걸린 쿼리에 대해 카운트합니다.
- Threads_%
- GLOBAL Status Variable
- Threads_cached : 스레드 캐시의 스레드 수
- Threads_connected : 현재 열려 있는 연결 수
- Threads_created : 연결을 처리하기 위해 생성된 스레드 수
- Threads_running : 휴면 상태(Sleep)가 아닌 스레드 수
- Thread는 CPU의 성능에 따라 적절한 조절이 필요합니다.
- Uptime
- GLOBAL Status Variable
- 서버가 가동된 시간(초)입니다.
- Bytes_received
- GLOBAL Status Variable
- 모든 클라이언트로부터 받은 바이트(insert, update, delete)
- Bytes_sent와 비교하여 Bytes_received 가 높다면 이 서버는 쓰기 위주 작업
- Bytes_sent
- GLOBAL Status Variable, SESSION Status Variable
- 모든 클라이언트에 전송된 총 바이트(select)
- Bytes_received와 비교하여 Bytes_sent가 높다면 이 서버는 읽기 위주 작업
- Created_tmp_disk_tables
- GLOBAL Status Variable, SESSION Status Variable
- 명령문(쿼리)을 실행하는 동안 서버에서 생성한 내부 디스크 상의 임시 테이블 수
- 값이 높을 경우 물리 디스크 액세스를 자주 하고 있을 것이므로 고속 처리에서 좋지 않을 수 있습니다.
- 빠른 처리를 원할 경우 0에 가까울수록 좋습니다.
- 시스템 변수 tmp_table_size, max_heap_table_size를 늘리면 성능을 올릴 수 있습니다
- Created_tmp_files
- GLOBAL Status Variable
- mysqld 가 생성한 임시 파일 의 수
- Created_tmp_tables
- GLOBAL Status Variable
- 명령문(쿼리)을 실행하는 동안 서버에서 생성한 내부 임시 테이블의 수
- Select_full_join
- GLOBAL Status Variable, SESSION Status Variable
- 인덱스가 없이 join이 일어난 개수
- 상당한 부하를 줄 수 있습니다.
- Slow_launch_threads
- GLOBAL Status Variable, SESSION Status Variable
- 생성하는 데 slow_launch_time 보다 몇 초 이상 소요된 스레드 수
- 심각한 지연을 줄 가능성이 있는 상태 변수
- Sort_merge_passes
- GLOBAL Status Variable, SESSION Status Variable
- 정렬 알고리즘이 수행행 된 병합 패스의 수
- 이 값이 크면 시스템 변수 sort_buffer_size의 값을 높이는 것을 고려해야 합니다.
- 심각한 지연을 줄 가능성이 있는 상태 변수
- Table_locks_waited
- GLOBAL Status Variable
- 테이블 잠금 요청을 즉시 허가할 수 없어 대기가 필요한 횟수
- 이 값이 높아 성능 문제가 있는 경우 먼저 쿼리를 최적화한 다음 테이블을 분할하거나 복제를 사용해야 합니다.
- 심각한 지연을 줄 가능성이 있는 상태 변수
3. 주요 서버 상태 변수 초기화
모니터링을 위해 수집하는 STATUS 변수 값을 0으로 초기화한다.
mysql> SHOW STATUS LIKE 'Max_used_connections';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| Max_used_connections | 300 |
+----------------------+-------+
mysql> FLUSH STATUS;
mysql> SHOW STATUS LIKE 'Max_used_connections';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| Max_used_connections | 0 |
+----------------------+-------+
'DB > MySQL-MariaDB' 카테고리의 다른 글
[Mysql/MariaDB] DB 프로세스 목록 확인(show processlist) (0) | 2022.02.17 |
---|---|
[Mysql/MariaDB] DB 서버 시스템 변수 변경 (Server System Variables) (0) | 2022.02.16 |
[Mysql/MariaDB] DB 시스템 변수 확인(show variable) (0) | 2022.02.15 |
[Mysql/MariaDB] Client 접속 없이 쿼리 실행 (--execute=statement) (0) | 2022.02.13 |
[MySQL] MySQL 외부 접속 불가능 현상 해결 방법 (접근 권한) (0) | 2021.08.31 |