監視stale statistics(失真的統計資訊)的物件!
SQL> exec dbms_stats.alter_schema_tab_monitoring('xys');
PL/SQL 過程已成功完成。
SQL> select * from tt;
ID N
---------- -
1 a
2 A
3 B
4 b
5 c
SQL> update tt set name='m';
已更新5行。
SQL> commit;
提交完成。
--user_tab_modifications中沒有記錄,oracle flush sga
到user_tab_modifications可能需要一段時間,不過我們可以
透過DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO來手動flush
SQL> select * from user_tab_modifications;
未選定行
--手動flush sga的資訊到user_tab_modifications
SQL> exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO ;
PL/SQL 過程已成功完成。
SQL> desc user_tab_modifications
名稱 是否為空? 型別
----------------------------------------- -------- ----------------------------
TABLE_NAME VARCHAR2(30)
PARTITION_NAME VARCHAR2(30)
SUBPARTITION_NAME VARCHAR2(30)
INSERTS NUMBER
UPDATES NUMBER
DELETES NUMBER
TIMESTAMP DATE
TRUNCATED VARCHAR2(3)
DROP_SEGMENTS NUMBER
SQL> select * from user_tab_modifications;
TABLE P SUBPA INSERTS UPDATES DELETES TIMESTAMP TRU DROP_SEGMENTS
----- - ----- ---------- ---------- ---------- -------------- --- -------------
TT 0 5 0 17-4月 -08 NO 0
SQL> edit
已寫入 file afiedt.buf
1 declare
2 v_obj dbms_stats.objecttab;
3 begin
4 dbms_stats.gather_schema_stats
5 (OWNNAME=>'XYS',OPTIONS=>'LIST STALE',OBJLIST=>v_obj );
6 for i in 1 .. v_obj .count
7 loop
8 dbms_output.put_line( v_obj (i).ownname );
9 dbms_output.put_line( v_obj (i).objType );
10 dbms_output.put_line( v_obj (i).objName );
11 dbms_output.put_line( v_obj (i).PartName );
12 dbms_output.put_line( v_obj (i).subPartName );
13 dbms_output.put_line
14 ( '-------------------------' );
15 end loop;
16* end;
SQL> /
PL/SQL 過程已成功完成。
Objects are considered stale when 10% of the total rows have been changed. When you issue
GATHER_TABLE_STATS with GATHER STALE, the procedure checks the USER_TAB_MODIFICATIONS view.
If a monitored table has been modified more than 10%, then statistics are gathered again.
The information about changes of tables, as shown in the USER_TAB_MODIFICATIONS view, can be
flushed from the SGA into the data dictionary with the
DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO procedure.
資料的10%被修改的時其statistics被認為就是失真的,那麼這個物件就被記錄在
user_tab_modifications中,不過我們來驗證一下oracle是否會自動蒐集具有stale statistics的物件
的statistics呢?
SQL> SET SERVEROUTPUT ON
SQL> /
XYS
TABLE
TT
PL/SQL 過程已成功完成。
--透過下面試驗驗證oracle不會對那些stale statistics的物件進行statistics自動蒐集,僅僅是監視而已。
SQL> select table_name , num_rows,blocks,avg_row_len from user_tables where tabl
e_name='TT';
TABLE NUM_ROWS BLOCKS AVG_ROW_LEN
----- ---------- ---------- -----------
TT 5 5 8
SQL> select * from tt;
ID N
---------- -
1 m
2 m
3 m
4 m
5 m
SQL> insert into tt select *from tt;
已建立5行。
SQL> commit;
提交完成。
--oracle到底什麼時候會把sga中的資訊flush到user_tab_modifications中也是我的疑問
SQL> select * from user_tab_modifications;
TABLE P SUBPA INSERTS UPDATES DELETES TIMESTAMP TRU DROP_SEGMENTS
----- - ----- ---------- ---------- ---------- -------------- --- -------------
TT 0 5 0 17-4月 -08 NO 0
SQL> select * from user_tab_modifications;
TABLE P SUBPA INSERTS UPDATES DELETES TIMESTAMP TRU DROP_SEGMENTS
----- - ----- ---------- ---------- ---------- -------------- --- -------------
TT 0 5 0 17-4月 -08 NO 0
SQL> select * from user_tab_modifications;
TABLE P SUBPA INSERTS UPDATES DELETES TIMESTAMP TRU DROP_SEGMENTS
----- - ----- ---------- ---------- ---------- -------------- --- -------------
TT 0 5 0 17-4月 -08 NO 0
--等不及了,還是手動flush一下吧
SQL> exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO ;
PL/SQL 過程已成功完成。
SQL> select * from user_tab_modifications;
TABLE P SUBPA INSERTS UPDATES DELETES TIMESTAMP TRU DROP_SEGMENTS
----- - ----- ---------- ---------- ---------- -------------- --- -------------
TT 5 5 0 17-4月 -08 NO 0
SQL> select table_name , num_rows,blocks,avg_row_len from user_tables where tabl
e_name='TT';
TABLE NUM_ROWS BLOCKS AVG_ROW_LEN
----- ---------- ---------- -----------
TT 5 5 8
SQL>
上面查詢結果顯示 NUM_ROWS=5而不是現在的10行資料,也就說oracle不會對那些具有stale statistics的物件自動蒐集statistics。
--不過如果有了監視資訊,之後可以透過引數OPTIONS=>'GATHER STALE'對這些具有stale statistics
的物件蒐集新的statistics。
SQL> edit
已寫入 file afiedt.buf
1 declare
2 v_obj dbms_stats.objecttab;
3 begin
4 dbms_stats.gather_schema_stats
5 (OWNNAME=>'XYS',OPTIONS=>'GATHER STALE',OBJLIST=>v_obj );
6 for i in 1 .. v_obj .count
7 loop
8 dbms_output.put_line( v_obj (i).ownname );
9 dbms_output.put_line( v_obj (i).objType );
10 dbms_output.put_line( v_obj (i).objName );
11 dbms_output.put_line( v_obj (i).PartName );
12 dbms_output.put_line( v_obj (i).subPartName );
13 dbms_output.put_line
14 ( '-------------------------' );
15 end loop;
16* end;
SQL> /
XYS
TABLE
TT
-------------------------
PL/SQL 過程已成功完成。
SQL> select * from user_tab_modifications;
未選定行
SQL> select table_name , num_rows,blocks,avg_row_len from user_tables where tabl
e_name='TT';
TABLE NUM_ROWS BLOCKS AVG_ROW_LEN
----- ---------- ---------- -----------
TT 10 5 7
SQL>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/19602/viewspace-1002659/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Fixed Objects Statistics統計資訊收集 - 2Object
- 觀察analyze table compute statistics 都對什麼物件統計了資訊 - 轉物件
- [轉] oracle統計資訊(statistics)和直方圖(histogram)Oracle直方圖Histogram
- 深入分割槽表的增量統計資訊收集技術(incremetal statistics collection)REM
- Java的物件監視器Java物件
- Oracle 11g新特性:多列統計資訊(MultiColumn Statistics)Oracle
- 【統計資訊】全面檢視錶所有統計資訊SQLSQL
- [sqlserver] 檢視錶的統計資訊SQLServer
- [筆記]statistics資訊的收集筆記
- perl Statistics::Descriptive Perl 的統計模組
- Sqlserver表統計資訊丟失問題SQLServer
- 視訊監控系統的設計
- Deferred statistics publish-延遲統計資訊釋出功能介紹
- oracle之 v$sql_monitor 監視正在執行的SQL語句的統計資訊OracleSQL
- 利用 proxy 監視物件的變化物件
- SciTech-Statistics-英語授課:Business Statistics商務統計
- PostgreSQL統計資訊的幾個重要檢視SQL
- Oracle錶的歷史統計資訊檢視Oracle
- oracle檢視和更新統計表的資訊Oracle
- 檢視錶的統計資訊SQL指令碼SQL指令碼
- 使用dbms_stats列出沒有統計資訊的物件!物件
- oracle 統計資訊檢視與收集Oracle
- SQL Server 監控統計阻塞指令碼資訊SQLServer指令碼
- navicat premium 12檢視物件資訊REM物件
- 【統計資訊】Oracle統計資訊Oracle
- Oracle9i如何監視索引並清除監視資訊(轉)Oracle索引
- 關閉特定物件統計資訊自動收集物件
- 【調優篇基本原理】物件統計資訊物件
- 【統計資訊】Oracle常用的收集統計資訊方式Oracle
- 監視映象資料庫的其他資訊源資料庫
- oracle 由於impdp 引起的表統計資訊被鎖 ORA-20005: object statistics are lockedOracleObject
- oracle 由於impdp 引起的表統計資訊被鎖 ORA-20005: object statistics are lockedOracleObject
- 分享檢視統計資訊非常好的指令碼指令碼
- 檢視統計資訊分析每次經歷的時間
- ORACLE表統計資訊與列統計資訊、索引統計資訊Oracle索引
- Oracle中的分析統計validate structure,compute statisticsOracleStruct
- 在Oracle9i中,如何監視索引並清除監視資訊Oracle索引
- Oracle的統計資訊Oracle