

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

# 管理 RDS for MySQL 的全域狀態歷史記錄
<a name="Appendix.MySQL.CommonDBATasks.GoSH"></a>

**提示**  
若要分析資料庫效能，您也可以使用 Amazon RDS 上的 Performance Insights。如需詳細資訊，請參閱[在 Amazon RDS 上使用績效詳情監控資料庫負載](USER_PerfInsights.md)。

MySQL 會維護許多提供其操作相關資訊的狀態變數。此值可協助您偵測資料庫執行個體上的鎖定或記憶體問題。這些狀態變數的值是從上次啟動資料庫執行個體以來累積的。您可以使用 `FLUSH STATUS` 命令，將大部分狀態變數重設為 0。

為了允許在一段时間內監控這些值，Amazon RDS 提供一組程序，將在一段時間內快照這些狀態變數的值，並將它們以及自從上次快照後的任何變更寫入至資料表。此基礎設施 (稱為全域狀態歷史記錄 (GoSH)) 安裝在所有從版本 5.5.23 開始的 MySQL 資料庫執行個體。GoSH 預設為停用。

若要啟用 GoSH，首先從資料庫參數群組啟用事件排程器，方法是將參數 `event_scheduler` 設為 `ON`。對於執行 MySQL 5.7 的 MySQL 資料庫執行個體，同樣將參數 `show_compatibility_56` 設為 `1`。如需建立和修改資料庫參數群組的詳細資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。如需啟用此參數的副作用相關資訊，請參閱《MySQL 5.7 參考手冊》**中的 [show\$1compatibility\$156](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_show_compatibility_56)。

然後，您可以使用下表中的程序，來啟用和設定 GoSH。首先連接到您的 MySQL 資料庫執行個體，然後發出適當的命令，如下所示。如需詳細資訊，請參閱[連線至您的 MySQL 資料庫執行個體](USER_ConnectToInstance.md)。針對每個程序，執行下列命令並取代 **procedure-name**：

```
CALL procedure-name; 
```

下表列出您可以在上一個命令中用於 **procedure-name** 的所有程序。


| 程序 | 描述 | 
| --- | --- | 
| `mysql.rds_enable_gsh_collector` |  啟用 GoSH 來依據 `rds_set_gsh_collector` 指定的間隔建立預設快照。  | 
| `mysql.rds_set_gsh_collector` |  指定快照之間的間隔 (以分鐘為單位)。預設值為 5。  | 
| `mysql.rds_disable_gsh_collector` |  停用快照。  | 
| `mysql.rds_collect_global_status_history` |  隨需建立快照。  | 
| `mysql.rds_enable_gsh_rotation` |  啟用依 `mysql.rds_global_status_history` 指定的間隔將 `mysql.rds_global_status_history_old` 資料表的內容輪換至 `rds_set_gsh_rotation`。  | 
| `mysql.rds_set_gsh_rotation` |  指定資料表輪換之間的間隔 (以天為單位)。預設值為 7。  | 
| `mysql.rds_disable_gsh_rotation` |  停用資料表輪換。  | 
| `mysql.rds_rotate_global_status_history` |  隨需將 `mysql.rds_global_status_history` 資料表的內容輪換至 `mysql.rds_global_status_history_old`。  | 

當 GoSH 執行中時，您可以查詢寫入它的資料表。例如，若要查詢 Innodb 緩衝集區的命中率，您將發出下列查詢：

```
select a.collection_end, a.collection_start, (( a.variable_Delta-b.variable_delta)/a.variable_delta)*100 as "HitRatio" 
    from mysql.rds_global_status_history as a join mysql.rds_global_status_history as b on a.collection_end = b.collection_end
    where a. variable_name = 'Innodb_buffer_pool_read_requests' and b.variable_name = 'Innodb_buffer_pool_reads'
```