电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

DB2數據庫更新執行計劃的幾個常見的方法

瀏覽:5日期:2023-11-09 14:27:32
和Oracle數據庫一樣,DB2數據庫里面也是通過優化器來分析你的SQL,生成它認為最優的執行計劃(Access Plan)。DB2的優化器實際上是一個標準規則集合,一般來說我們只要告訴DB2要檢索什么,而不是如何檢索。

那么DB2的優化器是根據什么來判斷SQL的最優存取路徑呢?

DB2的優化器是基于成本的優化器,也就是CBO(Cost Based Optmizer)。也就是說DB2 優化器會應用查詢成本公式,該公式對每條可能的存取路徑的四個因素進行評估和權衡:CPU 成本、I/O 成本、DB2 系統目錄中的統計信息和實際的 SQL 語句。

那么我們來簡單看一下DB2的優化器的工作流程:

1. DB2的優化器,在接收到SQL語句后,會首先校驗SQL的語法,確保是正確的SQL;

2. 根據當前的系統環境信息,生成最優的執行計劃來優化SQL語句;

3. 把SQL翻譯成計算機指令語言,并執行這個優化后的SQL;

4. 返回結果,或者存儲它們,以便將來的執行。

在我們看來,DB2 系統目錄中統計信息是讓DB2優化器正確工作的一個非常重要的依據。這些統計信息向優化器提供了與正在被優化的 SQL 語句將要訪問的表狀態相關的信息。這些信息主要包括:

Table--包括表的記錄數、PAGE、PCTFREE以及COMPRESS等信息,相關的系統視圖是:sysstat.tables、syscat.tables。

Columns—包括COLUMNS的數量、長度、分布特征以及COMPRESS等信息,相關的系統視圖是:sysstat.columns、syscat. columns。

Index--包括是否存在索引、索引的組織(葉子頁的數量和級別的數量)、索引鍵的離散值的數量以及是否群集索引, 相關的系統視圖是:sysstat.indexes、syscat. indexes。

其他的還有分區/節點組信息和表空間的信息,如何及時更新這些信息呢?保證DB2優化器正確的工作,在DB2里面提供了以下的辦法。

RUNSTATS與REOGCHK

Runstats這個命令的功能主要就是收集數據庫對象的狀態信息,這對數據庫使用合理的ACCESS PLAN是至關重要的。一般來說,以下幾種情況下面,我們需要用runstats來收集統計信息:

1. 在給表創建一個index后,我們最好做一次runstat。這個情況也是大家經常忽略的。很多時候大家在給表增加了一個index后,分析執行計劃,發現沒有變化,覺得很奇怪。其實這個時候,你需要做一次runstats,就可以了。在8.2里面,DB2做了很好的改進,可以避免這個問題,在創建index的時候,可以立即更新你的信息。

2. 在對table做了一次reorg后,記得要做一次runstats。因為對表做reorg,會修改表的很多信息,比如高水位等,所以做一次runstats,可以更新統計信息。

3. 當你的表里面的數據發生了比較大的變化,一般來說,大約表里面的數據量的10%-20%發生了變化,就應該作一次runstats。這些變化包括刪除,修改,插入。對于一些非常大的表,比方在數據倉庫的項目里面,某些事實表非常巨大。這個時候,完整的對一個大表作runstats可能花費時間相當大,DB2 8.1里面支持我們對這些大表作抽樣,比方說只對20%的數據作runstats,這樣的話,一般來說也能保證得到正確的執行計劃。當然首先要確保這個表里面的數據最好分布比較均勻。

4. 當你在分區(DPF)數據庫里面使用了REDISTRIBUTE DATABASE PARTITION GROUP這個命令,那么就需要用runstats來收集新的統計信息。

RUNSTATS命令的語法如下:

如果表名為DB2INST1.STAFF,表上有索引,則可以用下面的例子完成RUNSTATS命令:

db2 runstats on table db2inst1.staff with distribution and detailed indexes all

在實際的項目里面,對于變化比較大的表,需要我們定時對數據庫做runstats,一般來說runstats和reorg可以結合起來做,首先對表作reorg,然后做runstats,最后REBIND數據庫根據最新的統計信息生成合適的統計計劃。

