熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

ZT-Statspack安裝配置使用說明二

2022-06-13   來源: Oracle 

  spcusrlis:SPCUSR complete Please check spcusrlis for any errors

  spdtablis:SPDTAB complete Please check spdtablis for any errors

  spdusrlis:SPDUSR complete Please check spdusrlis for any errors

   

  在這一步如果出現錯誤那麼你可以運行spdropsql腳本來刪除這些對象然後重新運行spcreatesql來創建這些對象運行 SQL*Plus 以具有SYSDBA 權限的用戶登陸

   

  SQL> @spdropsql

  

  

  

  同義詞已丟棄off;

   

  視圖已丟掉

   

  同義詞已丟棄

   

  視圖已丟掉

   

  同義詞已丟棄

   

  用戶已丟棄

   

  NOTE:

   

  SPDUSR complete Please check spdusrlis for any errors

   

  SQL>

   

  三 測試安裝好的Statspack

   

  運行statspacksnap可以產生系統快照運行兩次然後執行spreportsql就可以生成一個基於兩個時間點的報告

   

  如果一切正常說明安裝成功

   

  SQL>execute statspacksnap

  PL/SQL procedure successfully completed

  SQL>execute statspacksnap

  PL/SQL procedure successfully completed

  SQL>@spreportsql

  …

   

  可是有可能你會得到以下錯誤

   

  SQL> exec statspacksnap;

  BEGIN statspacksnap; END;

   

  *

  ERROR at line :

  ORA: inserted value too large for column

  ORA: at PERFSTATSTATSPACK line

  ORA: at PERFSTATSTATSPACK line

  ORA: at PERFSTATSTATSPACK line

  ORA: at line

   

  這是Oracle的一個BugBug號

   

  該Bug自後修正

   

  這個問題只會出現在多位的字符集需要修改spcpkgsql腳本$ORACLE_HOME/rdbms/admin/spcpkgsqlsubstr 修改為 substrb然後重新運行該腳本

   

  該腳本錯誤部分

   

  select l_snap_id

   p_dbid

   p_instance_number

   substr(sql_text)

  ...........

   

  substr 會將多位的字符 當作一個bytesubstrb 則會當作多個byte在收集數據時 statpack 會將 top 的 sql 前 個字節 存入數據表中若在SQL的前 個字有中文就會出現此錯誤

   

  四 規劃自動任務

   

  Statspack正確安裝以後我們就可以設置定時任務開始收集數據了可以使用spatuosql來定義自動任務

   

  先來看看spautosql的關鍵內容

   

  dbms_jobsubmit(:jobno statspacksnap; trunc(sysdate+/HH) trunc(SYSDATE+/HH) TRUE :instno);

   

  這個job任務定義了收集數據的時間間隔

   

  一天有個小時分鐘那麼

   

  / HH 每小時一次

   

  / MI 每半小時一次

   

  / MI 每十分鐘一次

   

  / MI 每五分鐘一次

   

  我們可以修改spautosql來更改執行間隔

   

  dbms_jobsubmit(:jobno statspacksnap; trunc(sysdate+/MI) trunc(SYSDATE+/HH) TRUE :instno);

   

  然後我們執行spauto這樣我們就建立了一個每分鐘執行一次的數據收集計劃你可以查看spautolis來獲得輸出信息

   

  SQL>

  SQL>

  SQL> Schedule a snapshot to be run on this instance every hour on the hour

  SQL>

  SQL> variable jobno number;

  SQL> variable instno number;

  SQL> begin

   select instance_number into :instno from v$instance;

   dbms_jobsubmit(:jobno statspacksnap; trunc(sysdate+/MI) trunc(SYSDATE+/MI) TRUE :instno);

   commit;

   end;

   /

   

  PL/SQL 過程已成功完成

   

  SQL>

  Job number for automated statistics collection for this instance

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  Note that this job number is needed when modifying or removing

  the job:

  JOBNO

  

  

   

  Job queue process

  ~~~~~~~~~~~~~~~~~

  Below is the current setting of the job_queue_processes initora

  parameter the value for this parameter must be greater

  than to use automatic statistics gathering:

  SQL> show parameter job_queue_processes

   

  NAME TYPE VALUE

  

  job_queue_processes integer

   

  Next scheduled run

  ~~~~~~~~~~~~~~~~~~

  The next scheduled run for this job is:

  SQL> select job next_date next_sec

   from user_jobs

   where job = :jobno;

   

  JOB NEXT_DATE NEXT_SEC

  

   ::

   

  SQL>

   

  五 生成分析報告

   

  調用spreportsql可以生成分析報告

   

  SQL> @spreport

   

  DB Id DB Name Inst Num Instance

  

   EYGLE eygle

   

  Completed Snapshots

   

  Snap Snap

  Instance DB Name Id Snap Started Level Comment

  

  eygle EYGLE :

  

   :

  

   :

  

   :

  

  ………………

   

   :

  

   :

  

   :

  

   :

  

   :

  

   :

  

   :

  

   :

  

   :

  

   :

  

   :

  

   :

  

  eygle EYGLE :

  

   :

  

   

  Specify the Begin and End Snapshot Ids

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  輸入 begin_snap 的值:

  Begin Snapshot Id specified:

   

  輸入 end_snap 的值:

  End Snapshot Id specified:

   

  Specify the Report Name

  ~~~~~~~~~~~~~~~~~~~~~~~

  The default report file name is sp__ To use this name

  press <return> to continue otherwise enter an alternative

  輸入 report_name 的值: reptxt

   

  Using the report name reptxt

   

  這樣就生成了一個報告可是如果中間停過機那麼你可能收到以下錯誤信息

   

  ERROR: Snapshots chosen span an instance shutdown: RESULTS ARE INVALID

  STATSPACK report for

   

  DB Name DB Id Instance Inst Num Release OPS Host

  

  EYGLE eygle NO AMSERVER

  :ela := ;

  *

  ERROR 位於第 行:

  ORA: 第 列:

  PLS: 出現符號 ;在需要下列之一時

  (+modnotnull<an identifier>

  <a doublequoted delimitedidentifier><a bind variable>avg

  countcurrentexistsmaxminpriorsqlstddevsumvarianceexecute

  foralltimetimestampintervaldate

  <a string literal with character set specification>

  <a number><a singlequoted SQL string>

  符號 null 被替換為 ; 後繼續

  ORA: 第 列:

  PLS: 出現符號 ;在需要下列之一時

  (+modnotnull<an identifier>

  <a doublequoted delimitedidentifier><a bind variable>avg

  countcurrentexistsmaxminpriorsqlstddevsumvarianceexecute

  foralltimetimestampintervaldate

  <a stri

   

  六 移除定時任務

   

  移除一個定時任務可以如下操作:

   

  SQL> select joblog_userpriv_userlast_datenext_dateinterval from user_jobs;

  JOB LOG_USER LAST_DATE NEXT_DATE INTERVAL

   PERFSTAT ::: :: trunc(SYSDATE+/MI)

  SQL> execute dbms_jobremove()

   

  PL/SQL procedure successfully completed

   

  七 刪除歷史數據

   

  刪除stats$snapshot數據表中的相應數據其他表中的數據會相應的級連刪除

   

  SQL> select max(snap_id) from stats$snapshot;

   

  MAX(SNAP_ID)

  

  

   

  SQL> delete from stats$snapshot where snap_id < = ;

   

   rows deleted

   

  你可以更改snap_id的范圍以保留你需要的數據

   

  在以上刪除過程中你可以看到所有相關的表都被鎖定

   

  SQL> select aobject_idaoracle_username bobject_name

  from v$locked_object adba_objects b

  where aobject_id = bobject_id

  /

   

  OBJECT_ID ORACLE_USERNAME OBJECT_NAME

  

   PERFSTAT SNAP$

   PERFSTAT STATS$LIBRARYCACHE

   PERFSTAT STATS$ROLLSTAT

   PERFSTAT STATS$SGA

   PERFSTAT STATS$PARAMETER

   PERFSTAT STATS$SQL_STATISTICS

   PERFSTAT STATS$SQL_SUMMARY

   PERFSTAT STATS$ENQUEUESTAT

   PERFSTAT STATS$WAITSTAT

   PERFSTAT STATS$BG_EVENT_SUMMARY

   PERFSTAT STATS$SYSTEM_EVENT

   PERFSTAT STATS$SYSSTAT

   PERFSTAT STATS$SGASTAT

   PERFSTAT STATS$ROWCACHE_SUMMARY

   PERFSTAT STATS$BUFFER_POOL_STATISTICS

   PERFSTAT STATS$LATCH_MISSES_SUMMARY

   PERFSTAT STATS$SNAPSHOT

   PERFSTAT STATS$FILESTATXS

   PERFSTAT STATS$LATCH

   PERFSTAT JOB$

   

   rows selected

   

  八 調整STATSPACK的收集門限

   

  Statspack有兩種類型的收集選項

   

  級別(level)控制收集數據的類型

   

  門限(threshold)設置收集的數據的阈值

   

  .級別(level)

   

  Statspack共有三種快照級別默認值是

   

  alevel : 一般性能統計包括等待事件系統事件系統統計回滾段統計行緩存SGA會話緩沖池統計等等

   

  blevel : 增加SQL語句除了包括level的所有內容還包括SQL語句的收集收集結果記錄在stats$sql_summary中

   

  clevel : 增加子鎖存統計包括level的所有內容並且還會將附加的子鎖存存入stats$lathc_children中在使用這個級別時需要慎重建議在Oracle support的指導下進行

   

  可以通過statspack包修改缺省的級別設置

   

  SQL>execute statspacksnap(i_snap_level=>i_modify_parameter=>true);

   

  通過這樣的設置以後的收集級別都將是

   

  如果你只是想本次改變收集級別可以忽略i_modify_parameter參數

   

  SQL>execute statspacksnap(i_snap_level=>);

   

  .快照門限

   

  快照門限只應用於stats$sql_summary表中獲取的SQL語句

   

  因為每一個快照都會收集很多數據每一行都代表獲取快照時數據庫中的一個SQL語句所以stats$sql_summary很快就會成為Statspack中最大的表

   

  門限存儲在stats$statspack_parameter表中讓我們了結一下各種門限

   

  a executions_th 這是SQL語句執行的數量(默認值是)

   

  b disk_reads_tn 這是SQL語句執行的磁盤讀入數量(默認值是

   

  c parse_calls_th 這是SQL語句執行的解析調用的數量(默認值是

   

  d buffer_gets_th 這是SQL語句執行的緩沖區獲取的數量(默認值是

   

  任何一個門限值超過以上參數就會產生一條記錄

   

  通過調用statspackmodify_statspack_parameter函數我們可以改變門限的默認值

   

  例如

   

  SQL>execute statspackmodify_statspack_parameter(i_buffer_gets_th=>i_disk_reads_th=>;

   

  一一上的安裝配置

   

  a 數據庫狀況

   

  SQL> select * from v$version;

   

  BANNER

  

  Oraclei Enterprise Edition Release bit Producti

  PL/SQL Release Production

  CORE Version Production

  TNS for HPUX: Version Production

  NLSRTL Version Production

   

  b 運行statscbpssql

   

  SQL> @statscbpssql

   

  View created

   

  Synonym created

   

  Grant succeeded

   

  SQL>

   

  其他步驟都是相同的


From:http://tw.wingwit.com/Article/program/Oracle/201311/18787.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.