>php教程 >PHP开发 >MySQL은 성능에 중점을 두고 관련 분석 명령어에 대한 자세한 설명을 제공합니다.

MySQL은 성능에 중점을 두고 관련 분석 명령어에 대한 자세한 설명을 제공합니다.

高洛峰
高洛峰원래의
2016-11-19 09:32:491243검색

1. MySQL 성능 모니터링 문제


QPS(초당 쿼리 수): 여기서 QPS는 실제로 초당 MySQL 서버에서 실행되는 총 쿼리 수를 나타냅니다.
QPS = 쿼리 / 초


TPS(초당 트랜잭션): MySQL 서버에는 직접 트랜잭션 카운터가 없으며 롤백 및 커밋 카운터를 통해서만 시스템의 트랜잭션 볼륨을 계산할 수 있습니다. 따라서 다음과 같은 방법으로 클라이언트 애플리케이션에서 요청한 TPS 값을 가져와야 합니다.
TPS = (Com_commit + Com_rollback) / 초


키 버퍼 적중률: 키 버퍼 적중률은 MyISAM 유형 테이블에 있는 인덱스의 캐시 적중률을 나타냅니다. 이 적중률의 크기는 MyISAM 유형 테이블의 읽기 및 쓰기 성능에 직접적인 영향을 미칩니다. 키 버퍼 적중률
에는 실제로 읽기 적중률과 쓰기 적중률이 포함됩니다. 이 두 적중률의 값은 MySQL에서 직접 제공되지 않지만 다음과 같이 계산할 수 있습니다.
key_buffer_read_hits = ( 1 - Key_reads / Key_read_requests) * 100%
key_buffer_write_hits= (1 - Key_writes / Key_write_requests) * 100%


Innodb 버퍼 적중률: 여기서 Innodb 버퍼는 innodb_buffer_pool, 즉 메모리를 나타냅니다. Innodb 유형 테이블의 데이터 및 인덱스를 캐시하는 데 사용되는 공간입니다. 키 버퍼와 마찬가지로
MySQL 서버에서 제공하는 해당 상태 값을 기반으로 적중률을 계산할 수도 있습니다.
innodb_buffer_read_hits=(1-Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests) * 100%


쿼리 캐시 적중률: 쿼리 캐시를 사용하는 경우 쿼리 캐시를 올바르게 사용하고 있는지 여부를 알 수 있으므로 쿼리 캐시 적중률도 모니터링해야 합니다.
쿼리 캐시 적중률은 다음과 같이 계산됩니다.
Query_cache_hits= (Qcache_hits / (Qcache_hits + Qcache_inserts)) * 100%


테이블 캐시 상태: 테이블 캐시의 현재 상태는 시스템 매개변수 table_open_cache의 설정이 합리적인지 판단하는 데 도움이 될 수 있습니다. 상태 변수 Open_tables와 Opened_tables 간의 비율이 너무 낮다면 테이블 캐시 설정이 너무 작다는 의미입니다.
SHOW STATUS LIKE 'Open%';

스레드 캐시 적중률: 스레드 캐시 적중률 rate는 직접 반영될 수 있습니다. 시스템 매개변수 thread_cache_size가 적절하게 설정되었는지 확인하세요. 합리적인 thread_cache_size 매개변수는
새로운 연결을 생성하는 데 필요한 많은 리소스를 절약할 수 있습니다.
스레드 캐시 적중률은 다음과 같이 계산됩니다.
Thread_cache_hits = (1 - Threads_created / Connections) * 100%

