資料庫正在磁碟上建立暫存資料表 - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

資料庫正在磁碟上建立暫存資料表

您最近的磁碟上暫存資料表用量大幅增加,已達百分比。資料庫現在每秒建立約數量份暫存資料表。這可能會影響 db-instance 的效能並增加磁碟操作。

支援的引擎版本

所有版本的 Aurora MySQL 都支援此洞察資訊。

Context

有時候,MySQL 伺服器需要在處理查詢時建立內部暫存資料表。Aurora MySQL 可以在記憶體中保存內部暫存資料表。可以由 Temptable 或 MEMORY 儲存引擎處理,或由 InnoDB 儲存在磁碟上。如需詳細資訊,請參閱《MySQL 參考手冊》中的 MySQL 中的內部暫存資料表使用

造成此問題的可能原因

磁碟上暫存資料表數量增加,表示有使用複雜的查詢。若所設記憶體不足以將暫存資料表儲存在記憶體, Aurora MySQL 會在磁碟上建立資料表。這可能會影響效能並增加磁碟操作。

動作

根據洞察的原因,我們會建議不同的動作。

  • 針對 Aurora MySQL 第 3 版,建議您使用 TempTable 儲存引擎。

  • 只選取必要欄,以最佳化查詢,傳回較少的資料。

    若您在啟用並計時所有 statement 工具的情況下開啟效能結構描述,您可以查詢 SYS.statements_with_temp_tables,以擷取使用暫存資料表的查詢清單。如需詳細資訊,請參閱 MySQL 文件中的使用 sys 結構描述的先決條件

  • 考慮涉及排序和分組操作的索引欄。

  • 重寫查詢以避免 BLOBTEXT 欄。這些欄始終使用磁碟。

  • 調校下列資料庫參數:tmp_table_sizemax_heap_table_size

    這些參數的預設值為 16 MiB。針對記憶體內暫存資料表使用 MEMORY 儲存引擎時,大小上限由 tmp_table_sizemax_heap_table_size 值定義,以較小值為準。當達到此大小上限時,MySQL 會自動將記憶體內的內部暫存資料表轉換為 InnoDB 磁碟上內部暫存資料表。如需詳細資訊,請參閱在 Amazon RDS for MySQL 和 Amazon Aurora MySQL 上使用 TempTable 儲存引擎

    注意

    使用 CREATE TABLE 明確建立 MEMORY 資料表時,只有 max_heap_table_size 變數會決定資料表的大小。也沒有轉換為磁碟上的格式。

相關指標

下列績效詳情指標與此洞察相關:

  • Created_tmp_disk_tables

  • Created_tmp_tables

如需詳細資訊,請參閱 MySQL 文件中的 RCreated_tmp_disk_tables