一、什麼是統計資訊
統計資訊主要是描述資料庫中表、索引的大小、規模、資料分布狀況等的一類資訊。比如,表的行數、塊數、平均每行的大小、索引的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 ...