Aurora MySQL 調校的基本概念 - Amazon Aurora

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

Aurora MySQL 調校的基本概念

調校 Aurora MySQL 資料庫之前,請務必先了解什麼是等待事件和執行緒狀態及其發生原因。使用 InnoDB 儲存引擎時,亦請檢閱 Aurora MySQL 的基本記憶體和磁碟架構。如需實用的架構圖,請參閱 MySQL 參考手冊

Aurora MySQL 等待事件

「等待事件」表示工作階段正在等待的資源。例如,等待事件 io/socket/sql/client_connection 表示執行緒正在處理新連線。工作階段等待的典型資源包括:

  • 透過單一執行緒存取緩衝區,例如,當工作階段嘗試修改緩衝區時

  • 另一個工作階段目前鎖定的資料列

  • 資料檔讀取

  • 日誌檔寫入

例如,為了滿足查詢,工作階段可能執行完整的資料表掃描。如果資料不在記憶體中,工作階段會等待磁碟輸入/輸出完成。將緩衝區讀入記憶體後,工作階段可能需要等待,因為其他工作階段正在存取這些緩衝區。資料庫使用預先定義的等待事件來記錄等待。這些事件分組為多個類別。

等待事件本身不表示有效能問題。例如,如果請求的資料不在記憶體中,則需要從磁碟讀取資料。如果一個工作階段鎖定資料列來更新,則另一個工作階段要等待此資料列解除鎖定才能更新。遞交需要等待寫入日誌檔完成。等待是資料庫正常運作所不可或缺。

大量等待事件通常表示有效能問題。在這種情況下,您可以使用等待事件資料來判斷工作階段將時間花在何處。例如,如果報告通常執行幾分鐘,但現在執行數小時,您可以識別佔總等待時間最多的等待事件。如果您可以查出最常等待事件的原因,通常就能做些改變來改善效能。例如,如果工作階段等待的資料列被另一個工作階段鎖定,您可以結束該鎖定工作階段。

Aurora MySQL 執行緒狀態

「一般執行緒狀態」是與一般查詢處理相關聯的 State 值。例如,執行緒狀態 sending data 表示執行緒正在讀取和篩選查詢的資料列,以決定正確的結果集。

您可以使用執行緒狀態,以類似於使用等待事件的方式調校 Aurora MySQL。例如,頻繁發生 sending data 通常表示查詢未使用索引。如需執行緒狀態的詳細資訊,請參閱《MySQL 參考手冊》中的一般執行緒狀態

使用績效詳情時,下列其中一個條件為 true:

  • 效能結構描述已開啟 – Aurora MySQL 顯示等待事件,而不是執行緒狀態。

  • 效能結構描述未開啟 – Aurora MySQL 顯示執行緒狀態。

建議您設定效能結構描述進行自動管理。效能結構描述提供其他洞察和更好的工具,以調查潛在的效能問題。如需更多詳細資訊,請參閱 Aurora Performance Insights 的效能結構描述概觀我的 SQL 或我的 SQL

Aurora MySQL 記憶體

在 Aurora MySQL 中,最重要的記憶體區域是緩衝集區和日誌緩衝區。

緩衝集區

「緩衝集區」是 Aurora MySQL 快取資料表和檢索資料的共用記憶體區域。查詢可以直接從記憶體存取經常使用的資料,而無需從磁碟讀取。

緩衝集區會建構為頁面的鏈結清單。一個「頁面」可以保留多個資料列。Aurora MySQL 會使用最近最少使用 (LRU) 演算法,使頁面過時而移出集區。

如需詳細資訊,請參閱《MySQL 參考手冊》中的緩衝集區

Aurora MySQL 處理

Aurora MySQL 使用的程序模型與 Aurora PostgreSQL 非常不同。

MySQL 伺服器 (mysqld)

MySQL 伺服器是名為 mysqld 的單一作業系統程序。MySQL 伺服器不會產生額外的程序。因此,Aurora MySQL 資料庫會使用 mysqld 來執行其大部分工作。

當 MySQL 伺服器啟動時,它會接聽來自 MySQL 用戶端的網路連線。當用戶端連接到資料庫時,mysqld 會開啟一個執行緒。

執行緒

連線管理員執行緒會將每個用戶端連線與專用執行緒建立關聯。此執行緒會管理身分驗證、執行陳述式,並將結果傳回至用戶端。連線管理員會在必要時建立新的執行緒。

「執行緒快取」是一組可用的執行緒。當連線結束時,如果快取未滿,MySQL 會將執行緒傳回至執行緒快取。thread_cache_size 系統變數會決定執行緒快取大小。

執行緒集區

「執行緒集區」包含許多執行緒群組。每個群組都會管理一組用戶端連線。當用戶端連線到資料庫時,執行緒集區會以循環方式將連線指派給執行緒群組。執行緒集區會將連線和執行緒隔開。連線與執行從這些連線收到之陳述式的執行緒之間沒有固定關係。