1,檢查參數
SQL> show parameter job_qu
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes integer 10
SQL> show parameter timed_sta
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
timed_statistics boolean TRUE
SQL> create tablespace perfstat
2 datafile '/u02/oradata/zdtdbat5/perfsta.dbf' size 500m
3 autoextend on next 32M;
Tablespace created.
2,執行路徑
SQL> ! pwd
/u01/app/oracle/product/10.2.0/db_1/rdbms/admin
3.sqlplus 执行脚本:
@?\rdbms\admin\spcreate.sql
输入 perfstat_password 的值: perfstat
输入 default_tablespace 的值: perfstat
输入 temporary_tablespace 的值: temp
4,可以查看生成的文件報告
[oracle@zdtdbat4 admin]$ ls *.lis
spcpkg.lis spctab.lis spcusr.lis
执行一次简单的操作:
以perfstat用户连接,如果你刚执行完@spcreate,则oracle默认将当前用户切换为perfstat。
首先生成两次采样。
5,開始採樣
SQL>execute statspack.snap
PL/SQL procedure successfullycompleted.
SQL>execute statspack.snap
PL/SQL procedure successfullycompleted.
执行@spreport生成报告(该文件物理存放路径与spcreate相同)。
6,生成報告
SQL> @spreport
输入 begin_snap 的值: 1
Begin Snapshot Id specified: 1
输入 end_snap 的值: 2
End Snapshot Id specified: 2
Specify the Report Name test
End of Report ( test.lst )
7,規劃自動任務
設定定時執行任務,開始收集數據了,使用spatuo.sql來定義任務
[oracle@zdtdbat4 admin]$ ls spa*
spauto.sql
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 HH 每小時一次
1/48 MI 每半時一次
1/144 MI 每十五分鐘一次
1/288 MI 每5分鐘一次
可以修改時間點來修改執行頻率
begin
select instance_number into :instno from v$instance;
dbms_job.submit(:jobno, 'statspack.snap;', trunc(sysdate+1/48,'MI'), 'trunc(SYSDATE+1/24,''HH'')', TRUE, :instno);
commit;
end;
執行@spauto.sql使得生效。
SQL> @spauto.sql
PL/SQL procedure successfully completed.
Job number for automated statistics collection for this instance
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Note that this job number is needed when modifying or removing
the job:
JOBNO
----------
21
Next scheduled run
~~~~~~~~~~~~~~~~~~
The next scheduled run for this job is:
JOB NEXT_DATE NEXT_SEC
---------- --------- ----------------
21 07-JAN-13 09:40:00
一個statspack的報告不能跨越一次停機 但之前或之後收集信息依然有效。跨越選擇前後的報告report
8,移除定時執行任務
SQL> select job,log_user,priv_user,last_date,next_Date,interval from user_jobs;
JOB LOG_USER PRIV_USER
---------- ------------------------------ ------------------------------
LAST_DATE NEXT_DATE
--------- ---------
INTERVAL
------------------------------------------------------------------------------
21 PERFSTAT PERFSTAT
07-JAN-13
trunc(SYSDATE+1/24,'HH')
SQL> execute dbms_job_.remove('21');
9,刪除歷史數據
SQL> select max(snap_id) from stats$snapshot;
MAX(SNAP_ID)
------------
2
SQL> delete from stats$snapshot snap_id<2;
你可以更改snap_id的範圍保留需要的數據
,你可以查看到相關的表都鎖定
select a.OBJECT_ID,a.ORACLE_USERNAME,b.object_name
from v$locked_object a ,dba_objects b
where a.OBJECT_ID=b.object_id
10,其他重要腳本
a,在診斷系統問題時,可能需要向專業人士提供數據 可以導出statspack 表數據
用的是 spuexp.par
[oracle@zdtdbat4 admin]$ ls spuexp.par
spuexp.par
[oracle@zdtdbat4 admin]$ exp userid=perfstat/my perfstat password parfile=spuexp.par
b,sqdrop.sql 在執行主要兩個腳本spdtabl.sql ,spdusr.sql
11,調整statspack的收集門限
兩種類型
級別(level):控制收集數據的類型
門限(shreshold) 設置收集的數據的閥值
a,級別 默認是5
0,一般性統計,包含等待事件,系統事件,系統統計,回滾段統計,行緩存,sga,會話,鎖,緩衝池統計等
5,增加sql語句統計
10,增加子鎖統計 stats$sql_summary中
修改設置級別。
sql > execute statspack.snap(i_snap_level=>0,i_modify_parameter=>'true');
如果執行修改本次
sql > execute statspack.snap(i_snap_level=>0);
b,快照門限
門限只應用于stats$sql_summary
各種門限
a executions_sh sql語句執行數量 默認100
b disk_reads_tn 執行磁盤讀入數量 默認1000
c parse_call_th 執行解析調用數量 默認1000
d buffer_gets_th 執行緩衝區獲取得數量 默認1000
修改門限默認值
sql > execute statspack.modify statspack parameter(i buffer gets th=>1000000,i disk reads th=>100000;
注意: 执行的时候记得用用户:perfstat 或者报错
ERROR at line 1:
ORA-20200: Begin Snapshot Id 2 does not exist for this database/instance
ORA-06512: at line 28
1,执行 exec statspack.snap
2,执行 @?/rdbms/admin/spreport
就生成报表了.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15187685/viewspace-752221/
,如需转载,请注明出处,否则将追究法律责任。