Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- S3 Gateway Endpoint
- 리눅스
- mysql 엔진
- 마운트
- BastianHost
- innodb구조
- 어뎁티브 해시 인덱스
- 안전하게 테이블 변경
- x lock s lock
- InnoDB
- sessionManager
- performance스키마
- s3 sync
- s3
- MySQL
- 온라인 ddl
- 밑바닥부터 구현하는 컴퓨팅 시스템
- S3 private통신
- Terraform
- 필수 스크립트
- S3 Interface Endpoint
- mysql 구조
- 도커
- ec2
- ix is lock
- innodb 버퍼풀
- mysql 아키텍쳐
- SessionManager 터널링
- 운용 시 유용한 쿼리
- nandtotetris
Archives
- Today
- Total
이것이 점프 투 공작소
운영시 유용한 Performance, Sys 쿼리 모음 본문
DB에서 뭔가 Performance나 sys테이블 봐야할거같은데
어떻게 쿼리를 쳐서 봐야할지 바로바로 생각나지 않는 경우가 많죠
그래서 유용할만한 쿼리들을 포스팅해두려 합니다.
(Real MySQL을 보고 공부한 내용을 다룹니다.)
호스트 접속 이력 확인
MySQL에 접속했던 host들의 전체 목록을 확인합니다.
CURRENT_CONNECTIONS는 현재 연결된 커넥션 수, TOTAL_CONNECTIONS는 연결되었던 총 커넥션 수 입니다.
SELECT * FROM performance_schema.hosts
MySQL 총 메모리 사용량 확인
SELECT * FROM sys.memory_global_total
스레드별 메모리 사용량 확인
SELECT thread_id, user, current_allocated FROM sys.memory_by_thread_by_current_bytes
특정 프로세스 ID의 메모리 사용내역 확인
SELECT thread_id, event_name,
sys.format_bytes(CURRENT_NUMBER_OF_BYTES_USED)
FROM
performance_schema.memory_summary_by_thread_by_event_name
WHERE thread_id = (SELECT sys.ps_thread_id(<프로세스ID>))
미사용 인덱스 확인
SELECT * FROM sys.schema_unused_indexes
중복된 인덱스 확인
SELECT * FROM sys.schema_redundant_indexes
변경이 없는 테이블 확인 (구동된 시점부터 현재까지 쓰기가 발생하지 않은 테이블)
SELECT * FROM information_schema.tables AS t
JOIN performance_schema.table_io_waits_summary_by_table AS tio
ON tio.OBJECT_SCHEMA = t.TABLE_SCHEMA AND tio.OBJECT_NAME = t.TABLE_NAME
WHERE t.TABLE_SCHEMA NOT IN ('mysql', 'performance_schema','sys')
AND tio.COUNT_WRITE = 0
I/O 요청이 많은 테이블 목록 확인
SELECT * FROM sys.io_global_by_file_by_bytes WHERE file LIKE '%idb'
테이블별 작업량 통계 확인
SELECT table_schema,table_name, rows_updated, rows_inserted, rows_deleted, rows_inserted
,io_read, io_write
FROM
sys.schema_table_statistics
WHERE TABLE_SCHEMA NOT IN ('mysql', 'performance_schema','sys')
풀 테이블 스캔 쿼리 확인
SELECT db, query, exec_count, sys.format_time(total_latency),
rows_examined_avg, rows_sent_avg, last_seen
FROM sys.x$statements_with_full_table_scans
자주 실행되는 쿼리 목록 확인
SELECT db, exec_count, query
FROM sys.statement_analysis
ORDER BY exec_count DESC
실행시간이 긴 쿼리 목록
SELECT query, exec_count, sys.format_time(avg_latency)
,rows_sent_avg, rows_examined_avg, last_seen
FROM sys.x$statement_analysis
ORDER BY avg_latency DESC
최근에 정렬 작업을 수행한 쿼리 확인
SELECT * FROM
sys.statements_with_sorting
ORDER BY last_seen DESC LIMIT 1
최근에 임시테이블을 생성한 쿼리 확인
SELECT * FROM
sys.statements_with_temp_tables
LIMIT 10
트랜잭션이 활성 상태인 커넥션에서 실행한 쿼리 내역 확인
SELECT ps_t.PROCESSLIST_ID,
ps_esh.THREAD_ID,
CONCAT(ps_t.PROCESSLIST_USER,'@',ps_t.PROCESSLIST_HOST) as 'account',
ps_esh.EVENT_NAME,
ps_esh.SQL_TEXT,
sys.format_time(ps_esh.TIMER_WAIT) AS 'duration',
DATE_SUB(NOW(), INTERVAL (SELECT VARIABLE_VALUE FROM performance_schema.global_status
WHERE VARIABLE_NAME='UPTIME') - ps_esh.TIMER_START*10e-13 second) AS 'start_time',
DATE_SUB(NOW(), INTERVAL (SELECT VARIABLE_VALUE FROM performance_schema.global_status
WHERE VARIABLE_NAME='UPTIME') - ps_esh.TIMER_END*10e-13 second) AS 'end_time'
FROM performance_schema.threads ps_t
INNER JOIN performance_schema.events_transactions_current ps_etc
ON ps_etc.THREAD_ID = ps_t.THREAD_ID
INNER JOIN performance_schema.events_statements_history ps_esh
ON ps_esh.NESTING_EVENT_ID = ps_etc.NESTING_EVENT_ID
WHERE ps_etc.STATE = 'ACTIVE'
AND ps_esh.MYSQL_ERRNO = 0
ORDER BY ps_t.PROCESSLIST_ID, ps_esh.TIMER_START
특정 세션에서 실행된 전체 쿼리 확인
SELECT ps_t.PROCESSLIST_ID,
ps_esh.THREAD_ID,
CONCAT(ps_t.PROCESSLIST_USER,'@',ps_t.PROCESSLIST_HOST) as 'account',
ps_esh.EVENT_NAME,
ps_esh.SQL_TEXT,
DATE_SUB(NOW(), INTERVAL (SELECT VARIABLE_VALUE FROM performance_schema.global_status
WHERE VARIABLE_NAME='UPTIME') - ps_esh.TIMER_START*10e-13 second) AS 'start_time',
DATE_SUB(NOW(), INTERVAL (SELECT VARIABLE_VALUE FROM performance_schema.global_status
WHERE VARIABLE_NAME='UPTIME') - ps_esh.TIMER_END*10e-13 second) AS 'end_time',
sys.FORMAT_TIME(ps_esh.TIMER_WAIT) AS 'duration'
FROM
performance_schema.events_statements_history ps_esh
INNER JOIN performance_schema.threads ps_t
ON ps_t.THREAD_ID = ps_esh.THREAD_ID
WHERE ps_t.PROCESSLIST_ID = <PROCESS_ID>
AND ps_esh.SQL_TEXT IS NOT NULL
AND ps_esh.MYSQL_ERRNO = 0
ORDER BY ps_esh.TIMER_START DESC
'DB' 카테고리의 다른 글
서비스중인 테이블을 안전하게 변경(ALTER)하는 방법 (0) | 2025.01.09 |
---|---|
MySQL 실행계획 보는 방법 (0) | 2024.12.30 |
MySQL 옵티마이저가 하는 일 (0) | 2024.12.21 |
InnoDB 아키텍쳐를 알아보자 (0) | 2024.12.12 |
MySQL엔진의 아키텍쳐를 알아보자 (1) | 2024.12.10 |