DM7統計資訊

2021-10-25 08:41:54 字數 3166 閱讀 8586

一、什麼是統計資訊

統計資訊主要是描述資料庫中表、索引的大小、規模、資料分布狀況等的一類資訊。比如,表的行數、塊數、平均每行的大小、索引的leaf blocks、索引欄位的行數、不同值的大小等,都屬於統計資訊。cbo正是根據這些統計資訊資料,計算出不同訪問路徑、不同join 方式下,各種執行計畫的成本,最後選擇出成本最小的執行計畫執行查詢操作。

(cbo:cost-basedoptimization,基於代價的優化器;計算各種「可能」執行計畫的「代價」,即cost,從中選用cost最低的執行方案,作為實際執行方案。它依賴資料庫物件的統計資訊,統計資訊的準確與否會影響cbo做出最優的選擇。)

二、統計資訊的基本內容

統計資訊包含幾個重要的巨集觀資料:

無論做不做統計資訊收集,表的當前記錄數永遠是有效的,因為系統自動維護了表的記錄總數,這一點與大部分其他dbms系統有所差別。

另外,如果做了列級或者索引的收集,那麼統計資訊還包括下列資訊:

cbo依據這些資訊對選擇率和基數進行估算。

三、統計資訊的收集

dm7收集統計資訊有兩種方法:一是通過一些儲存過程來收集,二是用dbms_stats包來收集。

儲存過程,如:

對錶上所有的索引生成統計資訊:sp_tab_index_stat_init

對庫上所有模式下的所有使用者表上的所有索引生成統計資訊:sp_db_stat_init

對指定的索引生成統計資訊:sp_index_stat_init

對指定的列生成統計資訊,不支援大字段列:sp_col_stat_init

這裡推薦使用dbms_stats包來收集,有別於儲存過程,通過這個工具包收集可以指定採用率,在資料分布極不均勻的情況下,提高統計資訊的採用率,有助於提供更精確的統計資訊。

使用dbms_stats首先得呼叫乙個系統儲存過程來建立這個包:

sp_create_system_packages(1);

dbms_stats包裡面常用的儲存過程有:

1. column_stats_show

根據模式名,表名和列名獲得該列的統計資訊。

2. index_stats_show

根據模式名,索引名獲得該索引的統計資訊

3. gather_table_s tat s

根據設定的引數,收集表的統計資訊

4. gather_index_stats

根據設定的引數,收集索引的統計資訊

5. gather_schema_stats

收集模式下物件的統計資訊

舉例說明:

收集sysdba模式下物件的統計,取樣率為50%,對該模式下所有的列做統計資訊,大字段的列除外:

四、統計資訊的檢視

五、統計資訊對查詢的影響

刪除表上的統計資訊

在沒有統計資訊的情況下,檢視一下下列sql的執行計畫

explain select count(*) from test_tj where age = 20;

1   #nset2: [11, 1, 4]

2     #prjt2: [11, 1, 4]; exp_num(1),is_atom(false)

3       #aagr2: [11, 1, 4]; grp_num(0),sfun_num(1)

4         #slct2: [11, 2500, 4]; test_tj.age = 20

5          #cscn2: [11, 100000, 4];index33559695(test_tj)

--以age為條件字段,進行等值掃瞄,計畫評估出來的行數是2500

這個2500是怎麼來的呢?

如果沒有統計資訊可用,則對於列名= 《常量》的謂詞,選擇率固定為sel_rate_equ, 預設為2.5%,其他謂詞一律為sel_rate_single, 預設為5%。

那麼在這個例子中這個2500=100000*0.025;

我們再來看下面這個sql的計畫:

explainselect count(*) from test_tj where age > 20;

1   #nset2: [11, 1, 4]

2     #prjt2: [11, 1, 4]; exp_num(1),is_atom(false)

3       #aagr2: [11, 1, 4]; grp_num(0),sfun_num(1)

4         #slct2: [11, 5000, 4]; test_tj.age = 20

5          #cscn2: [11, 100000, 4];index33559695(test_tj)

這裡的5000=100000*0.05;

很顯然這個預設值代價的估算是非常粗糙的,特別是對於複雜的查詢,如果沒有統計資訊cbo很有可能選擇錯誤的執行計畫,我們收集一下這個表的統計資訊,再來對比一下執行計畫:

統計資訊對cbo選擇正確的執行計畫非常重要,我們需要掌握收集統計資訊的各種方法靈活運用。

dm7審計設定

審計設定 審計開關由 dm 的 ini 引數 enable audit 控制 0 關閉審計 1 開啟普通審計 2 開啟普通審計和實時審計 檢視審計的值 select from v parameter where name enable audit 設定enable audit為1 sp set pa...

DM7的體系結構

dm7的體系結構主要包括兩部分,可以簡單概括為例項和資料庫。例項則是由一塊共享記憶體和一系列後台執行緒構成,因為dm資料庫是單程序多執行緒的資料庫管理系統。而資料庫則是由許多資料檔案構成,主要包括配置檔案 控制檔案 資料檔案 日誌檔案以及歸檔檔案。我們可以通過例項去管理我們的資料庫。一般情況下,乙個...

dm7邏輯備份還原dexp dimp

表的匯出 匯入 dexp sysdba sysdba 127.0.0.1 2236 file cf.dmp log cf dexp.log directory d dmdbm data dameng5 bak dexp tables sysdba.cf,sysdba.cf q parallel 4 ...