值得注意的是,如果我們要處理的表數據量是快速變化的,比如在電信移動行業,需要在月末進行處理的匯總表。在不長的時間范圍內數據量變化特別大,從而使得RUNSTATS 得到的統計信息不準確,原因是這些統計信息只是某個時間點的信息。您可以用這條語句來把表修改為volatile。

alter table table_name volatile cardinality

這樣優化器將考慮使用索引掃描而不是表掃描。無論統計信息如何,優化器將使用索引掃描而不是使用表掃描。

IBM的文檔里面還提供了REORGCHK這個命令,可以根據統計公式計算表是否需要重整。

比如可以分為對系統表和用戶表兩部分分別進行REORGCHK:

(1) 針對系統表進行REORGCHK:

db2 reorgchk update statistics on table system

(2) 針對用戶表進行REORGCHK:

db2 reorgchk update statistics on table user

需要注意的是,如果數據庫中數據量比較大,這些操作一般所需時間比較長,所以盡量安排在數據庫比較空閑的時候做。

db2 update db cfg using AUTO_MAINT off AUTO_TBL_MAINT off AUTO_RUNSTATS off

在DB2 8.2里面數據庫可以自動進行統計信息收集,不過這樣的動作還是會帶來額外的負載,一般情況下面可以關掉,只在我們需要的時候運行就可以了。

LOAD

Load這個工具是DB2里面一個非常強大的數據遷移工具。一般用作大批量的數據插入。因為Load操作不記日志,所以效率非常好。筆者曾經在RS6000平臺上面實現50-60m/s的速度Load數據。在這里我想討論的是在DB2數據庫里面如何用load來影響你的catalog視圖的統計信息。

在Load的時候使用statistics選項可以在裝入的過程中生成統計數據,這些統計數據可以供優化器確定最有效的執行sql語句的方式。

比如:

對表和索引產生最詳細的統計數據:

load from mobile_number.del of del replace into

mobile statistics yes with distribution and detailed indexes all

對表和索引都產生簡略的統計:

load from mobile_number.del of del replace into

mobile statistics yes and indexes all

需要值得注意的時候在DB2 8.2新版本里面,可以這樣做:

load from mobile_number.del of del replace into

mobile statistics use profile

DB2 LOOK

Db2look是DB2一個相當強大的一輔助工具,可以幫助我們從當前數據庫里面把數據庫結構抽取出來。在數據遷移的很多場合,我們都非常需要這個強大的工具。

在一些場合,特別是開發庫遷移到生產庫,生產庫遷移到開發庫的環境中,為了保證SQL執行計劃的一致,我們需要用db2look這個工具,利用 db2look 工具提供的抽取數據庫對象統計信息的功能,把數據庫的統計信息進行遷移。

比如:

1) 在用戶環境下提取統計信息:

db2 runstats on table <用戶表模式名>.<表名>

db2look -d <用戶數據庫名> -t <表名> -m -o statis.sql

輸出文件中是對用戶的 DB2 系統編目表中與該表統計信息相關的各字段值的 UPDATE 語句。

db2 -svtf statis.sql

2) 利用用戶提供的統計信息更新測試環境下測試表的統計信息。

總結

本文對DB2里面更新執行計劃的幾個常見的方法,做了一些拋磚引玉的說明。實際工作中的環境,是千差萬別的,會有很多的不同。需要強調的是,在DB2數據庫里面,基于成本的優化器決定著SQL的執行效率。而正確、及時地收集數據庫的統計信息對于讓優化器生成正確的執行計劃是至關重要的。

