* slow query 란 ? DBMS 가 client로부터 요청받은 query를 수행할때 일정시간 이상 수행되지 못한 query
즉 길어야 1~2초 걸리는 db 쿼리가 예상보다 오래걸리는 경우를 뜻함.
저번주 잘못 된 쿼리덕에 전자결재 서버가 마비되는 상황 발생.
원인은 where절에 null값이 들어가 풀스캔 쿼리로 인해...
해결은 컨트롤러의 if문 한줄 추가로 간단하게 해결함.
언제든 값이 정상적이지 않을거라는 예외상황을 염두해둬야함
로그잘 쌓고 잘 확인하자
* 로그쌓는법
슬로우쿼리는 my.cnf 파일 내에서 설정.
my.cnf의 경로는 주로 /etc/my.cnf를 사용합니다. 편집기를 통해 다음의 내용을 입력한다.
my.cnf로 수정할 경우 mysql 서비스 재시작이 필요함.
항목 |
my.cnf 추가 내용 |
해당 값(초) 이상의 로그 기록 |
long_query_time = 3 |
슬로우쿼리 활성 여부 (0 = 비활성 / 1 = 활성) |
slow_query_log = 1 |
슬로우쿼리 로그파일 경로 |
slow_query_log_file = /var/log/mysql/slow_queries.log |
index를 사용하지 않는 쿼리 기록 여부 |
log_queries_not_using_indexes = on |
또는 mysql 내에서 아래와 같은 명령어를 통해 서비스 재시작을 하지 않고 적용도 가능.
항목 |
mysql 실행 명령어 |
해당 값(초) 이상의 로그 기록 |
mysql> set global long_query_time = 3; |
슬로우쿼리 활성 여부 (0 = 비활성 / 1 = 활성) |
mysql> set global slow_query_log = 1; |
슬로우쿼리 로그파일 경로 |
mysql> set global slow_query_log_file="/var/log/mysql/slow_queries.log |
index를 사용하지 않는 쿼리 기록 여부 |
mysql> set global log_queries_not_using_indexes = on; |
Time = 쿼리 요청 시각 Query_time : 쿼리 수행 시간 Lock_time : 락이 걸린 시간 Rows_sent = 쿼리 결과 row수 Rows_examined = 쿼리대상 row수 |
PostgreSQL
슬로우쿼리를 잡아내는 3가지 방법
1. 슬로우 쿼리가 발생하면 로그 남기기
2. 쿼리 실행계획 로그에 남기기
3. 쿼리 실행 통계 보기
1. 슬로우 쿼리가 발생하면 로그 남기기
어느정도 느려지면, 쿼리 실행문을 로그에 남길건지 postgresql.conf에 설정값을 추가해줘야한다.
conf파일 수정
> vi postgresql.conf
log_min_duration_statement = 5000 |
그리고 config를 reload 해주면 된다.
postgres=# SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) |
'기타' 카테고리의 다른 글
CURL 이란? CURL사용법 (0) | 2020.02.12 |
---|---|
HTTP상태코드의 종류와 의미 (0) | 2020.02.10 |
Git 커밋 상태를 확인하여 배포하는 쉘 스크립트 (0) | 2020.02.08 |
도메인, DNS, A레코드, CNAME ?? (0) | 2020.02.08 |
SMTP, POP3, IMAP 메일관련 프로토콜 개념 (0) | 2019.12.27 |