Mysql Profiling 사용을 위한 설정
- MySQL 에서는 쿼리가 처리되는 동안 각 단계별 작업에 시간이 얼마나 걸렸는지 확인할 수 있는 기능을 제공
- 프로파일링 기능을 활성화 설정
// profiling 기능 활성화하기
set profiling=1;
set profiling_history_size=100;

확인할 Query_ID 찾기
- profiling 기능을 통해 확인하고자 하는 쿼리 실행
- show profiles ; 명령어 실행 후 실행한 쿼리를 찾아서 Query_id 찾기
SELECT * FROM study_db.notice
WHERE createDate BETWEEN '2023-01-15 00:00:00' AND '2023-02-14 23:59:59'
;
show profiles ;

- 5번 Query_ID에서 실행한 쿼리를 찾을 수 있었다.
찾은 Query_id(5)에 대해 profiling 기능으로 확인
- Profile을 통해 조회할 수 있는 세부 목록
- BLOCK IO
- MEMORY
- CPU
- CONTEXT SWITCHES
- IPC
- PAGE FAULTS
- SOURCE
- SWAPS
// 해당 쿼리문의 수행 시간을 더 상세한 단위로 확인
show profile for query 5;

// 해당 쿼리의 CPU 사용량을 분석
show profile cpu for query 23;

ngrinder를 통해서 인덱스 적용 전과 후 비교
부하테스트
- 상황 : 공지사항 생성일자가 2023-01-15 00:00:00 ~ 2023-02-14 23:59:59 인 데이터 조회
- GET /api/notices/dates
- 인덱스 적용하기 전
- Vuser(가상 사용자) : 10
- Duration : 1분

- 인덱스(idx_notice_createDate) 적용 후
- Vuser(가상 사용자) : 10
- Duration : 1분

수치 변화
- 평균 TPS : { 13 } → { 18 }
- 약 45% 개선
- Peek TPS : { 20 } → { 21 }
- Mean Test Time : { 742 } ms → { 553 }ms
- Exected Tests : { 705 } → { 939 }
- 인덱스 적용 후가 전보다 TPS도 낮아지고 평균 테스트 시간도 단축되어 성능적으로 향상됨을 알 수 있다.
'개발 > 성능개선' 카테고리의 다른 글
비동기 방식 (0) | 2024.03.10 |
---|---|
인덱스를 타지 않는 경우 (0) | 2024.03.09 |
인덱스 활용 (0) | 2024.03.08 |
Ehcache (0) | 2024.03.08 |
nGrinder 용어 (0) | 2024.03.05 |