標簽: DB2 數據庫
主站蜘蛛池模板: 生态板-实木生态板-生态板厂家-源木原作生态板品牌-深圳市方舟木业有限公司 | 精密模具制造,注塑加工,吹塑和吹瓶加工,EPS泡沫包装生产 - 济南兴田塑胶有限公司 | 盐水蒸发器,水洗盐设备,冷凝结晶切片机,转鼓切片机,絮凝剂加药系统-无锡瑞司恩机械有限公司 | 莱州网络公司|莱州网站建设|莱州网站优化|莱州阿里巴巴-莱州唯佳网络科技有限公司 | 涡街流量计_LUGB智能管道式高温防爆蒸汽温压补偿计量表-江苏凯铭仪表有限公司 | 石英砂矿石色选机_履带辣椒色选机_X光异物检测机-合肥幼狮光电科技 | 广州工业氧气-工业氩气-工业氮气-二氧化碳-广州市番禺区得力气体经营部 | 风电变桨伺服驱动器-风电偏航变桨系统-深圳众城卓越科技有限公司 | 阳光模拟试验箱_高低温试验箱_高低温冲击试验箱_快速温变试验箱|东莞市赛思检测设备有限公司 | 迪威娱乐|迪威娱乐客服|18183620002 | 郑州宣传片拍摄-TVC广告片拍摄-微电影短视频制作-河南优柿文化传媒有限公司 | 物联网卡_物联网卡购买平台_移动物联网卡办理_移动联通电信流量卡通信模组采购平台? | 电伴热系统施工_仪表电伴热保温箱厂家_沃安电伴热管缆工业技术(济南)有限公司 | 一体化净水器_一体化净水设备_一体化水处理设备-江苏旭浩鑫环保科技有限公司 | 高压贴片电容|贴片安规电容|三端滤波器|风华电容代理南京南山 | 通信天线厂家_室分八木天线_对数周期天线_天线加工厂_林创天线源头厂家 | 山东太阳能路灯厂家-庭院灯生产厂家-济南晟启灯饰有限公司 | 鲁尔圆锥接头多功能测试仪-留置针测试仪-上海威夏环保科技有限公司 | 汽车润滑油厂家-机油/润滑油代理-高性能机油-领驰慧润滑科技(河北)有限公司 | 自动售货机_无人售货机_专业的自动售货机运营商_免费投放售货机-广州富宏主官网 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | 医疗仪器模块 健康一体机 多参数监护仪 智慧医疗仪器方案定制 血氧监护 心电监护 -朗锐慧康 | 上海洗地机-洗地机厂家-全自动洗地机-手推式洗地机-上海滢皓洗地机 | 超声波焊接机_超音波熔接机_超声波塑焊机十大品牌_塑料超声波焊接设备厂家 | 中药二氧化硫测定仪,食品二氧化硫测定仪|俊腾百科 | 千淘酒店差旅平台-中国第一家针对TMC行业的酒店资源供应平台 | cnc精密加工_数控机械加工_非标平键定制生产厂家_扬州沃佳机械有限公司 | app开发|app开发公司|小程序开发|物联网开发||北京网站制作|--前潮网络 | 青岛侦探调查_青岛侦探事务所_青岛调查事务所_青岛婚外情取证-青岛狄仁杰国际侦探公司 | 冷热冲击试验箱_温度冲击试验箱价格_冷热冲击箱排名_林频厂家 | 闭端端子|弹簧螺式接线头|防水接线头|插线式接线头|端子台|电源线扣+护线套|印刷电路板型端子台|金笔电子代理商-上海拓胜电气有限公司 | 团建-拓展-拓展培训-拓展训练-户外拓展训练基地[无锡劲途] | 奶茶加盟,奶茶加盟店连锁品牌-甜啦啦官网| 烘箱-工业烘箱-工业电炉-实验室干燥箱 - 苏州华洁烘箱制造有限公司 | 连续密炼机_双转子连续密炼机_连续式密炼机-南京永睿机械制造有限公司 | 玉米深加工设备|玉米加工机械|玉米加工设备|玉米深加工机械-河南成立粮油机械有限公司 | 学校用栓剂模,玻璃瓶轧盖钳,小型安瓿熔封机,实验室安瓿熔封机-长沙中亚制药设备有限公司 | 电镀标牌_电铸标牌_金属标贴_不锈钢标牌厂家_深圳市宝利丰精密科技有限公司 | 济南展厅设计施工_数字化展厅策划设计施工公司_山东锐尚文化传播有限公司 | 北京网站建设-企业网站建设-建站公司-做网站-北京良言多米网络公司 | 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 |