잠금 상태: 잠금 상태에는 테이블 잠금과 행 잠금이 포함됩니다. 상태 변수에는 잠금을 획득한 총 횟수, 잠금으로 인해 다른 스레드가 대기하게 된 횟수 및 잠금 대기 시간 정보가 포함됩니다.
SHOW STATUS LIKE '%lock%';
잠금 관련 시스템 변수를 통해 기존의 다른 스레드가 대기 중인 횟수를 포함하여 테이블 잠금의 총 횟수를 얻을 수 있습니다. 동시에 총 행 잠금 수, 총 행 잠금 시간, 각 행 잠금에 대한 대기 시간, 행 잠금으로 인한 최대 대기 시간 및 행 잠금 수와 같은 매우 자세한 행 잠금 정보도 얻을 수 있습니다. 현재 행 잠금을 기다리고 있는 스레드 수입니다. 이러한 수량을 모니터링함으로써 전체 시스템 잠금이 심각한지 여부를 명확하게 이해할 수 있습니다. Table_locks_waited 대 Table_locks_immediate의 비율이 크다면 테이블 잠금으로 인한 차단이 심각하다는 의미이므로 쿼리 문을 조정해야 하거나 스토리지 엔진을 변경해야 하거나 비즈니스 로직을 변경해야 할 수도 있습니다. 조정. 물론 구체적인 개선방안은 실제 시나리오를 토대로 판단해야 한다. Innodb_row_lock_waits가 더 크다면 Innodb의 행 잠금도 심각하여 다른 스레드의 정상적인 처리에 영향을 미친다는 의미입니다. 원인도 찾아서 해결해야 합니다. 심각한 Innodb 행 잠금의 원인은 쿼리 문에서 사용하는 인덱스가 충분히 합리적이지 않아(Innodb 행 잠금은 인덱스를 기반으로 잠김) 간격 잠금이 너무 커지기 때문일 수 있습니다. 또한 시스템 자체의 처리 능력이 제한되어 있을 수 있으므로 다른 측면(예: 하드웨어 장치)을 고려해야 합니다.

복제 지연: 복제 지연은 슬레이브 데이터베이스가 일관되지 않은 상태에 있는 시간에 직접적인 영향을 미칩니다.
Slave 노드에서 "SHOW SLAVE STATUS" 명령을 실행하여 Seconds_Behind_Master 항목의 값을 얻어 현재 슬레이브의 지연 시간(단위: 초)을 파악합니다.

Tmp 테이블 상태: Tmp 테이블 상태는 MySQL이 임시 테이블을 너무 많이 사용하는지, 임시 테이블이 너무 커서 메모리에서 디스크 파일로 스왑 아웃해야 하는지 여부를 모니터링하는 데 주로 사용됩니다. 임시 테이블 사용 현황 정보는 다음과 같은 방법으로 얻을 수 있습니다:
SHOW STATUS LIKE 'Created_tmp%';
+--------- -- -+-------+
| 변수_이름 |
+------------+ -- -----+
| Created_tmp_disk_tables | 0 |
| Created_tmp_tables |
+--------- -- -+---------+
Created_tmp_tables가 매우 큰 경우 시스템에 정렬 작업이 너무 많거나 테이블 연결 방법이 최적화되지 않은 것일 수 있습니다. 그리고 Created_tmp_disk_tables와 Created_tmp_tables의 비율이 너무 높은 경우(예: 10% 이상) tmp_table_size 시스템 매개변수가 충분히 크게 설정되었는지 고려해야 합니다.


Binlog Cache 사용 상태: Binlog Cache는 디스크에 기록되지 않은 Binlog 정보를 저장하는 데 사용됩니다.
관련 상태 변수는 다음과 같습니다.
SHOW STATUS LIKE 'Binlog_cache%';
Binlog_cache_disk_use 값이 0이 아닌 경우 Binlog 캐시 크기가 충분하지 않을 수 있으며, binlog_cache_size 시스템 매개변수 크기 증가할 수 있습니다.

Innodb_log_waits 수량: Innodb_log_waits 상태 변수는 Innodb 로그 버퍼의 공간 부족으로 인한 대기 횟수를 직접 반영합니다.
SHOW STATUS LIKE 'Innodb_log_waits';
이 변수 값의 발생 빈도는 시스템의 쓰기 성능에 직접적인 영향을 미치므로 해당 값이 초당 1회에 도달할 때 시스템 매개변수 innodb_log_buffer_size의 값은 다음과 같아야 합니다. 결국 시스템에서 공유하는 캐시는 적절하게 늘리면 메모리 부족 문제가 발생하지 않습니다.


2. 성능 분석 명령어 상세 설명

SHOW STATUS;
FLUSH STATUS;

현재 연결 수 보기SHOW STATUS LIKE 'Thread_%';
Thread_cached: 캐시된 스레드 수
Thread_running: 활성 스레드 수 thread
Thread_connected: 현재 연결된 스레드 수
Thread_created: 생성된 총 스레드 수

스레드 캐시 적중
Thread_connected = SHOW GLOBAL STATUS LIKE Thread_created; STATUS LIKE 'Connections';
TCH=(1 - (Threads_created / Connections)) * 100

활성 연결 콘텐츠 보기
SHOW PROCESSLIST;

