http://www.mysqlkorea.co.kr
한글매뉴얼 5.0 , 한글매뉴얼 5.1 , MySQL 5.1 HA , 사용자매뉴얼
Advanced Knowle...  
엔지니어 노트  
블로그존  
글로벌 MySQL  
MySQL 5.5 GA  
MySQL 5.6 Developer  
최신글
mysql 관련해서 …
이제 날씨가 가을…
killed 상태가 너…
mysql 백업/복구 …
apm 설치 헤메고…
 
한글매뉴얼 5.0 > 매뉴얼존 > 한글매뉴얼 5.0
 

5.2.4. 서버 상태변수

서버는 자신의 동작 정보를 제공하는 많은 상태 변수를 관리한다. 이러한 변수와 값들은 SHOW STATUS 명령문을 사용해서 볼 수가 있다:

mysql> SHOW STATUS;
+-----------------------------------+------------+
| Variable_name                     | Value      |
+-----------------------------------+------------+
| Aborted_clients                   | 0          |
| Aborted_connects                  | 0          |
| Bytes_received                    | 155372598  |
| Bytes_sent                        | 1176560426 |
...
| Connections                       | 30023      |
| Created_tmp_disk_tables           | 0          |
| Created_tmp_files                 | 3          |
| Created_tmp_tables                | 2          |
...
| Threads_created                   | 217        |
| Threads_running                   | 88         |
| Uptime                            | 1389872    |
+-----------------------------------+------------+
 

FLUSH STATUS 명령문을 사용하면 많은 종류의 상태 변수를 0으로 리셋 시킬 수가 있다.

상태 변수는 아래와 같은 의미를 가지고 있다. 아무런 버전 정보가 없는 변수들은 5.0 이전 버전에서부터 있었던 것들이다.

  • Aborted_clients

클라이언트가 올바르게 닫히지 않고 멈추었기 때문에 중단된 연결 숫자.

  • Aborted_connects

MySQL 서버 연결 실패 횟수.

  • Binlog_cache_disk_use

트랜젝션으로부터 받은 명령문을 저장하기 위해 임시 파일을 사용하고 binlog_cache_size 변수 값을 초과해서 임시 바이너리 로그 캐시를 사용한 트랜젝션의 숫자.

  • Binlog_cache_use

임시 바이너리 로그 캐시를 사용한 트랜젝션의 숫자.

  • Bytes_received

모든 클라이언트로부터 전달 받은 바이트의 숫자.

  • Bytes_sent

모든 클라이언트에 전달된 바이트의 수.

  • Com_xxx

Com_xxx 명령문 카운터 변수는 각 xxx 명령문이 실행된 횟수를 가리킨다. 각 명령문 타입에 대해서는 하나의 상태 변수가 존재한다. 예를 들면, Com_deleteCom_insertDELETEINSERT 명령문을 각각 카운트 한다.

Com_stmt_xxx 상태 변수는 5.0.8에 추가 되었다:

    • Com_stmt_prepare
    • Com_stmt_execute
    • Com_stmt_fetch
    • Com_stmt_send_long_data
    • Com_stmt_reset
    • Com_stmt_close

이 변수들은 프리페어드 명령문의 명령어를 표현한다. 이들 변수 이름들은 네트워크 레이어(layer)에서 사용되는 COM_xxx 명령어 셋을 참조한다. 다른 말로 표현하면, 이들 변수 값은 프리페어드 명령문 APImysql_stmt_prepare(), mysql_stmt_execute()와 같은 것을 호출한 후에 실행될 때마다 증가하게 되는 것이다. 하지만, Com_stmt_prepare, Com_stmt_execute, 그리고 Com_stmt_clos 역시 PREPARE, EXECUTE, 또는 DEALLOCATE PREPARE에 대해서도 각각 증가를 한다. 또한, 이전 버전의 명령문 카운터 변수 (4.1.3 이후에 사용된 것들)Com_prepare_sql, Com_execute_sql, 그리고 Com_dealloc_sql 역시 PREPARE, EXECUTE, DEALLOCATE PREPARE 명령문에 대해서 증가를 하게 된다. Com_stmt_fetch는 커서가 가져가는 네트워크 라운드-트립(round-trip)의 전체 숫자를 표현한다.

 

