ORACLE性能診斷―學習statspack筆記(一)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
作者:劉穎博
時間:2004-3-2
mail:[email protected],請指正
轉載請註明出處及作者
說明:oracle8.1.6開始引進statspack,statspack是診斷oracle性能的強有力的工具
安裝前準備
A.首先是系統參數的確認:
job_query_processes:爲了建立自動任務,執行數據收集,該參數要大於0
time_statistics:爲了收集操作系統計時信息等,需要將其設置爲TRUE
B.建議最好是單獨的爲perfstat用戶(即安裝statspack要建的用戶)單獨建立數據表空間和臨時表空間,數據表空間至少要有100M的空閒空間,否則創建statspack對象會失敗,如果打算長期使用statspack,可以考慮建稍大些的數據表空間。
安裝
A.安裝腳本
安裝的腳本所在目錄是$ORACLE_HOME/rdbms/admin,在oracle8.1.6版本安裝腳本是statscre.sql,之後8.1.7版本開始就是spcreate.sql,安裝所需用戶在9i之前的需要internal或者擁有sysdba權限的用戶,9i需要的用戶是sys(9i已經不存在internal用戶了)
執行安裝腳本如下:
SQL> @$ORACLE_HOME/rdbms/admin/spcreate
B.在安裝過程中,需要填寫perfstat用戶的密碼,並且選擇perfstat用戶的數據表空間和臨時表空間,安裝完成之後,察看相應的.lis文件檢查安裝是否正確無誤,有問題可以通過spdrop.sql完成statspack的卸載,重新運行spcreate.sql完成statspack的安裝。
測試
最簡單的statspack報告生成,運行兩次statspack.snap,然後運行spreport.sql生成一個基於兩個時間點的報告。如果是8.1.7.3之前版本的Oracle,需要修改spcpkg.sql,要將substr修改爲substrb,如下位置:
select l_snap_id
, p_dbid
, p_instance_number
, substr(sql_text,1,31) à substrb(sql_text,1,31)
建立簡單的statspack報告過程如下:
SQL> execute statspack.snap
PL/SQL procedure successfully completed.
SQL> execute statspack.snap
PL/SQL procedure successfully completed.
SQL> @$ORACLE_HOME/rdbms/admin/spreport
Spreport的執行過程中會列出需要選擇的快照,你需要填寫該報告描述的開始和結束的快照序號,並填寫報告的文件名,當然可以不填,使用默認的報告文件名,默認的會生成在目錄$ORACLE_HOME/rdbms/admin中
這樣就可以驗證statspack已經正確的安裝完成了
自動收集statspack快照
正常在真正的環境下,我們是需要連續的採樣一段時間,這樣生成的statspack才能更好的反映系統的現狀,我們是可以通過spauto.sql來自動收集數據的。
主要可能會設計到修改如下部分的內容
variable jobno number;
variable instno number;
begin
select instance_number into :instno from v$instance;
dbms_job.submit(:jobno, 'statspack.snap;', trunc(sysdate+1/24,'HH'), 'trunc(SYSDATE+1/24,''HH'')', TRUE, :instno);
commit;
end;
/
主要是修改1/24這個值,目前是一個小時自動收集一次數據,如果要改動爲半個小時收集一次數據就修改爲1/48,同理,進行或大或小的修改。
執行後,可以在spauto.lis文件中看到當前自動收集數據的job號等信息。當想要生成statspack報告的時候,只要選擇任何兩個不跨越停機時間的快照序號就可以了。注意,statspack是不能跨越停機的。
(待續)
……………………………………………………………………………………
感謝 eygle 和他的《statspack使用指南》一文