

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

# Oracle Statspack
<a name="Appendix.Oracle.Options.Statspack"></a>

Oracle Statspack 選項會安裝和啟用 Oracle Statspack 效能統計資料功能。Oracle Statspack 是 SQL、PL/SQL 和 SQL\$1Plus 指令碼的集合，這些指令碼會收集、存放並顯示效能資料。如需有關使用 Oracle Statspack 的資訊，請參閱 Oracle 文件中的 [Oracle Statspack](http://docs.oracle.com/cd/E13160_01/wli/docs10gr3/dbtuning/statsApdx.html)。

**注意**  
Oracle Statspack 不再由 Oracle 所支援，已替換為更進階的「自動工作負載資料儲存器 (AWR)」。只有已購買診斷套件的 Oracle Enterprise Edition 客戶才能使用 AWR。您可以將 Oracle Statspack 與 Amazon RDS 上的任何 Oracle 資料庫引擎搭配使用。您無法在 Amazon RDS 讀取複本上執行 Oracle Statspack。

## 設定 Oracle Statspack
<a name="Appendix.Oracle.Options.Statspack.setting-up"></a>

若要執行 Statspack 指令碼，您必須新增 Statspack 選項。

**設定 Oracle Statspack**

1. 在 SQL 用戶端中，使用管理帳戶登入 Oracle 資料庫。

1. 根據是否已安裝 Statspack，執行下列其中一個動作：
   + 如果已安裝 Statspack，且 `PERFSTAT` 帳戶與 Statspack 相關聯，請跳至步驟 4。
   + 如果沒有安裝 Statspack，且 `PERFSTAT` 帳戶存在，請按以下方式捨棄帳戶：

     ```
     DROP USER PERFSTAT CASCADE;
     ```

     否則，嘗試新增 Statspack 選項會產生錯誤和 `RDS-Event-0058`。

1. 將 Statspack 選項新增至選項群組。請參閱[將選項新增至選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。

   Amazon RDS 會自動在資料庫執行個體上安裝 Statspack 指令碼，然後設定 `PERFSTAT` 帳戶。

1. 使用以下 SQL 陳述式重設密碼，用新密碼替換 *pwd*：

   ```
   ALTER USER PERFSTAT IDENTIFIED BY pwd ACCOUNT UNLOCK;
   ```

   您可以使用 `PERFSTAT` 使用者帳戶登入並執行 Statspack 指令碼。

1. 請使用下列陳述式將 `CREATE JOB` 權限授予 `PERFSTAT` 帳戶：

   ```
   GRANT CREATE JOB TO PERFSTAT;
   ```

1. 確定已填入 `PERFSTAT.STATS$IDLE_EVENT` 表格中的閒置等待事件。

   由於 Oracle 錯誤 28523746，`PERFSTAT.STATS$IDLE_EVENT` 中的閒置等待事件可能不會填入。若要確保所有閒置事件都可用，請執行下列陳述式：

   ```
   INSERT INTO PERFSTAT.STATS$IDLE_EVENT (EVENT)
   SELECT NAME FROM V$EVENT_NAME WHERE WAIT_CLASS='Idle'
   MINUS
   SELECT EVENT FROM PERFSTAT.STATS$IDLE_EVENT;
   COMMIT;
   ```

## 產生 Statspack 報告
<a name="Appendix.Oracle.Options.Statspack.generating-reports"></a>

Statspack 報告會比較兩個快照。

**產生 Statspack 報告**

1. 在 SQL 用戶端中，使用 `PERFSTAT` 帳戶登入 Oracle 資料庫。

1. 使用下列其中一種技巧建立快照：
   + 手動建立 Statspack 快照。
   + 建立在指定時間間隔之後建立 Statspack 快照的任務。例如，下列工作每小時會建立一個 Statspack 快照：

     ```
     VARIABLE jn NUMBER;
     exec dbms_job.submit(:jn, 'statspack.snap;',SYSDATE,'TRUNC(SYSDATE+1/24,''HH24'')');
     COMMIT;
     ```

1. 使用下列查詢檢視快照：

   ```
   SELECT SNAP_ID, SNAP_TIME FROM STATS$SNAPSHOT ORDER BY 1;
   ```

1. 執行 Amazon RDS 程序 `rdsadmin.rds_run_spreport`，以快照 ID 取代 *begin\$1snap* 和 *end\$1snap* 快照：

   ```
   exec rdsadmin.rds_run_spreport(begin_snap,end_snap);
   ```

   例如，下列命令會根據 Statspack 快照 1 和 2 之間的間隔建立報告：

   ```
   exec rdsadmin.rds_run_spreport(1,2);
   ```

   Statspack 報告的檔案名稱包含兩個快照的數目。例如，使用 Statspack 快照 1 和 2 所建立的報告檔案會命名為 `ORCL_spreport_1_2.lst`。

1. 監控輸出是否有錯誤。

   Oracle Statspack 會在執行報表之前執行檢查。因此，您也可能會在命令輸出中看到錯誤訊息。例如，您可能會嘗試根據無效範圍產生報告，其中 Statspack 快照集的開始值大於結束值。在這種情況下，輸出會顯示錯誤訊息，但資料庫引擎不會產生錯誤檔案。

   ```
   exec rdsadmin.rds_run_spreport(2,1);
   *
   ERROR at line 1:
   ORA-20000: Invalid snapshot IDs. Find valid ones in perfstat.stats$snapshot.
   ```

   如果您使用 Statspack 快照的無效數字，則輸出會顯示錯誤。例如，如果您嘗試產生快照 1 和 50 的報告，但快照 50 不存在，則輸出會顯示錯誤。

   ```
   exec rdsadmin.rds_run_spreport(1,50);
   *
   ERROR at line 1:
   ORA-20000: Could not find both snapshot IDs
   ```

1. (選用) 

   若要擷取報表，請呼叫追蹤檔程序，如 [使用 Oracle 追蹤檔案](USER_LogAccess.Concepts.Oracle.md#USER_LogAccess.Concepts.Oracle.WorkingWithTracefiles) 中所述。

   或者，從 RDS 主控台下載 Statspack 報告。移至資料庫執行個體詳細資訊的**日誌**區段，然後選擇**下載**。下列範例會顯示 `trace/ORCL_spreport_1_2.lst`  
![\[在 RDS 主控台中顯示 Oracle 日誌檔案的清單。系統會圈出下列追蹤檔案：trace/ORCL_spreport_1_2.lst。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/statspack1.png)

   如果在產生報告時發生錯誤，則資料庫引擎使用相同的命名慣例做為報告，但擁有 `.err` 的副檔名。例如，若使用 Statspack 快照 1 和 7 建立報告時發生錯誤，則報告檔案會命名為 `ORCL_spreport_1_7.err`。您可以使用與標準快照報告相同的技巧來下載錯誤報告。

## 移除 Statspack 快照
<a name="Appendix.Oracle.Options.Statspack.removing-files"></a>

若要移除 Oracle Statspack 快照的範圍，請使用下列命令：

```
exec statspack.purge(begin snap, end snap); 
```