Com_stmt_xxx 변수의 모든 것들은 프리페어드 명령문 이슈가 알려져 있지 않거나 또는 실행하는 동안 에러가 발생되더라도 증가를 한다. 다른 말로 표현하면, 이들 변수의 값들은 발생된 요청의 숫자에 대응하는 것이지, 성공적으로 완료가 된 요청의 숫자에 대응되는 것이 아니다.

  • Compression

클라이언트 연결이 클라이언트/서버 프로토콜에서 압축 사용을 제어하는 변수. MySQL 5.0.16에 추가 됨.

  • Connections

MySQL 서버에 시도된 접속 횟수 (성공 또는 실패 모두 포함).

  • Created_tmp_disk_tables

서버가 명령문을 실행할 때 자동으로 디스크에 생성하는 임시 테이블의 숫자.

  • Created_tmp_files

mysqld가 생성한 임시 파일의 숫자.

  • Created_tmp_tables

서버가 명령문을 실행할 때 자동으로 생성되는 메모리 상주 임시 테이블의 숫자. Created_tmp_disk_tables이 크다면, tmp_table_size 변수의 값을 늘려서 임시 테이블이 디스크가 아닌 메모리 기반으로 생성되도록 할 수도 있다.

  • Delayed_errors

에러를 발생 시키는 (아마도 duplicate key) INSERT DELAYED로 작성된 열의 숫자.

  • Delayed_insert_threads

사용 중에 있는 INSERT DELAYED 핸들러 쓰레드 숫자.

  • Delayed_writes

INSERT DELAYED가 기록한 열의 숫자.

  • Flush_commands

FLUSH 명령문의 실행 숫자.

  • Handler_commit

내부 COMMIT 명령문의 숫자.

  • Handler_discover

MySQL 서버는 NDB Cluster 스토리지 엔진이 지정한 이름을 사용하는 테이블을 인식하는지 요청할 수 있다. 이것을 디스커버리 (discovery)라고 부른다. Handler_discover는 테이블들이 이 메커니즘을 통해서 몇 번이나 발견되었는지를 나타낸다.

  • Handler_delete

열이 테이블에서 삭제된 횟수.

  • Handler_read_first

첫 번째 엔트리가 인덱스에서 읽혀진 횟수. 이 값이 크다면, 서버는 많은 수의 전체 인덱스 스캔 (full index scan)을 실행하고 있음을 의미하는 것이다; 예를 들면, SELECT col1 FROM foo의 경우에서 col1은 인덱스 된 것으로 간주된다.

  • Handler_read_key

키를 근거로 열을 읽기 위한 요청 횟수. 이 값이 크다면, 여러분이 사용하는 테이블이 쿼리에 올바르게 인덱스 되어 있다는 좋은 의미다.

  • Handler_read_next

키 순서에서 바로 다음에 있는 열을 읽기 위한 요청 횟수. 인덱스 컬럼을 범위 제한 값으로 쿼리 하거나 또는 인덱스 스캔을 한다면, 이 값이 증가하게 된다.

  • Handler_read_prev

키 순서에서 바로 전에 있는 열을 읽기 위한 요청 횟수. 이러한 읽기 방식은 주로 ORDER BY ... DESC를 최적화 시키기 위해 사용된다.

  • Handler_read_rnd

고정된 위치를 근거로 열을 읽기 위한 요청 횟수. 결과 값을 정렬하도록 요청하는 많은 수의 쿼리를 실행하는 중이라면, 이 값이 높게 설정된다. 이것은 MySQL이 전체 테이블을 스캔할 것을 요구하는 쿼리를 많이 가지고 있거나 또는 키를 정확히 사용하지 않는 조인(join)을 가지고 있는 것이다.

  • Handler_read_rnd_next

