DM達夢數據庫索引失效的處理---強制更新統計信息


近期啟動了基於達夢數據庫的大數據量性能測試,發現創建索引后並不會自動更新對應的統計信息。

現象描述

我們在使用達夢數據庫的過程中,有時候碰到一個這樣子的情況:

Create  table  manyrows_tables;

Select  * from manyrows_tables where col=xx; -- 查詢很慢

Create index test_1 on manyrows_tables(col);

Select  * from manyrows_tables where col=xx; -- 查詢還是很慢?

 

處理方法

根據達夢的官方文檔資料介紹,收集統計信息一共有三種方式:

1. Sp 系統函數: SP_TAB_STAT_INIT ( 'SYSDBA' , 'TEST_TABLE' );   SP_INDEX_STAT_INIT ( 'SYSDBA' , 'IDX_TEST_COL1' );等

2. Stat 命令:Stat 100 on test(col);

3. Dbms_stats 系統包:  DBMS_STATS.GATHER_TABLE_STATS('USERNAME','TABLENAME',null,100,TRUE,'FOR ALL COLUMNS SIZE AUTO');

 

但實測發現,前兩種方式都沒有生效,DBMS_STATS.GATHER_XX 執行成功后貌似還要等N分鍾后,才能真正生效,不清楚DM內部是什么操作邏輯。

 

根據DM文檔和網上資料看,貌似可以創建計划任務作業定時進行統計信息的更新收集。

 

參考資料:
http://blog.itpub.net/69949798/viewspace-2661599/
https://blog.csdn.net/weixin_42845771/article/details/104772553

 

 

DBMS_STATS包 :收集統計信息,刪除統計信息

 

1、table_stats_show 獲取表的統計信息。

 

2、column_stats_show 獲取列的統計信息,返回列的統計信息,另一個時直方圖的統計信息。

 

3、index_stats_show 獲取索引的統計信息。

 

GATHER_TABLE_STATS 收集表,表中的列,索引的統計信息

 

GATHER_INDEX_STATS 收集索引的統計信息。

 

GATHER_SCHEMA_STATS 收集模式下的對象統計信息。

 

DLETE_TABLE_STATS 刪除表相關的統計信息。

 

DELETE_INDEX_STATS 刪除索引的統計信息。

 

DELETE_COLUMN_STATS 刪除列的統計信息。

 

那些對象不支持統計信息:

 

1、外部表、DBLINK遠程表 、動態視圖表、臨時表。

 

2、所在表空間為OFFLINE的對象。

 

3、位圖索引、全文索引

 

4、數據類型:blob image clob text… 也不支持 自定義類型和空間類型也不支持。

 

    dbms_stats.gather_schema_stats('USERNAME',100,TRUE,'FOR ALL INDEXED COLUMNS SIZE AUTO');

 

    dbms_stats.gather_table_stats(ownname => 'USERNAME',tabname => 'TABLENAME',estimate_percent => 100 ,method_opt => 'for all columns SIZE AUTO' ,cascade => true);

 

    dbms_stats.index_stats_show ('GSCLOUD2003' , 'IDX_FSBZDJ_BXR');

 

    dbms_stats.column_stats_show ('GSCLOUD2003', 'FSBZDJ' , 'FSBZDJ_BXR');

 

    dbms_stats.column_stats_show ('GSCLOUD2003', 'FSBZDJ' , 'FSBZDJ_USERID');

 

查看執行計划

 

explain for select * from t1 where id=1;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM