Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 읽기/쓰기 비율 확인하는 방법 – SHOW STATUS 명령어 활용 가이드

MySQL에서 데이터베이스의 읽기(read)와 쓰기(write) 비율을 파악하면 쿼리 튜닝, 인덱스 설계, 서버 용량 계획 등에 큰 도움이 됩니다. 이를 확인하는 가장 기본적인 방법은 SHOW STATUS 명령어를 사용하는 것이며, 이 명령어는 서버에서 실행된 모든 SQL 문의 누적 횟수를 상태 변수(status variable) 형태로 보여 줍니다.

1. 전체 명령 통계 조회하기

Com_로 시작하는 모든 상태 변수를 한 번에 확인하려면 다음 구문을 사용합니다.

SHOW STATUS LIKE 'Com_%';

이 쿼리 하나로 SELECT, INSERT, UPDATE, DELETE뿐 아니라 CREATE TABLE, ALTER TABLE 등 서버에서 실행된 거의 모든 명령의 횟수를 확인할 수 있습니다.

2. SELECT·INSERT·UPDATE·DELETE 비율만 조회하기

읽기/쓰기 분석에 핵심이 되는 네 가지 DML 명령의 실행 횟수만 골라서 보고 싶다면 아래 구문을 사용하세요.

SHOW GLOBAL STATUS
WHERE Variable_name = 'Com_insert'
   OR Variable_name = 'Com_select'
   OR Variable_name = 'Com_update'
   OR Variable_name = 'Com_delete';

실제 실행 예시와 출력 결과는 다음과 같습니다.

mysql> SHOW GLOBAL STATUS
    -> WHERE Variable_name = 'Com_insert'
    ->    OR Variable_name = 'Com_select'
    ->    OR Variable_name = 'Com_update'
    ->    OR Variable_name = 'Com_delete';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_delete    | 5     |
| Com_insert    | 340   |
| Com_select    | 286   |
| Com_update    | 13    |
+---------------+-------+
4 rows in set (0.00 sec)

3. 결과 해석하기

위 결과를 바탕으로 읽기/쓰기 비율을 계산해 보겠습니다.

  • 읽기(Read): Com_select = 286회
  • 쓰기(Write): Com_insert(340) + Com_update(13) + Com_delete(5) = 358회

전체 작업 644건 중 읽기가 약 44%, 쓰기가 약 56%를 차지하므로, 이 서버는 쓰기 작업이 다소 많은 워크로드라고 할 수 있습니다. 반대로 Com_select의 비중이 훨씬 높다면 읽기 위주 서비스이므로 인덱스 최적화나 읽기 전용 복제 서버(replica) 확장이 효과적일 수 있습니다.

4. SHOW STATUS LIKE 'Com_%' 실행 결과 예시

SHOW STATUS LIKE 'Com_%'를 실행하면 168개에 달하는 변수가 출력되며, 그중 값이 0이 아닌 주요 항목은 다음과 같습니다.

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| Com_change_db      | 1     |
| Com_create_table   | 6     |
| Com_insert         | 42    |
| Com_select         | 27    |
| Com_set_option     | 3     |
| Com_show_status    | 3     |
| Com_show_variables | 2     |
+--------------------+-------+
168 rows in set (0.04 sec)

대부분의 변수는 해당 명령이 한 번도 실행되지 않아 0으로 표시되며, 실제로 사용된 명령만 0보다 큰 값을 가집니다.

5. 알아두면 좋은 팁

  • 세션 vs 글로벌: SHOW STATUS는 현재 세션 기준, SHOW GLOBAL STATUS는 서버 전체(모든 연결의 누적값) 기준입니다.
  • 초기화 시점: 상태 변수 값은 서버가 재시작되면 0부터 다시 누적됩니다.
  • 변수 이름 표기: 조건 비교 시 대소문자를 일관되게 맞추는 것이 안전합니다(예: 'Com_update').
  • 추가 분석: MySQL 8.0에서는 performance_schema의 events_statements_summary_global_by_event_name 테이블을 활용하면 더욱 상세한 문(statement)별 통계를 얻을 수 있습니다.