데이터 파일에 있는 다음 열을 읽기 위한 요청 횟수. 이 값은 여러분이 많은 수의 테이블 스캔을 할 경우에 높게 된다. 이것은 일반적으로 테이블이 올바르게 인덱스 되지 않았거나 또는 쿼리가 인덱스를 제대로 활용하지 못하고 있음을 의미한다.

  • Handler_rollback

내부 ROLLBACK 명령문의 숫자.

  • Handler_update

테이블에 있는 열을 업데이트 하기 위해 요청하는 횟수.

  • Handler_write

테이블에 열을 하나 삽입하기 위한 요청 횟수.

  • Innodb_buffer_pool_pages_data

데이터를 가지고 있는 페이지 숫자. MySQL 5.0.2에서 추가됨.

  • Innodb_buffer_pool_pages_dirty

현재 더티 (dirty)한 데이터가 있는 페이지 숫자. MySQL 5.0.2에서 추가됨.

  • Innodb_buffer_pool_pages_flushed

버퍼 풀 페이지-플러시 (buffer pool page-flush) 요청 숫자. MySQL 5.0.2에 추가 됨.

  • Innodb_buffer_pool_pages_free

프리 (free) 페이지 숫자. MySQL 5.0.2에 추가 됨.

  • Innodb_buffer_pool_pages_latched

InnoDB 버퍼 풀에 있는 latched 페이지 숫자. 이것은 현재 읽히고 있거나 또는 쓰여지고 있거나 또는 여러 가지 이유로 인해 플러시 될 수 없거나 또는 삭제할 수 없는 페이지들을 가리킨다. MySQL 5.0.2에 추가 됨.

  • Innodb_buffer_pool_pages_misc

열 잠금 또는 적응적 해시 인덱스(adaptive hash index)와 같은 관리적인 오버 헤드를 위해 할당되었기 때문에 비지 (busy) 상태인 페이지의 숫자. 이 값은 Innodb_buffer_pool_pages_totalInnodb_buffer_pool_pages_freeInnodb_buffer_pool_pages_data 형태로도 계산할 수 있다. MySQL 5.0.2에 추가 됨.

  • Innodb_buffer_pool_pages_total

페이지에 있는 버퍼 풀의 전체 크기. MySQL 5.0.2에 추가 됨.

  • Innodb_buffer_pool_read_ahead_rnd

InnoDB에 의해 초기화 되는 무작위(random)” 읽기 위주 (read-aheads) 숫자. 이것은 쿼리가 테이블의 많은 부분을 무작위 순서로 스캔 할 때 발생된다. MySQL 5.0.2에서 추가 됨.

  • Innodb_buffer_pool_read_ahead_seq

InnoDB에 의해 초기화 되는 시퀀셜 읽기 위주 (read-aheads) 숫자. 이것은 InnoDB가 시퀀셜로 전체 테이블을 스캔할 때 발생한다. MySQL 5.0.2에서 추가 됨.

  • Innodb_buffer_pool_read_requests

InnoDB가 실행한 논리적인 읽기 요청의 숫자. MySQL 5.0.2에서 추가 됨.

  • Innodb_buffer_pool_reads

InnoDB가 버퍼 풀에서 찾지 못해서 단일 페이지 읽기를 해야만 하는 논리적 읽기 횟수. MySQL 5.0.2에 추가 됨.

  • Innodb_buffer_pool_wait_free

일반적으로는, InnoDB 버퍼 풀에 대한 쓰기 연산은 백그라운드에 실행된다.를 한다. 하지만, 페이지 읽기 연산이나 또는 페이지 생성이 필요하지만 클린 (clean) 페이지를 사용할 수 없는 경우에는, 페이지가 우선 플러시 되는 것을 기다려야 한다. 이 카운터는 이러한 대기 인스턴스를 카운트 한다. 버퍼 풀의 크기가 올바르게 설정 되었다면, 이 값은 작을 것이다. MySQL 5.0.2에서 추가 됨.

  • Innodb_buffer_pool_write_requests