TCH 번호가 더 작은 경우 90% 이상인 경우 연결을 생성하는 데 시간이 걸립니다. Thread_cached 수를 늘리십시오.

QPS(초당 쿼리 처리) MyISAM 엔진

질문 = '질문'과 같은 전역 상태 표시; >Uptime = 'Uptime'과 같은 전역 상태 표시;
QPS=질문/가동 시간

TPS(초당 전송된 트랜잭션 수), 즉 초당 서버에서 처리하는 트랜잭션 수인 경우 InnoDB가 표시되지만 InnoDB가 없으면 표시되지 않습니다.

Com_commit = 'Com_commit'과 같은 글로벌 상태 표시;
Com_rollback = 'Com_rollback'과 같은 글로벌 상태 표시;
Uptime = 'Uptime'과 같은 글로벌 상태 표시;
TPS=(Com_commit + Com_rollback)/Uptime

QPS 및 TPS 값을 실시간으로 모니터링해야 합니다. 아키텍처 구축 중에 테스트 피크에 가까워지면 신이 함께 하시길

읽기/쓰기 비율
Qcache_hits = 'Qcache_hits'와 같은 글로벌 상태 표시;
Com_select = 'Com_select'와 같은 글로벌 상태 표시;
Com_insert = 'Com_insert'와 같은 글로벌 상태 표시;
Com_update = 'Com_update와 같은 글로벌 상태 표시 ';
Com_delete = 'Com_delete'와 같은 전역 상태 표시;
Com_replace = 'Com_replace'와 같은 전역 상태 표시;
R/W=(Com_select + Qcache_hits) / (Com_insert + Com_update + Com_delete + Com_replace) * 100

읽기-쓰기 비율은 데이터베이스 최적화의 중요한 기반입니다. 많이 읽으면 읽기를 최적화하고, 많이 쓰면 쓰기를 최적화

분당 쿼리가 느립니다
. Slow_queries = 'Slow_queries'와 같은 전역 상태 표시;
Uptime = 'Uptime'과 같은 전역 상태 표시;
SQPM=Slow_queries / (Uptime/60)

느린 쿼리/질문 비율
Slow_queries = 'Slow_queries'와 같은 전역 상태 표시;
Questions = 'Questions'과 같은 전역 상태 표시;
S/Q=Slow_queries/Questions

새 버전이 출시되면 느린 쿼리에 집중하세요

분당 Full_join
Select_full_join = 'Select_full_join'과 같은 글로벌 상태 표시;
Uptime = 'Uptime'과 같은 글로벌 상태 표시;
FJPM=Select_full_join / (Uptime/60)

인덱스를 사용하지 않아 발생한 full_join, 인덱스 최적화 진행

Innodb 버퍼 읽기 적중
Innodb_buffer_pool_reads = SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_reads';
Innodb_buffer_pool_read_requests = SHOW GLOBAL STATUS LIKE 'Innodb_buffer_ pool_read_requests' ;
IFRH=(1 - Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests) * 100

InnoDB 버퍼 적중률 목표 95%-99%;

테이블 캐시
Open_tables= SHOW GLOBAL STATUS LIKE ' Open_tables';
Opened_tables= 'Opened_tables'와 같은 전역 상태 표시;
table_cache= 'table_cache'와 같은 전역 상태 표시;

table_cache는 Open_tables보다 크고 Opened_tables보다 작아야 합니다



임시 테이블 대 디스크 비율


Created_tmp_tables = 'Created_tmp_tables'와 같은 전역 상태 표시;

Created_tmp_disk_tables = 'Created_tmp_disk_tables'와 같은 전역 상태 표시;


TDR=(Created_tmp_disk_tables/Created_tmp_tables)* 100


'Innodb_row_lock_%'와 같은 전역 상태 표시;

Innodb_row_lock_current_waits

현재 대기 중인 행 잠금 수입니다. MySQL 5.0에 추가되었습니다.

Innodb_row_lock_time

MySQL 5.0.3에 추가되었습니다. .

Innodb_row_lock_time_avg

행 잠금을 획득하는 데 걸리는 평균 시간(밀리초)입니다. MySQL 5.0.3에 추가되었습니다.

Innodb_row_lock_time_max

밀리초 단위로 행 잠금을 획득합니다.

Innodb_row_lock_waits

MySQL 5.0.3에 추가된 행 잠금 횟수입니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.