達夢資料庫 SQL指令碼 並行收集統計資訊

2021-10-12 17:06:36 字數 1082 閱讀 1839

在遇到一些表資料較大、分割槽表數量較多的大系統時,收集統計資訊一直是前期工作的乙個小麻煩,因為經常直接執行 dbms_stats.gather_schema_stats('使用者名稱',100,true,'for all columns size auto') 收集乙個模式的統計資訊時,乙個晚上無法收集完,甚至需要好幾天時間。

另外,以上sql只能使用乙個cpu,在夜晚進行統計時資料庫一般處於較閒的狀態,沒法利用cpu資源。所以我們可以採用多會話的方式來收集。

--登入sysdba使用者

--建立統計資訊記錄表

create table my_tab_stats(table_name varchar2(100),stat_flag varchar2(5));

--初始化統計資訊記錄表,如目標是使用者dmhr下的所有表

insert into my_tab_stats(table_name) select table_name from dba_tables where owner = 'dmhr';

update my_tab_stats set stat_flag = 0;

commit;

--收集統計資訊

begin

for tb in (select rowid,table_name from my_tab_stats where rowid<=1000) loop

dbms_stats.gather_table_stats('fmis0100',tb.table_name,null,100,true,'for all columns size auto');

update my_tab_stats set stat_flag = 1 where table_name = tb.table_name;

commit;

end loop;

end;

用rowid可以使用者將表分成多個區間進行收集。比如有20000張表需要收集,分成1~5000、5001~10000、10001~15000和15001~20000來收集的話,就能利用到4個cpu,提高收集統計資訊的效率。如果發生報錯而中斷的情況,能根據表中的stat_flag列來檢查進度,以便於下次繼續收集。

達夢資料庫常用SQL

達夢資料庫建立表 create table test table scid varchar2 10 primary key,scname varchar2 20 scsm number 6 scprice number 4,2 當前使用者 達夢資料庫 獲取當前使用者擁有的表 select table...

達夢資料庫和mysql索引引擎 達夢資料庫 索引

1.索引的種類和功能 聚集索引 每乙個普通表有且只有乙個聚集索引 唯一索引 索引資料根據索引鍵唯一 函式索引 包含函式 表示式的預先計算的值 位圖索引 對低基數的列建立位圖索引 位圖連線索引 針對兩個或者多個表連線的點陣圖索引,主要用於資料倉儲中 全文索引 在表的文字列上而建的索引。2.何時使用索引...

達夢資料庫操作

1.安裝 dminstall.bin i接下來是一些設定,比如 語言 key檔案的位置 時區 安裝型別 安裝目錄 略過 2.初始化 進入你剛才設定的安裝目錄的bin目錄下執行 dminit這是我自己的設定 input system dir home dmdba dmdata input db nam...