InnoDB 버퍼 풀에서 실행된 쓰기 연산 수. MySQL 5.0.2에 추가 됨.

  • Innodb_data_fsyncs

지금까지 실행된 fsync() 연산 수. MySQL 5.0.2에 추가 됨.

  • Innodb_data_pending_fsyncs

현재 지연되고 있는 fsync() 연산 수. MySQL 5.0.2에 추가 됨.

  • Innodb_data_pending_reads

현재 지연되고 있는 읽기 연산 수. MySQL 5.0.2에 추가됨.

  • Innodb_data_pending_writes

현재 지연되고 있는 쓰기 연산 수. MySQL 5.0.2에 추가됨.

  • Innodb_data_read

지금까지 읽은 데이터의 양 (바이트 단위). MySQL 5.0.2에 추가됨.

  • Innodb_data_reads

데이터 읽기 연산의 전체 숫자. MySQL 5.0.2에 추가됨.

  • Innodb_data_writes

데이터 쓰기 연산의 전체 숫자. MySQL 5.0.2에 추가됨.

  • Innodb_data_written

지금까지 기록한 데이터의 양 (바이트 단위). MySQL 5.0.2에 추가됨.

  • Innodb_dblwr_writes, Innodb_dblwr_pages_written

실행을 마친 중복 기록 (doublewrite) 연산 숫자와 이러한 목적으로 작성된 페이지의 숫자. MySQL 5.0.2에 추가 됨. Section 14.2.14.1, “Disk I/O”를 참조할 것.

  • Innodb_log_waits

로그 버퍼가 너무 작아서 계속 진행을 하기 전에 플러시 되기를 요청 받은 대기 횟수. MySQL 5.0.2에 추가됨.

  • Innodb_log_write_requests

로그 기록 연산 요청 숫자. MySQL 5.0.2에 추가됨.

  • Innodb_log_writes

로그 파일 대한 물리적 기록 연산 수. MySQL 5.0.2에 추가됨.

  • Innodb_os_log_fsyncs

로그 파일에서 실행된 fsync() 쓰기 연산 수. MySQL 5.0.2에 추가됨.

  • Innodb_os_log_pending_fsyncs

지연되고 있는 로그 파일 fsync() 연산의 수. MySQL 5.0.2에 추가됨.

  • Innodb_os_log_pending_writes

지연되고 있는 로그 파일 쓰기 연산의 수. MySQL 5.0.2에 추가됨.

  • Innodb_os_log_written

로그 파일에 기록된 바이트 숫자. MySQL 5.0.2에 추가됨.

  • Innodb_page_size

컴파일 된 InnoDB 페이지의 크기 (디폴트는 16KB). 페이지에서는 많은 값들이 카운트 된다; 페이지 크기는 이러한 것들이 손쉽게 바이트 단위로 변환되도록 해준다. MySQL 5.0.2에 추가됨.

  • Innodb_pages_created

생성된 페이지의 숫자. MySQL 5.0.2에 추가됨.

  • Innodb_pages_read

읽혀진 페이지 숫자. MySQL 5.0.2에 추가됨.

  • Innodb_pages_written

기록된 페이지의 숫자. MySQL 5.0.2에 추가됨.

  • Innodb_row_lock_current_waits

현재 대기 상태에 있는 열 잠금의 숫자. MySQL 5.0.3에 추가됨.

  • Innodb_row_lock_time

열 잠금을 얻기 위해 소비한 전체 시간 (밀리 초 단위). MySQL 5.0.3에 추가됨.

  • Innodb_row_lock_time_avg

열 잠금을 얻기 위한 평균 시간 (밀리 초 단위). MySQL 5.0.3에 추가됨.

  • Innodb_row_lock_time_max

열 잠금을 얻기 위한 최대 소비 시간 (밀리 초 단위). MySQL 5.0.3에 추가됨.

  • Innodb_row_lock_waits

열 잠금을 기다려야만 하는 횟수. MySQL 5.0.3에 추가됨.

  • Innodb_rows_deleted

