1、检查部分参数值
--job_queue_process:为了能够建立自动任务,执行数据收集,此参数必须大于0。
SQL> show parameter job_
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes integer 0
SQL> alter system set job_queue_processes=10;
System altered.
SQL> show parameter job_
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes integer 10
SQL> show parameter timed_statistics
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
timed_statistics boolean TRUE
--timed_statistics:收集操作系统的计时信息,这些信息可被用来显示时间等统计信息、优化数据库和 SQL 语句。
要防止因从操作系统请求时间而引起的开销,请将该值设置为False ,使用statspack收集统计信息时建议将该值设置为 TRUE,否则收集的统计信息大约只能起到10%的作用,将timed_statistics设置为True所带来的性能影响与好处相比是微不足道的。
该参数使收集的时间信息存储在在V$SESSTAT 和V$SYSSTAT 动态性能视图中。
SQL> show parameter timed_statistics
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
timed_statistics boolean FALSE
SQL> alter system set timed_statistics=true;
System altered.
SQL> show parameter timed_statistics
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
timed_statistics boolean TRUE
2、手工产生快照
使用perfstat用户连接数据库
SQL> conn perfstat/perfstat
Connected.
运行statspack.snap可以产生系统快照,运行两次,产生两次快照。
第一次:
SQL> exec statspack.snap;
PL/SQL procedure successfully completed.
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
V$DYNAMIC_REMASTER_STATS SYNONYM
STATS$DATABASE_INSTANCE TABLE
STATS$LEVEL_DESCRIPTION TABLE
STATS$SNAPSHOT TABLE
STATS$DB_CACHE_ADVICE TABLE
STATS$FILESTATXS TABLE
STATS$TEMPSTATXS TABLE
STATS$LATCH TABLE
STATS$LATCH_CHILDREN TABLE
STATS$LATCH_PARENT TABLE
STATS$LATCH_MISSES_SUMMARY TABLE
STATS$LIBRARYCACHE TABLE
STATS$BUFFER_POOL_STATISTICS TABLE
STATS$ROLLSTAT TABLE
STATS$ROWCACHE_SUMMARY TABLE
STATS$SGA TABLE
STATS$SGASTAT TABLE
STATS$SYSSTAT TABLE
STATS$SESSTAT TABLE
STATS$SYSTEM_EVENT TABLE
STATS$SESSION_EVENT TABLE
STATS$BG_EVENT_SUMMARY TABLE
STATS$WAITSTAT TABLE
STATS$ENQUEUE_STATISTICS TABLE
STATS$SQL_SUMMARY TABLE
STATS$SQLTEXT TABLE
STATS$SQL_STATISTICS TABLE
STATS$RESOURCE_LIMIT TABLE
STATS$DLM_MISC TABLE
STATS$CR_BLOCK_SERVER TABLE
STATS$CURRENT_BLOCK_SERVER TABLE
STATS$INSTANCE_CACHE_TRANSFER TABLE
STATS$UNDOSTAT TABLE
STATS$SQL_PLAN_USAGE TABLE
STATS$SQL_PLAN TABLE
STATS$SEG_STAT TABLE
STATS$SEG_STAT_OBJ TABLE
STATS$PGASTAT TABLE
STATS$PARAMETER TABLE
STATS$INSTANCE_RECOVERY TABLE
STATS$STATSPACK_PARAMETER TABLE
STATS$SHARED_POOL_ADVICE TABLE
STATS$SQL_WORKAREA_HISTOGRAM TABLE
STATS$PGA_TARGET_ADVICE TABLE
STATS$JAVA_POOL_ADVICE TABLE
STATS$THREAD TABLE
STATS$FILE_HISTOGRAM TABLE
STATS$TEMP_HISTOGRAM TABLE
STATS$EVENT_HISTOGRAM TABLE
STATS$TIME_MODEL_STATNAME TABLE
STATS$SYS_TIME_MODEL TABLE
STATS$SESS_TIME_MODEL TABLE
STATS$STREAMS_CAPTURE TABLE
STATS$STREAMS_APPLY_SUM TABLE
STATS$PROPAGATION_SENDER TABLE
STATS$PROPAGATION_RECEIVER TABLE
STATS$BUFFERED_QUEUES TABLE
STATS$BUFFERED_SUBSCRIBERS TABLE
STATS$RULE_SET TABLE
STATS$OSSTATNAME TABLE
STATS$OSSTAT TABLE
STATS$PROCESS_ROLLUP TABLE
STATS$PROCESS_MEMORY_ROLLUP TABLE
STATS$SGA_TARGET_ADVICE TABLE
STATS$STREAMS_POOL_ADVICE TABLE
STATS$MUTEX_SLEEP TABLE
STATS$DYNAMIC_REMASTER_STATS TABLE
STATS$IDLE_EVENT TABLE
68 rows selected.
查看刚生成的快照snap_id
SQL> select * from STATS$SNAPSHOT;
SNAP_ID DBID INSTANCE_NUMBER SNAP_TIME STARTUP_TIME SESSION_ID
---------- ---------- --------------- ------------ ------------ ----------
SERIAL# SNAP_LEVEL
---------- ----------
UCOMMENT
--------------------------------------------------------------------------------
EXECUTIONS_TH PARSE_CALLS_TH DISK_READS_TH BUFFER_GETS_TH SHARABLE_MEM_TH
------------- -------------- ------------- -------------- ---------------
VERSION_COUNT_TH SEG_PHY_READS_TH SEG_LOG_READS_TH SEG_BUFF_BUSY_TH
---------------- ---------------- ---------------- ----------------
SEG_ROWLOCK_W_TH SEG_ITL_WAITS_TH SEG_CR_BKS_RC_TH SEG_CU_BKS_RC_TH
---------------- ---------------- ---------------- ----------------
SEG_CR_BKS_SD_TH SEG_CU_BKS_SD_TH SNAPSHOT_EXEC_TIME_S ALL_I B
---------------- ---------------- -------------------- ----- -
1 2273728207 1 15-NOV-12 30-OCT-12 0
0 5
100 1000 1000 10000 1048576
20 1000 10000 100
100 100 1000 1000
1.04 FALSE
第二次:
SQL> exec statspack.snap;
PL/SQL procedure successfully completed.
SQL> select * from STATS$SNAPSHOT;
SNAP_ID DBID INSTANCE_NUMBER SNAP_TIME STARTUP_TIME SESSION_ID
---------- ---------- --------------- ------------ ------------ ----------
SERIAL# SNAP_LEVEL
---------- ----------
UCOMMENT
--------------------------------------------------------------------------------
EXECUTIONS_TH PARSE_CALLS_TH DISK_READS_TH BUFFER_GETS_TH SHARABLE_MEM_TH
------------- -------------- ------------- -------------- ---------------
VERSION_COUNT_TH SEG_PHY_READS_TH SEG_LOG_READS_TH SEG_BUFF_BUSY_TH
---------------- ---------------- ---------------- ----------------
SEG_ROWLOCK_W_TH SEG_ITL_WAITS_TH SEG_CR_BKS_RC_TH SEG_CU_BKS_RC_TH
---------------- ---------------- ---------------- ----------------
SEG_CR_BKS_SD_TH SEG_CU_BKS_SD_TH SNAPSHOT_EXEC_TIME_S ALL_I B
---------------- ---------------- -------------------- ----- -
1 2273728207 1 15-NOV-12 30-OCT-12 0
0 5
100 1000 1000 10000 1048576
20 1000 10000 100
100 100 1000 1000
1.04 FALSE
2 2273728207 1 15-NOV-12 30-OCT-12 0
0 5
100 1000 1000 10000 1048576
20 1000 10000 100
100 100 1000 1000
.51 FALSE
3、生成两个时间点的报告
执行脚本$ORACLE_HOME\rdbms\admin\spreport.sql就可以生成基于两个时间点的报告。
SQL> @?/rdbms/admin/spreport.sql
Current Instance
~~~~~~~~~~~~~~~~
DB Id DB Name Inst Num Instance
----------- ------------ -------- ------------
2273728207 CCOD 1 ccod
Instances in this Statspack schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
----------- -------- ------------ ------------ ------------
2273728207 1 CCOD ccod databak
Using 2273728207 for database Id
Using 1 for instance number
Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed. Pressing without
specifying a number lists all completed snapshots.
Listing all Completed Snapshots
Snap
Instance DB Name Snap Id Snap Started Level Comment
------------ ------------ --------- ----------------- ----- --------------------
ccod CCOD 1 15 Nov 2012 12:33 5
2 15 Nov 2012 12:38 5
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 1 (此处输入第一个时间点的snap_id)
Begin Snapshot Id specified: 1
Enter value for end_snap: 2 (此处输入第二个时间点的snap_id)
End Snapshot Id specified: 2
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is sp_1_2. To use this name,
press to continue, otherwise enter an alternative.
Enter value for report_name: (此处默认名称就行,直接回车)
Using the report name sp_1_2
STATSPACK report for
Database DB Id Instance Inst Num Startup Time Release RAC
~~~~~~~~ ----------- ------------ -------- --------------- ----------- ---
2273728207 ccod 1 30-Oct-12 18:50 10.2.0.1.0 NO
Host Name: databak Num CPUs: 8 Phys Memory (MB): 0
~~~~
Snapshot Snap Id Snap Time Sessions Curs/Sess Comment
~~~~~~~~ ---------- ------------------ -------- --------- -------------------
Begin Snap: 1 15-Nov-12 12:33:55 17 3.9
End Snap: 2 15-Nov-12 12:38:22 17 5.1
Elapsed: 4.45 (mins)
Cache Sizes Begin End
~~~~~~~~~~~ ---------- ----------
Buffer Cache: 192M Std Block Size: 8K
Shared Pool Size: 92M Log Buffer: 6,892K
Load Profile Per Second Per Transaction
~~~~~~~~~~~~ --------------- ---------------
Redo size: 3,702.01 988,436.00
Logical reads: 26.99 7,205.00
Block changes: 8.77 2,342.00
Physical reads: 0.00 0.00
Physical writes: 0.03 9.00
User calls: 0.06 15.00
Parses: 3.15 842.00
Hard parses: 0.37 99.00
Sorts: 2.26 604.00
Logons: 0.00 0.00
Executes: 7.12 1,900.00
Transactions: 0.00
。。。
。。。
End of Report ( sp_1_2.lst )
生成的报告名称为sp_1_2.lst
SQL> !ls
10201_database_linux32.zip database db_home DUMP phone_data s7777.dmp spauto.lis spctab.lis spdtab.lis
ccod.dmp db-filesbak Desktop oracle10gbak phone_data.tar.gz sp_1_2.lst spcpkg.lis spcusr.lis spdusr.lis
4、自动任务执行
使用系统脚本$ORACLE_HOME/rdbms/admin/spauto.sql
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;
执行spauto.sql后,就建立了一个每小时执行一次的数据收集计划。
这个Job任务定义了收集数据(执行statspack.snap)的时间间隔为1小时:
一天24小时,1440分钟-->
1/24,'HH' 每小时一次
1/48,'MI' 每半小时一次
1/144,'MI' 每10分钟一次
1/288,'MI' 每5分钟一次
关于采样间隔,通常建议1小时,如有特殊需要,可以设置更短,如半小时。但不推荐更短。因为statpack的执行本身需要消息资源,太短的采样对系统的性能会产生较大的影响(甚至会使statspack的执行出现在采样数据中)
SQL> @?/rdbms/admin/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
----------
1
Job queue process
~~~~~~~~~~~~~~~~~
Below is the current setting of the job_queue_processes init.ora
parameter - the value for this parameter must be greater
than 0 to use automatic statistics gathering:
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes integer 10
Next scheduled run
~~~~~~~~~~~~~~~~~~
The next scheduled run for this job is:
JOB NEXT_DATE NEXT_SEC
---------- ------------ ----------------
1 15-NOV-12 14:00:00
--查看任务并移除任务
SQL> select job,schema_user,to_char(next_date,'yyyymmdd hhmiss') as next_D,interval,what from user_jobs;
JOB SCHEMA_USER NEXT_D
---------- ------------------------------ ---------------
INTERVAL
--------------------------------------------------------------------------------
WHAT
--------------------------------------------------------------------------------
1 PERFSTAT 20121115 020000
trunc(SYSDATE+1/24,'HH')
statspack.snap;
SQL> execute dbms_job.remove('1');
PL/SQL procedure successfully completed.
SQL> select job,schema_user,to_char(next_date,'yyyymmdd hhmiss') as next_D,interval,what from user_jobs;
no rows selected
5、删除采样数据
只要删除stat$snapshot数据表中的相应数据,其他表中的数据会相应的级连删除。
SQL> select max(snap_id) from stats$snapshot;
MAX(SNAP_ID)
------------
2
SQL> delete from stats$snapshot where snap_id<2;
1 row deleted.
SQL> commit;
Commit complete.
删除过程中,你可以看到所有相关的表都被锁定了。
SQL> 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;
truncate统计信息表:使用脚本$ORACLE_HOME/rdbms/admin/sptrunc.sql 删除所有的采样数据但保留statspack的库结构。
如果有大量数据,直接delete采样数据是非常缓慢的。使用脚本sptrunc.sql可以快速的删除所有统计信息。
查看脚本,可以看出是用truncate table截掉所有相关的表中的内容。
SQL> @?/rdbms/admin/sptrunc.sql
Warning
~~~~~~~
Running sptrunc.sql removes ALL data from Statspack tables. You may
wish to export the data before continuing.
About to Truncate Statspack Tables
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If would like to exit WITHOUT truncating the tables, enter any text at the
begin_or_exit prompt (e.g. 'exit'), otherwise if you would like to begin
the truncate operation, press
Enter value for begin_or_exit: (直接回车,即清空)
Entered at the 'begin_or_exit' prompt
... Starting truncate operation
Table truncated.
。。。
。。。
Table truncated.
Table truncated.
Table truncated.
2 rows deleted.
1 row deleted.
Commit complete.
Package altered.
... Truncate operation complete
SQL>
删除statspack所有数据和各种对象:使用脚本$ORACLE_HOME/rdbms/admin/spdrop.sql。全部删除,不留痕迹!但有表空间在~~
SQL> @?/rdbms/admin/spdrop.sql
SQL> Rem
SQL> Rem $Header: spdrop.sql 03-may-00.15:57:17 cdialeri Exp $
SQL> Rem
SQL> Rem spdrop.sql
。。。
。。。
Synonym dropped.
User dropped.
NOTE:
SPDUSR complete. Please check spdusr.lis for any errors.
SQL> select tablespace_name from dba_tablespaces;
TABLESPACE_NAME
------------------------------
SYSTEM
UNDOTBS
SYSAUX
TEMP
7777
CCOD
PERF
7 rows selected.
SQL> conn perfstat/perfstat
ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.
SQL>
++++++++++++++++++

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20553601/viewspace-749265/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/20553601/viewspace-749265/