维护产生价值:只需加以注意即可降低数据库成本的五种方法
2010-09-16 00:00:00 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閹冣挃闁硅櫕鎹囬垾鏃堝礃椤忎礁浜鹃柨婵嗙凹缁ㄧ粯銇勯幒瀣仾闁靛洤瀚伴獮鍥敍濮f寧鎹囬弻鐔哥瑹閸喖顬堝銈庡亝缁挸鐣烽崡鐐嶆棃鍩€椤掑嫮宓佸┑鐘插绾句粙鏌涚仦鎹愬闁逞屽墰閹虫捇锝炲┑瀣╅柍杞拌兌閻ゅ懐绱撴担鍓插剱妞ゆ垶鐟╁畷銉р偓锝庡枟閻撴洘銇勯幇闈涗簼缂佽埖姘ㄧ槐鎾诲礃閳哄倻顦板┑顔硷工椤嘲鐣烽幒鎴旀瀻闁规惌鍘借ⅵ濠电姷鏁告慨顓㈠磻閹剧粯鈷戞い鎺嗗亾缂佸鏁婚獮鍡涙倷閸濆嫮顔愬┑鐑囩秵閸撴瑦淇婇懖鈺冪<闁归偊鍙庡▓婊堟煛鐏炵硶鍋撻幇浣告倯闁硅偐琛ラ埀顒冨皺閺佹牕鈹戦悙鏉戠仸闁圭ǹ鎽滅划鏃堟偨缁嬭锕傛煕閺囥劌鐏犻柛鎰ㄥ亾婵$偑鍊栭崝锕€顭块埀顒佺箾瀹€濠侀偗婵﹨娅g槐鎺懳熺拠鑼舵暱闂備胶枪濞寸兘寮拠宸殨濠电姵纰嶉弲鎻掝熆鐠虹尨宸ョ€规挸妫濆铏圭磼濡搫顫嶇紓浣风劍閹稿啿鐣烽幋锕€绠婚悹鍥у级瀹撳秴顪冮妶鍡樺鞍缂佸鍨剁粋宥夋倷椤掍礁寮垮┑鈽嗗灣閸樠勭妤e啯鍊垫慨妯煎亾鐎氾拷

由任意数量的程序添加到 RID 池中的 RID 越多,出现失效的概率就越大,RID 池失效会导致表扫描。RID 池失效的现象之一是连续预抓取数量出现意外的高峰。跟踪连续预抓取数量是查明失效的一种方法。更好的方法是使用在线监视器。图 4 给出在线监视器监视一个使用 Hybrid Join - Type N 的程序在一小时内得到的数据,它发现了 61 次 RID 池失效。
图 4. 一个使用 Hybrid Join - Type N 访问路径的程序在中午 12 点到下午 1 点之间出现了 61 次 RID 池失效
查看原图(大图)
对这个问题的一个解决方案是增加 RID 池的大小,但是这只能暂时减少失效;更糟糕的是,这可能根本无效。更好的解决方案是使用 DB2 跟踪或在线监视器查明高度依赖于 RID 池的查询。每个查询需要通过一直抓取到整个结果集的末尾来证明它对 RID 池的使用是适当的。无法通过这项测试的任何查询都需要关闭使用 RID 池的访问路径,方法是在查询的末尾添加 OPTIMIZE FOR n ROWS 或 FETCH FIRST n ROWS ONLY 子句。DB2 10 将利用外部工作文件处理溢出,从而减轻失效的影响,因此不再需要分析查询。但是,最好在迁移到 DB2 10 之前找出并解决这种问题,否则会使用大量工作文件。
4. 压制冻结的或性能差的 SQL
冻结的 SQL 就是嵌入在购买的应用程序中您无法修改的 SQL。冻结的 SQL 中的查询有时候不符合性能规则,但是您只能忍受它们。需要让这些查询使用尽可能少的资源。例如,WHERE DATE(col_TS) BETWEEN :date1 AND :date2 是一个 Stage 2/Residual 条件。这个谓词应该改写为 WHERE col_TS BETWEEN TIMESTAMP(:date1, '00:00:00')AND TIMESTAMP(:date2, '59:59:99'),这是可以使用索引的 Stage 1/Sargable。但是,您无法做修改。
更多精彩
赞助商链接