본문 바로가기
개발/Linux

gsjava MariaDB CPU 모니터링

by 철권 2023. 11. 20.
728x90

 

* DB 덤프

# mysqldump -u testUser -p testDB > test.sql

Enter password:

*테이블별  백업

# mysqldump -u testUser -p testDB testTable > test.sql

Enter password:

* 복원

# mysql -u testUser -p testDB < test.sql

Enter password:

=========================== 모니터링 ========================

[processlist]
mysql> show processlist;
또는 콘솔에서 mysqladmin 명령을 사용
# mysqladmin -uroot -p proc stat -i5    (조금더 상세)
# mysqladmin -uroot -p processlist -i5    (숫자는 새로 고침할 시간, 초단위)

[sleep 죽이는 법]
mysql> kill id;
또는
# mysqladmin kill id -u root -p

// 현재 상태 조회> SHOW GLOBAL STATUS;
Memory_used = 577656392 // 현재 사용 중인 메모리 bytesMax_used_connections = 306 // flush 이후 최대 동시 접속 수
// 상태를 초기화, RELOAD 권한 필요> FLUSH STATUS;

 

MariaDB, 슬로우 쿼리 원인 분석 및 성능 튜닝하기

 

MySQL/MariaDB, 슬로우 쿼리 원인 분석 및 성능 튜닝하기

슬로우 쿼리 원인 분석 및 해결 데이터베이스의 슬로우 쿼리를 유발하는 요소는 많다. 형사가 단서를 잡아 하나씩 수사망을 좁혀가듯이 원인을 분석해가야 한다. 가장 먼저 선행되어야할, 그리

jsonobject.tistory.com

수천만건 데이터가 있는 테이블을 만들었다가 삭제하고 중간에 취소하고,

하다보니 이상하게 서버를 리부팅해도 계속 mysql이 99%를 먹고 있는...

그리고 전체 서버가 엄청나게 느려지거나 에러가 나는 현상이 지속되어

 

kill process부터 이것저것 다 시도하고 로그파일 지워서 하드 용량도 확보하고

my.cnf도 건드려보고 

다해도 그대로인데...

 

mysql 접속해서

FLUSH STATUS;

한번 해줬더니 정리가 되었다.

MySQL 과도한 CPU 사용 Thread 확인 ( Pidstat )

yum -y install sysstat

[root:LEE:/root > ps -ef | grep mysql mysql 1708 1686 1 13:20 pts/0 00:00:03 mysqld --defaults-file=/etc/my5.7.cnf --user=mysql

[root:LEE:/root > pidstat -t -p 1708 2

mysql> select * from performance_schema.threads where THREAD_OS_ID=1737\G;

mysql> kill 27;

 

apt install sysstat

mpstat

[IOwait 높은 경우]

CPU 사용량이 높으면서 상대적으로 IOwait 사용량이 높다면 디스크의 I/O 오퍼레이션에 의한 병목을 의심해야 한다. 위에서 언급했듯이 일반적으로 데이터베이스 서버의 경우 독립적으로 운영하기 때문에 항목이 높다면 MySQL 서버가 실행되는 서버의 디스크 성능이 쿼리 트래픽을 처리하지 못해서  발생할 있다. 이때 초당 쿼리 유입량을 함께 확인하여 실제 요청이 많은지 확인할 필요가 있다. 또한 최적화 되지 않은 쿼리로 인하여 요청량은 적지만 디스크에 많은 부하를 일으키는 경우 IOwait 높게 나타날 있다. 경우는 적절한 인덱스를 사용하도록 가이드하거나 불필요한 정렬이나 그룹핑을 하지 않도록 하는것도 방법이다. 또한 빈번한 서브쿼리의 경우 결과를 임시테이블에(메모리보다 결과가 클겅우) 적재하여 처리하기 때문에 디스크 사용이 높을 있다.

 

[CPU User 높은 경우]

CPU IOwait CPU System상태가 낮은대 반해 CPU User 비율이 높은것은 MySQL 서버가 CPU 안정적으로 사용하고 있는 것으로 판단할 있다. 하지만 전체 CPU 높은 상태에서 CPU User 높은 경우 헤비한 쿼리(악성쿼리) 발생하지 않는지 확인해볼 필요가 있다. 또한 단순하게 CPU 사용량만으로는 판단할 없으면 요청되는 쿼리량을 확인하여 쿼리량이 많으면서 CPU 높으면 당연하지만 쿼리 요청량이 적은반면에 높다면 헤비 쿼리를 의심할 있다.

 

[CPU System 높은 경우]

CPU System  사용률이 높은 경우는 리눅스의 Kernel 프로세스의 CPU 사용량이 높은것으로 판단할 있다. 경우는 MySQL 서버가 커널이 실행해야하는 명령을 많이 수행한다는 뜻으로 커널의 의존성을 낮추기 위한 최적화 방안이 필요하다. 특히 서버가 데이터베이스 전용으로 사용하지 않고 다양한 어플리케이션이 함께 동작한다면 다른 요인으로 인해서 커널 사용량이 높을 수도 있다.

728x90
반응형