Decode360's Blog

          業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
          Statspack學習(二).基本操作
          ?
          ??? 今天來了解一下statspack的使用方法。其實這玩意的啟動、刪除都很方便,因為有Oracle提供了非常便于操作的腳本,所以這方面就不再多說了,看看下面的幾個腳本就明白了。當然具體內部的機制估計就麻煩了,這個普通情況下也不需要我們去了解,除非想專門研究Oracle的系統(tǒng)調優(yōu)。
          ?
          一、設定自動執(zhí)行
          ?
          ??? 修改spauto.sql腳本來設定自動執(zhí)行任務。
          ?
          ??? 腳本主要內容如下:

          spool spauto.lis
          ?
          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;
          /
          ?
          select job, next_date, next_sec
          ? from user_jobs
          where job = :jobno;
          ?
          spool off;
          ?
          ??? 主要是修改執(zhí)行job中的間隔時間,默認的是每個小時進行執(zhí)行一次采樣,按照實際需要進行采樣間隔時間的設置。對于一些特殊的環(huán)境可以采用每30分鐘采樣,但是不推薦更短的間隔時間,因為statspack執(zhí)行本身需要消耗資源,采樣間隔太短會對系統(tǒng)性能造成比較大的影響。以下是執(zhí)行腳本:
          ?
          SQL> @E:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\spauto.sql;

          PL/SQL procedure successfully completed
          instno
          ---------
          1
          jobno
          ---------
          21
          ?
          Job number for automated statistics collection for this instance
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          Note that this job number is needed when modifying or removing
          the job:
          jobno
          ---------
          21
          ?
          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
          ---------- ----------- ----------------
          ??????? 21 2009-2-22 1 12:00:00
          jobno
          ---------
          21
          ?
          ?
          二、取消自動執(zhí)行計劃
          ?
          ??? 取消自動執(zhí)行計劃只需要移除已建的job即可。
          ?
          ??? SQL> select job,last_date,next_date,interval from user_jobs where log_user='PERFSTAT';
          ?
          ?????????? JOB LAST_DATE????? NEXT_DATE????? INTERVAL
          ??? ---------- -------------- -------------- ----------------------------
          ??????????? 23??????????????? 2009-2-22????? trunc(SYSDATE+1/24,'HH')
          ??? SQL> execute dbms_job.remove('23');
          ?
          ??? PL/SQL procedure successfully completed
          ?
          ??? 注意在完成采樣報告之后一定要記得取消執(zhí)行計劃,否則Statspack執(zhí)行一周的數(shù)據(jù)量是驚人的,嚴重的會造成宕機。
          ?
          ?
          三、生成分析報告
          ?
          ??? 使用spreport.sql腳本來生成分析報告。
          ???
          ??? SQL> @E:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\spreport.sql;
          ??? ... ...
          ??? Enter value for begin_snap:1
          ??? Enter value for end_snap:3
          ??? Enter value for report_name:test
          ??? ... ...
          ?
          ??? 會在當前目錄下生成test.lst的report文檔
          ?
          ??? 注意:選取的兩個snap不能跨越一次停機,否則報錯:
          ??? ORA-20200: The instance was shutdown between snapshots 1 and 21
          ??? ORA-06512: 在 line 49
          ?
          ?
          四、刪除歷史數(shù)據(jù)
          ?
          ??? 在stats$snapshot表中查找所有的snap序號:
          ?
          ??? SQL> select max(snap_id) from stats$snapshot;
          ?
          ??? MAX(SNAP_ID)
          ??? ------------
          ????????????? 21
          ?
          ??? 在stats$snapshot表中刪除數(shù)據(jù)后,所有生成的數(shù)據(jù)會相應得自動刪除完成。
          ?
          ??? SQL> delete from stats$snapshot where snap_id <= 21;
          ?
          ??? 8 rows deleted.
          ?
          ?
          ??? 另外oracle還提供了一個sptrunc.sql的腳本,用以清空statspack相關的所有系統(tǒng)表:
          ?
          truncate table STATS$FILESTATXS;
          truncate table STATS$TEMPSTATXS;
          truncate table STATS$LATCH;
          truncate table STATS$LATCH_CHILDREN;
          truncate table STATS$LATCH_MISSES_SUMMARY;
          truncate table STATS$LATCH_PARENT;
          truncate table STATS$LIBRARYCACHE;
          truncate table STATS$BUFFER_POOL_STATISTICS;
          truncate table STATS$ROLLSTAT;
          truncate table STATS$ROWCACHE_SUMMARY;
          truncate table STATS$SGA;
          truncate table STATS$SGASTAT;
          truncate table STATS$SYSSTAT;
          truncate table STATS$SESSTAT;
          truncate table STATS$SYSTEM_EVENT;
          truncate table STATS$SESSION_EVENT;
          truncate table STATS$BG_EVENT_SUMMARY;
          truncate table STATS$WAITSTAT;
          truncate table STATS$ENQUEUE_STATISTICS;
          truncate table STATS$SQL_SUMMARY;
          truncate table STATS$SQL_STATISTICS;
          truncate table STATS$SQLTEXT;
          truncate table STATS$PARAMETER;
          truncate table STATS$RESOURCE_LIMIT;
          truncate table STATS$DLM_MISC;
          truncate table STATS$UNDOSTAT;
          truncate table STATS$SQL_PLAN;
          truncate table STATS$SQL_PLAN_USAGE;
          truncate table STATS$SEG_STAT;
          truncate table STATS$SEG_STAT_OBJ;
          truncate table STATS$DB_CACHE_ADVICE;
          truncate table STATS$PGASTAT;
          truncate table STATS$INSTANCE_RECOVERY;
          truncate table STATS$JAVA_POOL_ADVICE;
          truncate table STATS$THREAD;
          truncate table STATS$CR_BLOCK_SERVER;
          truncate table STATS$CURRENT_BLOCK_SERVER;
          truncate table STATS$INSTANCE_CACHE_TRANSFER;
          truncate table STATS$FILE_HISTOGRAM;
          truncate table STATS$TEMP_HISTOGRAM;
          truncate table STATS$EVENT_HISTOGRAM;
          truncate table STATS$TIME_MODEL_STATNAME;
          truncate table STATS$SYS_TIME_MODEL;
          truncate table STATS$SESS_TIME_MODEL;
          truncate table STATS$STREAMS_CAPTURE;
          truncate table STATS$STREAMS_APPLY_SUM;
          truncate table STATS$PROPAGATION_SENDER;
          truncate table STATS$PROPAGATION_RECEIVER;
          truncate table STATS$BUFFERED_QUEUES;
          truncate table STATS$BUFFERED_SUBSCRIBERS;
          truncate table STATS$RULE_SET;
          truncate table STATS$OSSTAT;
          truncate table STATS$OSSTATNAME;
          truncate table STATS$PROCESS_ROLLUP;
          truncate table STATS$PROCESS_MEMORY_ROLLUP;
          truncate table STATS$STREAMS_POOL_ADVICE;
          truncate table STATS$SGA_TARGET_ADVICE;
          truncate table STATS$MUTEX_SLEEP;
          truncate table STATS$DYNAMIC_REMASTER_STATS;
          ?
          delete from STATS$SNAPSHOT;
          delete from STATS$DATABASE_INSTANCE;
          ?
          commit;
          ?
          ??? 當存在大量的數(shù)據(jù)時,使用delete是比較慢的,可以嘗試使用sptrunc.sql腳本
          ?
          ?
          posted on 2009-01-18 21:13 decode360 閱讀(417) 評論(0)  編輯  收藏 所屬分類: 10.DB_Tools
          主站蜘蛛池模板: 江源县| 宁化县| 文化| 黄骅市| 威信县| 称多县| 东兴市| 宜良县| 武邑县| 宜州市| 祥云县| 尉犁县| 咸丰县| 维西| 枝江市| 甘洛县| 克拉玛依市| 揭东县| 阳东县| 景洪市| 英吉沙县| 蓬莱市| 莆田市| 宝清县| 苍山县| 武功县| 平南县| 慈利县| 翁牛特旗| 漠河县| 临海市| 胶南市| 横峰县| 阳曲县| 昂仁县| 昆山市| 北京市| 邹城市| 疏勒县| 隆林| 县级市|