

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

# Aurora MySQL 調校的基本概念
<a name="AuroraMySQL.Managing.Tuning.concepts"></a>

調校 Aurora MySQL 資料庫之前，請務必先了解什麼是等待事件和執行緒狀態及其發生原因。使用 InnoDB 儲存引擎時，亦請檢閱 Aurora MySQL 的基本記憶體和磁碟架構。如需實用的架構圖，請參閱 [MySQL 參考手冊](https://dev.mysql.com/doc/refman/8.0/en/innodb-architecture.html)。

**Topics**
+ [Aurora MySQL 等待事件](#AuroraMySQL.Managing.Tuning.concepts.waits)
+ [Aurora MySQL 執行緒狀態](#AuroraMySQL.Managing.Tuning.concepts.thread-states)
+ [Aurora MySQL 記憶體](#AuroraMySQL.Managing.Tuning.concepts.memory)
+ [Aurora MySQL 處理](#AuroraMySQL.Managing.Tuning.concepts.processes)

## Aurora MySQL 等待事件
<a name="AuroraMySQL.Managing.Tuning.concepts.waits"></a>

「等待事件」**表示工作階段正在等待的資源。例如，等待事件 `io/socket/sql/client_connection` 表示執行緒正在處理新連線。工作階段等待的典型資源包括：
+ 透過單一執行緒存取緩衝區，例如，當工作階段嘗試修改緩衝區時
+ 另一個工作階段目前鎖定的資料列
+ 資料檔讀取
+ 日誌檔寫入

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

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

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

## Aurora MySQL 執行緒狀態
<a name="AuroraMySQL.Managing.Tuning.concepts.thread-states"></a>

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

您可以使用執行緒狀態，以類似於使用等待事件的方式調校 Aurora MySQL。例如，頻繁發生 `sending data` 通常表示查詢未使用索引。如需執行緒狀態的詳細資訊，請參閱《MySQL 參考手冊》**中的[一般執行緒狀態](https://dev.mysql.com/doc/refman/5.7/en/general-thread-states.html)。

使用績效詳情時，下列其中一個條件為 true：
+ 效能結構描述已開啟 – Aurora MySQL 顯示等待事件，而不是執行緒狀態。
+ 效能結構描述未開啟 – Aurora MySQL 顯示執行緒狀態。

建議您設定效能結構描述進行自動管理。效能結構描述提供其他洞察和更好的工具，以調查潛在的效能問題。如需更多詳細資訊，請參閱 [Aurora MySQL 上 Performance Insights 的效能結構描述概觀](USER_PerfInsights.EnableMySQL.md)。

## Aurora MySQL 記憶體
<a name="AuroraMySQL.Managing.Tuning.concepts.memory"></a>

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

**Topics**
+ [緩衝集區](#AuroraMySQL.Managing.Tuning.concepts.memory.buffer-pool)

### 緩衝集區
<a name="AuroraMySQL.Managing.Tuning.concepts.memory.buffer-pool"></a>

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

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

如需詳細資訊，請參閱《*MySQL 參考手冊*》中的[緩衝集區](https://dev.mysql.com/doc/refman/8.0/en/innodb-buffer-pool.html)。

## Aurora MySQL 處理
<a name="AuroraMySQL.Managing.Tuning.concepts.processes"></a>

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

**Topics**
+ [MySQL 伺服器 (mysqld)](#AuroraMySQL.Managing.Tuning.concepts.processes.mysqld)
+ [執行緒](#AuroraMySQL.Managing.Tuning.concepts.processes.threads)
+ [執行緒集區](#AuroraMySQL.Managing.Tuning.concepts.processes.pool)

### MySQL 伺服器 (mysqld)
<a name="AuroraMySQL.Managing.Tuning.concepts.processes.mysqld"></a>

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

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

### 執行緒
<a name="AuroraMySQL.Managing.Tuning.concepts.processes.threads"></a>

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

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

### 執行緒集區
<a name="AuroraMySQL.Managing.Tuning.concepts.processes.pool"></a>

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