【文章內(nèi)容簡介】
2. timed_statistics 收集操作系統(tǒng)的計時信息,這些信息可被用來顯示時間等統(tǒng)計信息、優(yōu)化數(shù)據(jù)庫和 SQL 語句。要防止因從操作系統(tǒng)請求時間而引起的開銷,請將該值設置為False。 使用statspack 收集統(tǒng)計信息時建議將該值設置為 TRUE,否則收集的統(tǒng)計信息大約只能起到10%的作用,將timed_statistics 設置為True 所帶來的性能影響與好處相比是微不足道的。 該參數(shù)使收集的時間信息存儲在在V$SESSTATS 和V$SYSSTATS 等動態(tài)性能視圖中。 timed_statistics 參數(shù)也可以在實例級進行更改 SQL alter system set timed_statistics = true。 System altered 如果你擔心一直啟用timed_statistics 對于性能的影響,你可以在使用statspack 之前在system 更改,采樣過后把該參數(shù)動態(tài)修改成false。 167。 步驟二: 需要單獨為statspack創(chuàng)建一個存儲數(shù)據(jù)的表空間,如果采樣間隔較短,周期較長,打算長期使用,那么可能需要一個大一點的表空間,如果每個半個小時采樣一次,連續(xù)采樣一周,數(shù)據(jù)量是很大的。下面的例子中創(chuàng)建了一個500M 的測試表空間。 注意: 這里創(chuàng)建的表空間不能太小,如果太小的話創(chuàng)建對象會失敗,建議至少建立100M 表空間。 SQL create tablespace perfstat 2 datafile 39。/oracle/oradata/oradata/res/39。 3 size 500M。 Tablespace created。 167。 步驟三: 在 sqlplus 中用internal 身份登陸,或者擁有SYSDBA(connect / as sysdba)權限的用戶登陸。 注: 在Oracle9i 中,不存在internal 用戶,可以使用sys 用戶以sysdba 身份連接。 先轉(zhuǎn)到$ORACLE_HOME/RDBMS/ADMIN 目錄,檢查安裝腳本是否存在,同時我們執(zhí)行腳本也可以方便些。 $ cd $ORACLE_HOME/rdbms/admin $ ls l sp*.sql rwrr 1 oracle other 1774 Feb 18 2000 rwrr 1 oracle other 62545 Jun 15 2000 rwrr 1 oracle other 877 Feb 18 2000 rwrr 1 oracle other 31193 Jun 15 2000 rwrr 1 oracle other 6414 Jun 15 2000 rwrr 1 oracle other 758 Jun 15 2000 rwrr 1 oracle other 3615 Jun 15 2000 rwrr 1 oracle other 1274 Jun 15 2000 rwrr 1 oracle other 6760 Jun 15 2000 rwrr 1 oracle other 71034 Jul 12 2000 rwrr 1 oracle other 2191 Jun 15 2000 rwrr 1 oracle other 30133 Jun 15 2000 $ 接下來我們就可以開始安裝Statspack 了。 。 。 這期間會提示你輸入缺省表空間和臨時表空間的位置,輸入我們?yōu)?perfstat 用戶創(chuàng)建的表空間和你的臨時表空間。安裝腳本會自動創(chuàng)建perfstat 用戶。 $ sqlplus SQL*Plus: Release Production on Sat Jul 26 16:27:31 2003 (c) Copyright 2000 Oracle Corporation. All rights reserved. Enter username: internal Connected to: Oracle8i Enterprise Edition Release Production With the Partitioning option JServer Release Production SQL SQL @spcreate ... Installing Required Packages Package created. Grant succeeded. View created. Package body created. Package created. Synonym dropped. Synonym created. …… Specify PERFSTAT user39。s default tablespace Enter value for default_tablespace: perfstat Using perfstat for the default tablespace User altered. User altered. Specify PERFSTAT user39。s temporary tablespace Enter value for temporary_tablespace: temp Using temp for the temporary tablespace User altered. NOTE: SPCUSR plete. Please check for any errors. …… 如果安裝成功,你可以接著看到如下的輸出信息: …. Creating Package STATSPACK... Package created. No errors. Creating Package Body STATSPACK... Package body created. No errors. NOTE: SPCPKG plete. Please check for any errors. 文件查看安裝時的錯誤信息。 167。 步驟四: 如果安裝過程中出現(xiàn)錯誤, 腳本來刪除這些安裝腳本建立的對象。 SQL @spdrop Dropping old versions (if any) Synonym dropped. Sequence dropped. Synonym dropped. Table dropped. Synonym dropped. View dropped. …… NOTE: SPDUSR plete. Please check for any errors. (以上的安裝過程描述是在 HP + Oracle 平臺上得到的) 測試statspack 可以產(chǎn)生系統(tǒng)快照,運行兩次, 就可以生成一個基于兩個時間點的報告。 如果一切正常,說明安裝成功。 SQLexecute PL/SQL procedure successfully pleted. SQLexecute PL/SQL procedure successfully pleted. SQL@ 可是有可能你會得到以下錯誤: SQL exec 。 BEGIN 。 END。 * ERROR at line 1: ORA01401: inserted value too large for column ORA06512: at , line 978 ORA06512: at , line 1612 ORA06512: at , line 71 ORA06512: at line 1 這是Oracle 的一個Bug,Bug 號1940915。 該Bug 后修正。 這個問題只會出現(xiàn)在多位的字符集, 腳本,$ORACLE_HOME/rdbms/admin/,將substr 修改為 substrb,然后重新運行該腳本。 該腳本錯誤部分: select l_snap_id , p_dbid , p_instance_number , substr(sql_text,1,31) ........... substr 會將多位的字符, 則會當作多個byte。在收集數(shù)據(jù)時, statpack 會將 top10 的 sql 前 31 個字節(jié) 存入數(shù)據(jù)表中,若在SQL 的前31 個字有中文,就會出現(xiàn)此錯誤。 注意:運行 也需要以 internal 用戶登錄 sqlplus 生成statspack報告 可以生成分析報告: 時,系統(tǒng)首先會查詢快照列表,然后要求你選擇生成報告的開始快照ID(begin_snap)和結束快照ID(end_snap),生成一個報告. 為了生成一個report,我們至少需要兩次采樣: SQL @spreport DB Id DB Name Inst Num Instance 2749170756 RES 1 res Completed Snapshots Snap Snap Instance DB Name Id Snap Started Level Comment res RES 1 26 Jul 2003 16:36 5 2 26 Jul 2003 16:37 5 3 26 Jul 2003 17:03 5 Specify the Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Enter value for begin_snap:2 Begin Snapshot Id specified: 2 Enter value for end_snap: 3 End Snapshot Id specified: 3 Specify the Report Name ~~~~~~~~~~~~~~~~~~~~~~~ The default report file name is sp_2_3. To use this name, press to continue, otherwise enter an alternative. Enter value for report_name: …… End of Report 在運行 生成 statspack 報告的過程中,會有三個地方提示用戶輸入: 開始快照ID; 結束快照ID; 輸出報告文件的文件名,缺省的文件名是sp__ 上面輸入的開始快照ID是2,開始快照ID是3, 成功運行一次 就會產(chǎn)生一個 snapshot ,在生成 statspack 報告的時候就可以看到這個 snap id 和 snap 運行的時間。運行 ,就是上面所說的采樣,statspack 報告是分析兩個采樣點之間各種情況。 刪除歷史快照數(shù)據(jù) 前面講過,成功運行一次 就會產(chǎn)生一個 snapshot ,這個 snapshot 的基本信息是存放在 $snapshot 表中的,生成 statspack報告時會查詢該表的數(shù)據(jù),供用戶選擇準備分析的 snapshot 。如果運行 次數(shù)多了以后,該表的數(shù)據(jù)也會增加,歷史數(shù)據(jù)會影響正常運行的效果,因此需要定時清理一下歷史快照數(shù)據(jù)。 刪除stats$snapshot 數(shù)據(jù)表中的相應數(shù)據(jù),其他表中的數(shù)據(jù)會相應的級連刪除: SQL select max(snap_id) from stats$snapshot。 MAX(SNAP_ID) 166 SQL delete from stats$snapshot where snap_id = 166。 143 rows deleted 你可以更改snap_id 的范圍以保留你需要的數(shù)據(jù)。 在以上刪除過程中,你可以看到所有相關的表都被鎖定。 SQL select , , from v$locked_object a,dba_objects b where = / OBJECT_ID ORACLE_USERNAME OBJECT_NAME 156 PERFSTAT SNAP$ 39700 PERFSTAT STATS$LIBRARYCACHE 39706 PERFSTAT STATS$ROLLSTAT 39712 PERFSTAT STATS$SGA 39754 PERFSTAT STATS$PARAMETER 39745 PERFSTAT STATS$SQL_STATISTICS 39739 PERFSTAT STATS$SQL_SUMMARY 39736 PERFSTAT STATS$ENQUEUESTAT 39733 PERFSTAT STATS$WAITSTA