InnoDB 테이블에서 삭제된 열의 숫자. MySQL 5.0.2에 추가됨.

  • Innodb_rows_inserted

InnoDB 테이블에 삽입된 열의 숫자. MySQL 5.0.2에 추가됨.

  • Innodb_rows_read

InnoDB 테이블에서 읽은 열의 숫자. MySQL 5.0.2에 추가됨.

  • Innodb_rows_updated

InnoDB 테이블에 업데이트 된 열의 숫자. MySQL 5.0.2에 추가됨.

  • Key_blocks_not_flushed

변경은 되었으나 아직까지는 디스크에 플러시 되지 않은 키 캐시 안에 있는 키 블록의 숫자.

  • Key_blocks_unused

키 캐시에 있는 아직 사용되지 않은 블록의 숫자. 이 값을 사용해서 얼마나 많은 키 캐시가 사용 중에 있는지를 알아낼 수가 있다; Section 5.2.2, “서버 시스템 변수에 있는 key_buffer_size에 관한 내용을 보기 바란다

  • Key_blocks_used

키 캐시에 있는 이미 사용된 블록의 숫자. 이 값은 하이-워터 마크 (high-water mark)로서, 동시에 사용될 수 있는 블록의 최대 숫자를 가리키게 된다.

  • Key_read_requests

키 블록을 캐시로부터 읽기 위한 요청 숫자.

  • Key_reads

디스크에서 키 블록을 물리적으로 읽는 횟수. 만약에 Key_reads의 값이 크다면, key_buffer_size 값은 아마도 매우 작게 된다. 캐시가 안 되는 비율 (miss rate)Key_reads/Key_read_requests로 계산할 수 있다.

  • Key_write_requests

키 블록을 캐시에 기록하기 위한 요청 횟수.

  • Key_writes

키 블록을 디스크에 물리적으로 기록하는 횟수.

  • Last_query_cost

쿼리 옵티마이저가 계산한 최종 컴파일 쿼리의 전체 가격. 이것은 동일 쿼리에 대한 서로 다른 쿼리 플랜간의 비용을 비교할 때 유용하다. 디폴트 값은 0 이며, 이것은 어떠한 쿼리도 아직 컴파일 되지 않았음을 가리킨다. 이 변수는 MySQL 5.0.1에 추가 되었으며, 디폴트 값은 -1 이었다. MySQL 5.0.7에서는, 디폴트 값이 0으로 변경 되었다; 또한 5.0.7에서는, Last_query_cost 범위가 글로벌이 아닌 세션으로 변경되었다.

 

MySQL 5.0.16 이전에는, 이 변수는 쿼리 캐시로부터 지원 받는 쿼리에 대해서는 업데이트를 하지 않았다.

  • Max_used_connections

서버가 구동된 이후에 사용 중에 있는 동시 최대 연결 수.

  • Not_flushed_delayed_rows

INSERT DELAY 쿼리에 쓰여지기를 기다리고 있는 열의 숫자.

  • Open_files

열려 있는 파일의 숫자.

  • Open_streams

열려 있는 스트링의 숫자 (주로 로깅을 위해 사용되는).

  • Open_tables

열려 있는 테이블의 숫자.

  • Opened_tables

열린 적이 있는 테이블의 숫자. Opened_tables이 크다면, table_cache 값은 아마도 매우 작게 된다.

  • Qcache_free_blocks

쿼리 캐시에 있는 프리 메모리 블록의 숫자.

  • Qcache_free_memory

쿼리 캐시를 위한 프리 (free) 메모리의 양.

  • Qcache_hits

쿼리 캐시 히트 (hit) 숫자.

  • Qcache_inserts

쿼리 캐시에 추가된 쿼리의 숫자.

  • Qcache_lowmem_prunes

메모리 부족으로 인해 쿼리 캐시에서 삭제된 쿼리의 숫자.

  • Qcache_not_cached

