Amazon Aurora Mysql 5.6의 높은 CPU 및 좀비 스레드

3336 단어 awsrdsauroramysql
최근 실행 중인 Amazon Aurora Mysql 데이터베이스에서 일부 평균 CPU 사용률이 높은 것으로 나타났습니다Mysql 5.6 (oscar:5.6.mysql_aurora.1.22.2). 내가 공유하기에 흥미로웠다고 생각한 것은 좀비 스레드 또는 오랜 시간 동안 실행되고 끝나지 않은 스레드와 죽일 수 없는 스레드였습니다.

이들은 일부 집계를 수집하기 위해 여러 개의 임시 테이블을 만든 작은 보고 엔진에 의해 트리거된 간단한 DDL 문이었습니다.



프로세스 목록을 빠르게 살펴보면 아래와 같이 4일 동안 중단된 일부 DDL 문이 있음을 알 수 있습니다.

mysql> show full processlist;
| Id       | User            | Host                | db         | Command | Time   | State                     | Info                
| 77569519 | app        | x.x.x.x:yyyyy | test | Query   | 404949 | init                      | DROP TEMPORARY TABLE IF EXISTS temp1
:::::


동일한 TRX 상태:

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX where trx_mysql_thread_id = 77569519 \G
*************************** 1. row ***************************
                    trx_id: 124803462108
                 trx_state: RUNNING
               trx_started: 2022-09-17 21:01:45
     trx_requested_lock_id: NULL
          trx_wait_started: NULL
                trx_weight: 33614
       trx_mysql_thread_id: 77569519
                 trx_query: DROP TEMPORARY TABLE IF EXISTS temp1
       trx_operation_state: NULL
         trx_tables_in_use: 0
         trx_tables_locked: 0
          trx_lock_structs: 14
     trx_lock_memory_bytes: 376
           trx_rows_locked: 0
         trx_rows_modified: 33600
   trx_concurrency_tickets: 0
       trx_isolation_level: READ COMMITTED
         trx_unique_checks: 1
    trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
 trx_adaptive_hash_latched: 0
 trx_adaptive_hash_timeout: 0
          trx_is_read_only: 0
trx_autocommit_non_locking: 0
1 row in set (0.00 sec)


초기 용의자는 이러한 장기 실행 쿼리를 유발하는 디스크 문제였지만 메트릭이 정상으로 보였고 데이터베이스에 임시 테이블을 처리할 수 있는 충분한 로컬 스토리지가 있는 것으로 보였기 때문에 제외되었습니다. 이를 복구하기 위한 다음 시도는 긴 쿼리를 종료하여 CPU 주기를 확보하는 것이었습니다.

mysql> call mysql.rds_kill(77569519);
Query OK, 0 rows affected (0.00 sec)

mysql> call mysql.rds_kill_query(77569519);
Query OK, 0 rows affected (0.00 sec)


쿼리와 연결을 종료하려는 시도에도 불구하고 운이 없습니다. rds_kill_query는 아무 것도 변경하지 않았지만 rds_kill는 명령 상태를 Query에서 killed로 변경했습니다. 이들 중 어느 것도 이 경우에 도움이 되지 않았으며 trx_state는 계속해서 RUNNING였습니다.

mysql> show full processlist;
| Id       | User            | Host                | db         | Command | Time   | State                     | Info                
| 77569519 | app        | x.x.x.x:yyyyy | test | Killed  | 422937 | init     | DROP TEMPORARY TABLE IF EXISTS temp1
:::::


다음은 AWS Support에 도움을 요청하여 아래 권장 사항을 수집했습니다.
  • Amazon Aurora 클러스터를 재부팅하거나 장애 조치를 트리거합니다.
  • Amazon Aurora1.x에서 Amazon Aurora2.x로 업그레이드합니다. 특히 2.07.8 임시 테이블 주변의 안정성을 위해 커뮤니티 에디션에서 일부 수정 사항이 있습니다.

  • Aurora2.x는 호환성 관점에서 Mysql5.7.x로의 업그레이드를 의미합니다.

    도움이 되었기를 바랍니다!

    좋은 웹페이지 즐겨찾기