본문 바로가기
개발/성능개선

Mysql Profiling으로 수치 확인

by BellOne4222 2024. 3. 9.

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