캐시 되지 않은 (non-cached) 쿼리의 숫자 (캐시 할 수 없거나, 또는 query_cache_type 설정으로 인해 캐시 되지 않은).

  • Qcache_queries_in_cache

쿼리 캐시에 등록되어 있는 쿼리의 숫자.

  • Qcache_total_blocks

쿼리 캐시에 있는 블록의 전체 숫자.

  • Questions

클라이언트가 서버에 보낸 명령문의 숫자.

  • Rpl_status

페일-세이프 (fail-safe) 리플리케이션의 상태 (아직 구현되지 않음).

  • Select_full_join

인덱스를 사용하지 않기 때문에 테이블을 스캔 하는 조인 (join)의 숫자. 이 값이 0 이면, 테이블에 있는 인덱스를 조심스럽게 검사하기 바란다.

  • Select_full_range_join

참조 테이블에서 범위 검색을 사용하는 조인 (join)의 숫자.

  • Select_range

첫 번째 테이블에서 범위를 사용한 조인 (join)의 숫자. 이것은 일반적으로 값이 상당히 크다고 하더라도 치명적인 문제는 아니다.

  • Select_range_check

각 열을 사용한 이후에 키 사용량을 체크하는 키가 없는 조인의 숫자. 이것의 값이 0 이 아니면, 테이블에 있는 인덱스를 주의 깊게 살펴 보아야 한다.

  • Select_scan

첫 번째 테이블의 전체 스캔을 행한 조인의 숫자.

  • Slave_open_temp_tables

슬레이브 SQL 쓰레드가 현재 오픈한 임시 테이블의 숫자.

  • Slave_running

서버가 마스터에 연결되어 있는 슬레이브라면, 이 값은 ON.

  • Slave_retried_transactions

서버 스타트업 이후에 리플리케이션 슬레이브 SQL 쓰레드가 트랜젝션을 재 시도한 전체 횟수. 이 변수는 5.0.4에서 추가 되었다.

  • Slow_launch_threads

slow_launch_time 시간보다 더 많은 생성 시간이 필요한 쓰레드의 숫자.

  • Slow_queries

long_query_time 시간보다 오래 걸리는 쿼리의 숫자. Section 5.12.4, “The Slow Query Log”를 참고

  • Sort_merge_passes

정렬 알고리즘을 사용해야만 하는 병합 패스 (merge pass)의 숫자. 이 값이 크다면, 여러분은 sort_buffer_size 시스템 변수의 값을 늘리는 것을 고려해야 한다.

  • Sort_range

범위를 사용해서 실행된 정렬의 숫자.

  • Sort_rows

정렬된 열의 숫자.

  • Sort_scan

테이블 스캔에 의해 실행된 정렬의 숫자.

  • Ssl_xxx

SSL 접속을 위해 사용된 변수들.

  • Table_locks_immediate

테이블 잠금을 즉시 획득한 횟수.

  • Table_locks_waited

테이블 잠금을 즉시 획득하지 못하고 대기가 필요했던 횟수. 이 값이 크고 성능상에 문제가 있다면, 여러분은 우선 쿼리를 최적화 하여야 하고, 그 다음에 테이블을 분리하거나 또는 리플리케이션을 사용해야 한다.

  • Threads_cached

쓰레드 캐시에 있는 쓰레드의 숫자.

  • Threads_connected

현재 열려 있는 연결 숫자.

  • Threads_created

연결을 처리하기 위해 생성된 쓰레드의 숫자. 만약에 Threads_created가 크다면, thread_cache_size 값을 늘려본다. 캐시 히트 비율은 Threads_created/Connections로 계산할 수가 있다.

  • Threads_running

슬리핑 (sleeping) 상태가 아닌 쓰레드의 숫자.

  • Uptime

서버가 올라와 있는 시간.

상위
5.2.4. 서버 상태 변수
MySQL Korea 사이트의 컨텐츠 소유권은 (주)상상이비즈에 있으므로 무단전재를 금합니다.
ⓒ 2010-2011 ssebiz All Rights Reserved.