对于经常需要truncate的表进行固定统计信息
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
大家做過統(tǒng)計(jì)的一些存儲(chǔ)過程可能會(huì)知道,我們經(jīng)常有這類表,要先truncate它,執(zhí)行插入,再在執(zhí)行相關(guān)sql,這就會(huì)導(dǎo)致有一個(gè)時(shí)間誤差,如果在truncate和插入的中間進(jìn)行了表的分析,這個(gè)統(tǒng)計(jì)信息是不準(zhǔn)確的,也會(huì)影響執(zhí)行計(jì)劃:
?
[sql] view plain copy print ?
?
?--這里是關(guān)鍵點(diǎn),我們有個(gè)按天分析的job,如果這個(gè)時(shí)候分析了這個(gè)數(shù)據(jù),會(huì)認(rèn)為數(shù)據(jù)為0,但是之后就是錄入數(shù)據(jù)到臨時(shí)表
?
SQL> select num_rows,blocks? from user_tables;
? NUM_ROWS???? BLOCKS
---------- ----------
???????? 0????????? 0
SQL> insert into daodao_temp select object_id,object_id from dba_objects;
50315 rows created.
SQL> commit;
Commit complete.
有數(shù)據(jù)進(jìn)行入庫(kù):
好了,這個(gè)時(shí)候已經(jīng)不會(huì)再執(zhí)行統(tǒng)計(jì)信息的存儲(chǔ)過程了(除非第二天的時(shí)候),這個(gè)時(shí)候如果有一個(gè)sql執(zhí)行,就會(huì)導(dǎo)致執(zhí)行計(jì)劃可能錯(cuò)誤了。
這種現(xiàn)象在月初尤其明顯,道理類似的。
我們可以對(duì)這類臨時(shí)表進(jìn)行錄入數(shù)據(jù)的鎖定統(tǒng)計(jì)信息:
SQL> execute dbms_stats.gather_table_stats(user,'DAODAO_TEMP');
SQL> select num_rows,blocks? from user_tables;
? NUM_ROWS???? BLOCKS
---------- ----------
???? 50315??????? 103
SQL> execute DBMS_STATS.LOCK_TABLE_STATS(user,'DAODAO_TEMP');
PL/SQL procedure successfully completed.
SQL> TRUNCATE TABLE DAODAO_TEMP;
Table truncated.
SQL> execute dbms_stats.gather_table_stats(user,'DAODAO_TEMP');
BEGIN dbms_stats.gather_table_stats(user,'DAODAO_TEMP'); END;
*
ERROR at line 1:
ORA-20005: object statistics are locked (stattype = ALL)
ORA-06512: at "SYS.DBMS_STATS", line 13056
ORA-06512: at "SYS.DBMS_STATS", line 13076
ORA-06512: at line 1
這樣搜集統(tǒng)計(jì)信息的時(shí)候就不會(huì)搜集了,相關(guān)數(shù)據(jù)字典可以查詢這個(gè):
SQL> select stattype_locked from user_tab_statistics where table_name ='DAODAO_TEMP';
STATT
-----
ALL
all表示鎖定了 ,空表示沒有鎖定:
如果需要解鎖,可以執(zhí)行如下:
SQL> execute dbms_stats.unlock_table_stats(user,'DAODAO_TEMP');
PL/SQL procedure successfully completed.
轉(zhuǎn)載于:https://my.oschina.net/farces/blog/664334
總結(jié)
以上是生活随笔為你收集整理的对于经常需要truncate的表进行固定统计信息的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java周记(第五周)
- 下一篇: /dev/null 文件