標籤:style color 使用 檔案 資料 os
statspack 是一個DBA經常用的調優工具, 它的主要作用是, 針對資料庫的不同時刻做快照, 然後來比對快照之前的差異和瓶頸, 快照可以是手動的也可以是自動的, 從 oracle 10g開始, oracle推出了新工具-自動負載資訊庫( automatic workload repository, AWR), AWR 是用來替換statspack的, 實現的原理與statspack基本相同, 只是功能更強大, 在 11g中繼續加強.
Statspack 概述 及安裝
在資料庫中 Statspack 初始並未安裝.
Statspack 指令檔位於 $ORACLE_HOME/rdbms/admin目錄下, 在使用授權上, Statspack 的重點是免費, 而 AWR工具涉及的很多特性都是需要進行收費的.
首先設定兩個系統參數,
job_queue_processes: 為了能夠建立自動任務, 執行資料收集, 該參數需要大於 0, 你可以在初始化參數檔案中修改該參數. alter system set job_queue_process = 6 scope=both;
timed_statistics: 設定該參數為true時, oracle將即時收集作業系統的計時資訊, 這些資訊可被用來顯示時間等統計資訊, 最佳化資料庫和SQL語句. (建議設定成 true) alter system set timed_statistics = true scope=both;
安裝時需要使用 sys使用者以 sysdba身份登入到資料庫安裝; 安裝需要再資料庫服務本地進行.
1) 由於 statspack 需要一定的儲存空間, 最好建立獨立的資料表空間
( create tablespace perfstat datafile ‘/u01/oracle/ora10g/oradata/leon/perfstat.dbf’ size 500M extent management local;(最小也要100M)
2) 找到安裝指令碼 在 rdbms/admin目錄下
sql提示符下: 輸入 @spcreate ( 如果不在目前的目錄下, 需要輸入指令碼路徑 ), 期間會提示你輸入預設資料表空間和暫存資料表空間, 輸入perfstat 和 資料庫的暫存資料表空間即可: 另外還需要輸入passwork, 就輸入跟使用者名稱一樣吧, 因為向後也可以修改, 這個好記.
可以查看 host ls *.lis 查看安裝的狀態指令碼, 看是否有錯誤, 直接 grep ORA- *.lis, grep err *.lis 就可以了, 如果在這一步出現錯誤, 那麼我們就要先刪除已經建立的內容, 然後確認錯誤, 再重新建立:
@spdrop.sql
測試 Statspack
sql提示符下: execute statspack.snap 過一會再輸入一次 execute statspack.snap, 然後輸入 @spreport.sql
規劃自動任務
spauto.sql (注意這些指令碼都是rdbms/admin 這個目錄下), 首先來看看這個指令碼內容:
dbms_job.submit(:jobno, ‘statspack.snap;’, trunc(sysdate+1/24,’HH’), ‘TRUNC(SYSDATE+1/24,’HH’),TRUE, :instno);
可以修改 spauto.sql 來更改執行的時間間隔, 然後執行 @spauto, 這樣就建立了一個每間隔1小時執行一次資料收集計劃, 可以查看 spauto.lis 來獲得輸出資訊: 關於採樣間隔, 通常建議1小時間隔, 對於特殊需要的環境, 可以設定更短的, 例如半小時, 但是不建議使用更短. 對於即時問題診斷, 需要採樣分析, 那麼可以根據具體需要手動執行.
移除定時任務:
1) 首先找到想要移除的任務: select job, log_user, priv_user, last_date, next_date, interval from user_jobs;
2) execute dbms_job.remove(‘22’) -- 22為 job
當完成了一個採樣報告, 就應該移除這個job任務, 在生產環境中, 遺漏一個無人照顧的job是非常危險的.
產生分析報告
@spreport, 然後需要輸入一個檔案名稱, 例如 rep1205.txt
刪除曆史資料:
select max(snap_id) from stats$snapshot;
delete from stats$snapshot where snap_id <= 166;
可以更改 snap_id 的範圍以保留需要的資料.
另外還提供一個 truncate 採樣的指令碼, sqtrunc.sql (如果採樣了當量的資料, 直接delete是非常緩慢的, 考慮直接使用這個指令碼)
statspack 有兩種收集類型選項, 層級(level)和門限(threshold), 其中層級用於控制收集資料的類型,
level0, 包含一些統計資料, level5較之前層級增加了sql語句資訊, level10增加更多統計資訊)
可以通過 statspack 包修改預設層級設定:
sql 提示符下: execute statspack.snap(i_snap_level=>0, i_modify_parameter=>’true); 通過這樣設定, 以後收集層級都將是 0, 如果只是想本次改變收集層級, 可以忽略 i_modify_parameter參數, execute statspack.snap(i_snap_level=>10);
Statspack 報告各部分說明
1 部分, 資料庫概要
2 部分, 負載概要 這部分資訊來自 v$sysstat
3 部分, 執行個體效率百分比
4 部分, 資料庫回應時間
5 部分, 主機系統資訊
最重要的九大效能檢視
1. 和 session 相關的主要視圖 v$session->v$session_wait
2. 和 session 級統計資訊相關的視圖 v$sesstat->v$sysstat
3. 和 等待事件相關的主要視圖 v$session_event->v$system_event
4. 其他, v$process, v$latch_children, v$lock, SQL相關(v$sql, [email protected]), Buffer資訊(v$bh)