本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
資料庫正在磁碟上建立暫存資料表
您最近的磁碟上暫存資料表用量大幅增加,已達百分比
。資料庫現在每秒建立約數量
份暫存資料表。這可能會影響 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 結構描述的先決條件。 -
考慮涉及排序和分組操作的索引欄。
-
重寫查詢以避免
BLOB
和TEXT
欄。這些欄始終使用磁碟。 -
調校下列資料庫參數:
tmp_table_size
和max_heap_table_size
。這些參數的預設值為 16 MiB。針對記憶體內暫存資料表使用 MEMORY 儲存引擎時,大小上限由
tmp_table_size
或max_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