跳至內容

在升級 Amazon RDS for MySQL 或 Aurora MySQL 相容版資料庫執行個體後,如何解決 CPU 使用率過高及查詢效能變慢的問題?

2 分的閱讀內容
0

我的 Amazon Relational Database Service (Amazon RDS) for MySQL 或 Amazon Aurora MySQL 相容版資料庫執行個體進行了主要版本升級。現在,我遇到查詢效能變慢以及 CPU 使用率過高的情況。

解決方法

先決條件:

為避免誤判問題,請正確規劃疑難排解工作流程,並使用 AWS 工具與服務。如需更多資訊,請參考以下文章:

檢查特定升級問題

當您升級執行個體 (例如從 Aurora MySQL 相容版 5.7 升級到 Aurora MySQL 相容版 8.0),該升級可能會移除執行個體的某些功能。

如果您的執行個體使用已棄用的功能,可能會導致效能問題。若要檢查您的執行個體版本是否使用會影響工作負載的已棄用功能,請參閱 Amazon Aurora MySQL 相容版本說明。或者,請參閱 MySQL 網站上的 MySQL 8.0 版本說明

在以下範例情境中,您將 Aurora MySQL 相容版 5.7 叢集升級至 Aurora MySQL 相容版 8.0。升級後,即使查詢、執行計畫和工作負載模式都相同,寫入執行個體的 CPU 使用率仍然翻倍。

若要對此問題進行疑難排解,您可以檢視 Amazon RDS for MySQL 或 Aurora MySQL 相容版叢集的指標。根據問題,將叢集在升級前後版本的相關指標進行比較。

Aurora MySQL 相容版 5.7 範例指標:

SHOW GLOBAL STATUS LIKE 'Qcache%';

Aurora MySQL 相容版 8.0 範例指標:

`mysql> SHOW STATUS LIKE 'Qcache%';`  
`+-------------------------+--------+`  
`| Variable_name | Value |`  
`+-------------------------+--------+`  
`| Qcache_free_blocks | 36 |`  
`| Qcache_free_memory | 138488 |`  
`| Qcache_hits | 79570 |`  
`| Qcache_inserts | 27087 |`  
`| Qcache_lowmem_prunes | 3114 |`  
`| Qcache_not_cached | 22989 |`  
`| Qcache_queries_in_cache | 415 |`  
`| Qcache_total_blocks | 912 |`  
`+-------------------------+--------+`

在此範例中,Aurora MySQL 相容版 8.0 移除了可從快取提供查詢、以避免完整執行的功能。沒有這項功能後,Aurora MySQL 會完整執行所有查詢,導致工作負載增加一倍。

如果您發現執行個體的 CPU 使用率激增,請檢視以下指標:

  • Queries
  • Com_select
  • Innodb_rows_read

若要解決這些指標的問題,請完成以下任務:

其他疑難排解步驟

您可以將升級前版本的執行計畫與升級後版本的執行計畫進行比較,以更好地排解問題。若要比較參數群組設定,請使用 EXPLAIN FORMAT=JSON 查詢。重要組態 (例如 innodb_buffer_pool_size) 必須在兩個版本中保持一致。如需更多資訊,請參閱 MySQL 網站上的設定 InnoDB 緩衝集區大小EXPLAIN 陳述式

最佳實務是在預備環境中使用 Aurora 複製功能進行升級測試。您可以使用 Sysbench 等工具在預備環境中模擬工作負載。然後,使用 AWS 工具 (例如 AWS Database Insights 和增強型監控) 監控關鍵指標。

AWS 官方已更新 3 個月前