Oracle10g 統計資訊的自動收集

tolywang發表於2009-10-10


出處: http://orchidllh.itpub.net/post/4020/461278

10g開始,週一-週五晚上10點,週六的凌晨會進行統計資訊的收集,以確保執行計劃的正確性。
但是並不是所有的資料庫都需要如此頻繁的進行統計資料的收集,有時候我們可能需要修改這個job執行的頻度或者執行的時間。
預設的執行時間可能正好和我們的應用高峰在相同時間,會對應用有所影響。
下面是修改GATHER_STATS_JOB的執行時間的大致步驟:

 

首先,我們可以看到這個scheduler_jobs的一些基本情況:

set linesize 400

col job_name for a24
col program_name for a24
col schedule_name for a24
col schedule_type for a12
col fc for 9
col stop_on_window_close for a5
col enabled for a5


select t.job_name,t.program_name,t.schedule_name,t.schedule_type,t.enabled,t.stop_on_window_close,t.failure_count fc,t.last_run_duration
from sys.dba_scheduler_jobs t
where job_name='GATHER_STATS_JOB';


JOB_NAME PROGRAM_NAME SCHEDULE_NAME SCHEDULE_TYP ENABL STOP_ FC LAST_RUN_DURATION
------------------------ ------------------------ ------------------------ ------------ ----- ----- -- ---------------------------------------------------------------------------
GATHER_STATS_JOB GATHER_STATS_PROG MAINTENANCE_WINDOW_GROUP WINDOW_GROUP TRUE TRUE 0 +000000000 00:28:32.513804

1 rows selected.

可以看到這個SCHEDULE使用的是MAINTENANCE_WINDOW_GROUP視窗組,當視窗關閉的時候會結束,失敗次數為0,最後一次執行耗費的時間是28分鐘。

然後我們可以看看這個視窗組對應的視窗資訊:

SQL> select * from sys.dba_scheduler_wingroup_members t;

WINDOW_GROUP_NAME WINDOW_NAME
------------------------------ ------------------------------
MAINTENANCE_WINDOW_GROUP WEEKNIGHT_WINDOW
MAINTENANCE_WINDOW_GROUP WEEKEND_WINDOW

可以看到這個視窗組包括兩個視窗,分別是每天執行的視窗和週末執行的視窗。
下一步我們查詢每個視窗具體的資訊:

set linesize 400
col window_name for a24
col repeat_interval for a70
col window_priority for a4
col enabled for a5
col active for a5
select t.window_name,t.window_priority,t.enabled,t.active,t.repeat_interval,t.duration
from sys.dba_scheduler_windows t;

WINDOW_NAME WIND ENABL ACTIV REPEAT_INTERVAL DURATION
------------------------ ---- ----- ----- ---------------------------------------------------------------------- ---------------------------------------------------------------------------
WEEKNIGHT_WINDOW LOW TRUE FALSE freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=22;byminute=0; bysecond=0 +000 08:00:00
WEEKEND_WINDOW LOW TRUE FALSE freq=daily;byday=SAT;byhour=0;byminute=0;bysecond=0 +002 00:00:00

REPEAT_INTERVAL為視窗的開啟時間和頻率,DURATION為視窗開啟的持續時間,enabled是視窗是否開放的標誌,active則表示視窗當前是否正在開放。

如果要修改某個視窗的開啟時間,需要使用DBMS_SCHEDULER.SET_ATTRIBUTE:
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE(
name=>'SYS.WEEKEND_WINDOW',
attribute=>'REPEAT_INTERVAL',
value=>'FREQ=WEEKLY;BYDAY=MON;BYHOUR=3;BYMINUTE=0;BYSECOND=0');
END;

如果該視窗當前是活躍的,則需要先disable才能修改:
BEGIN
DBMS_SCHEDULER.DISABLE(
name=>'SYS.WEEKEND_WINDOW',
force=>TRUE);
END;

修改以後再enable:
BEGIN
DBMS_SCHEDULER.ENABLE(
name=>'SYS.WEEKEND_WINDOW');
END;

如果每週只想執行一次,則可以將兩個視窗改到相同時間開啟,相同時間只能開啟一個視窗,所以一個視窗開啟後另外一個不會再開啟,也可以關閉一個視窗,只留一個視窗開啟:
BEGIN
DBMS_SCHEDULER.DISABLE(
name=>'SYS.WEEKEND_WINDOW',
force=>TRUE);
END;

可以透過檢視DBA_SCHEDULER_WINDOW_LOG監控視窗的開啟、關閉和修改的情況。

可以透過檢視dba_scheduler_job_log監控job的執行情況。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-617211/,如需轉載,請註明出處,否則將追究法律責任。

相關文章