深入优化db2 数据库的五个最佳实践
结构化查询语言(sql)对于关系型dbms是把双刃剑,利弊参半。因为从关系型数据库检索任何数据都需要sql,本文所要探讨的话题就是:不论是终端用户还是开发人员或是数据库管理员(dba),他们将如何访问一个关系型数据库。当使用高效的sql时,系统会变得易于升级、灵活、而且便于管理。当使用低效的sql时,响应时间和程序运行时间都会延长,并且还会产生应用系统的中断。鉴于通常的数据库系统一般要花费90%的处理时间用于从数据库检索数据,由此很明显的可以看出尽可能的保证sql的高效是多么的重要。考察通常的sql语句问题譬如select*from仅是冰山一角,我们将在本文中探讨其他容易确定的普遍的问题。需要记住的是,检索得到同一数据的sql语句有很多种殊途同归的写法,所以不存在好的查询语句或是坏的查询语句,而只有满足适当需求的查询语句。各关系型数据库都有自己的方式来优化和执行查询语句。因此,各dbms都拥有自己的最佳性能的查询技巧。本文将使用quest软件中questcentralfordb2的例子和概述来集中讨论db2foros/390和z/0s。
要是在十七年前,这张技巧单会更长,并且会包含对最小化的select场景的矫正方法。每一个新版本的db2都会增加成千上万行的新代码,用以扩展智能优化,和查询重写及执行。例如,多年来一种被称为数据管理器的组件,通常被提供作为第一阶段处理以增加它的过滤容量一百倍。另一组件是关系型数据服务器,通常被提供作为第二阶段处理来进行其主函数的查询重写和优化。另一关键组件就是基于当前的sql,并使用存取路径以决定检索数据的db2优化器。db2优化器改善了每一个db2的版本,考虑到另外的db2目录中的统计,可以提供新的和改善过的存取路径。图1显示了这些组件及其他更多的部分,并描述了db2如何处理数据或sql的请求。这就是以下db2sql性能技巧的来源。
在这篇文章中,我们将回顾一些更具有代表性的sql问题,有更多的sql方面的性能技巧超出了本篇文章描述的范围。像所有指导方针一样,所有这些技巧也会有一些例外。
技巧1:核实是否提供了适当的统计:
对于db2优化器来说,最重要的资源除了select语句本身,就是db2目录中创建的统计。优化器基于众多的选择而使用这些统计。db2优化器为了查询而选择一条非最佳存取路径的主要原因,归结于无效的或缺失的统计。db2优化器使用以下目录统计:
经常的执行runstats命令,用来更新db2的目录统计,这样可以在特别繁忙的生产环境里中得到全貌。为了使执行runstats命令的影响最小化,可以考虑使用采样技术。即使取样10%也够了。另外runstats命令可以更新统计,db2给您可以额外更新1,000个条目的能力,以用于不均匀的分类统计。当心随着每一条目随着增量的增加,而涉及到对所有参考的绑定时间的影响。
假如当您缺少统计的时候您怎么知道呢?当目录或使用工具不能提供这种功能的时候,您可以通过手工执行查询。当前,db2优化器不能给缺失的统计提供具体的警告。
技巧2:尽可能的采用阶段1和阶段2的谓词:
不论是阶段1的数据管理器还是阶段2的关系型数据服务器都将处理每一次查询。当您处理查询时,使用阶段1将会比使用阶段2有着巨大的性能优势。当谓词确定阶段1能够处理的时候,通常谓词会限制您只能使用阶段1查询。另外,每一个谓词都会被检验评估是否比另一个谓词更有资袼作为索引路径。有一些谓词不能作为阶段1来处理,或是不符合索引的条件。关于您的查询是否可以被索引并且能够在阶段1被处理,理解这一点是很重要的。下面是文挡化的阶段1或sargable(search+argument-able谓词是一个可以由数据管理器来值的谓词)谓词:
还有一些谓词不能看作阶段1被文档化,因为他们不能总处于阶段1。加入表序列和查询重写也能够影响谓词被过滤掉的阶段。让我们通过例子查询来显示重写您的sql的影响。
例子1:col1和col1之间的值:
任何类型的谓词如不能被阶段1识别,就是阶段2。如下所示就是阶段2谓词。然而,重写可能促进对可索引阶段1的查询:value>=col1andvalue:value
getnextresultrow
技巧5:使用常量和字面值,如果值在以后的3年中不改变(对于静态查询):
db2优化器对所有不均匀的分类统计都充分的使用,并为任何一个列统计提供了不同领域范围内的值,尤其当没有主机变量在谓词中被发现时,(wherecol5>'x')。主机变量的目的是使一个事务能适应一个可变化的变量;当一个用户请求输入这个值的时候是最经常被使用的。主机变量不需要重新绑定一个程序,当这个变量每一次改变的时候。这种可延伸性能得到优化器准确的耗费。当主机变量刚被发现,(wherecol5>:hv5),优化器使用以下的图表来评估过滤器要素,而不是使用目录统计。
列的基数性越高,则谓词的过滤器要素就越低(保留部分行的预测)。多数时候,这种评估有助于优化器对适当存取路径的选取。然而,有时谓词的过滤器要素远离实际。这就是通常需要对存取路径进行调优的时候。
解决方案
questcentralfordb2是一个集成的控制台,可以提供核心功能,dba(数据库管理员)需要执行他们日常的数据库管理任务,空间管理,sql调优和分析,并且可以进行性能诊断监视。questcentralfordb2是由db2软件专家撰写的,并且提供具丰富的功能,以利于视图化的用户界面,并且支持在unix,linux,和windows主机上运行db2数据库。db2的客户不再被要求用独立的工具维护和使用他们的主机和分布式的db2系统。
questcentral的sql调优组件提供一个完整的sql调优环境。questcentral是唯一可以提供完整的sql调优环境的针对db2可用的产品。这个环境包括以下部分:
1.调优实验室:通过场景的使用,一个单独的sql语句能够被改进很多次。然后这些场景能够立刻被比较以确定哪个sql语句提供了最有效率的存取路径。
2.比较:您立刻可以看出对于sql语句修改的性能改变效果。由于比较多个场景,您能看到对cpu的效果,消耗的时间,i/o和其他更多的统计。另外数据的比较将保证您的sql语句返回相同的数据子集。
3.建议:由sql调优组件提供的建议,将会发现所有的在白皮书指定的条件等等。另外,如果一个新场景可以利用,sql调优组件甚至将会重写sql,并综合选择的建议。
4.存取路径和对应的统计:在sql的上下文中,对于db2存取路径,所有适合的统计应被显示出来。采取推测以设法理解为什么选择一个特殊的存取计划。
questcentralfordb2健壮的功能显现了上述sql调优中的技巧以及更多。这篇白皮书剩余的部分将证明questcentral是由更丰富和更透彻的知识恰当的组成的。questcentral不仅可以提高您的sql语句效率,更可以帮助您全面的提升数据库的性能。上面描述的各种调优技巧都被questcentral所包括。
解决的技巧1:核实特定提供的统计:
一旦一条sql语句在questcentral中被描述,建议栏会提供一整套建议,包括当没有runstats时也可以发现的能力。questcentral一直以坚定的决心来探究这类建议。每一条建议都有相对应的建议操作。这种建议操作会指导如何矫正建议发现的问题。这将会打开一个新的场景由被重写的sql或以促进对象分析的脚本组成。在这个例子中,建议显示,统计的缺失和相对应的建议操作将建立一个脚本,它包含runstats命令,为了在建议操作的窗口中选择任何一个对象。
并且能够生成必要的命令对所有选择对象的统计进行更新。
另外,questcentralspace的管理能够自动的收集、维护和检验在表空间里的统计及表和索引等级。以下的例子显示了在数据库里所有表空间里的统计检验报告。
解决的技巧2:尽可能的提升阶段2和阶段1的谓词:
sql的调优组件将列出所有的谓词并指出那些谓词是否是sargable或non-sargable。另外,各个谓词都将被检查,以确定它是否具有索引存取的资袼。这种单独的建议可以解决响应时间的问题和在谓词重写的期间内得到某些成果。在下面的例子中,一条查询被看作non-sargable和non-indexable(阶段2)。这条最初的查询被输入在一个谓词间。一个新场景被打开了并且谓词被重写使用大于,小于符号。这种比较确定了查询重写对性能方面的影响。
一个新场景被创建并且查询被重写在列值中使用a>=和a<=。注意,谓词现在是可索引的和sargable。记住以上的信息,谓词现在将由数据管理器(阶段1)处理,以减少这次查询的潜在响应时间。
随后可以使用比较工具来比较他们和之间的性能,会发现更有效的减少消耗的时间。
解决的技巧3:选择唯一需要的列:
sql调优的特点不仅是相对于使用select*的建议,更提供一个事半功倍的可以令产品自动重写sql的特点。建议和相对应的建议操作将提供重写您sql的能力,简单地检查想要的列并选择applyadvice按钮,sql调优将用被选择的列替换*。
解决的技巧4:选择唯一需要的行:
越少的行被检索,查询将运行的越快。使用questcentral能比较您最初的sql相对于选择较少行但相同的sql语句。使用多个场景和利用比较特点,比较那些立刻显示发生变化的性能影响的场景。在以下例子中,两张表单的加入,产生了一个有意义的结果集。由于加入了fetchfirst1rowonly'执行时间显著的减少了。
解决的技巧5:使用常量和字面值,如果值在以后的3年中不改变(对于静态查询):
在这个例子中,让我们进行一个基于win2k平台的db2测试。当使用主机变量时,db2优化器无法预测谓词过滤的值。没有这个值,db2将默认并使用上面列出的默认的过滤器要素。questcentralsql调优将一直显示过滤器要素用以帮助了解有多少列将被过滤。
VM700T,CMD60,CMU200,HP8922M,HP
分析2022年将有50%的智能手机搭配OLED屏幕
高通:向消费电子厂商转型
环境光传感器原理及在汽车中的应用
经纬恒润整车在环测试实验室发布新技术特性
深入优化DB2 数据库的五个最佳实践
5年期限将至 华为可能真正超越苹果吗?
OPPOR11什么时候上市?OPPOR11最新消息:前后2000万很惊艳?性能、配置翻倍,OPPOR11还有其他杀手锏?
数字后端G cell概念介绍
分布式系统的未来:可视化控制成主流
特别提醒蓝牙语音智能药盒的设计思路(一)
关于5G测试的应用共同推动5G未来商用的发展
SI24R2H无线收发单芯片概述、主要特性及应用范围
六大led芯片厂商及主流led芯片产品分析
国内LED芯片厂商首当其冲,投入研发寻求突破
4平方铜绞线 0.05单丝软铜绞线供应
预计到2025年超75%的数据边缘侧处理为边缘计算产业带来发展机遇
C8051F005在高速误码测试系统中的运用
SST开发迷你型系列氧化锆传感器
三星研发OLED“弹性显示屏” 预计明年上半年发布