본문으로 바로가기

[Mysql/MariaDB] DB 서버 상태 확인(show status)

category DB/MySQL-MariaDB 2022. 2. 14. 14:24

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     |
+----------------------+-------+