1 数据库性能的优化
一个数据库系统的生命周期可以分成:设计、 开发和成品三个阶段.在设计阶段进行数据库性 能优化的成本最低,收益最大.在成品阶段进行数 据库性能优化的成本最高,收益最小.数据库的优 化通常可以通过对网络、硬件、操作系统、数据库 参数和应用程序的优化来进行.最常见的优化手 段就是对硬件的升级.根据统计,对网络、硬件、操 作系统、数据库参数进行优化所获得的性能提升, 全部加起来只占数据库系统性能提升的40%左 右,其余的60%系统性能提升来自对应用程序的 优化.许多优化专家认为,对应用程序的优化可以 得到80%的系统性能的提升.
2 应用程序的优化
应用程序的优化通常可分为两个方面:源代 码和SQL语句.由于涉及到对程序逻辑的改变, 源代码的优化在时间成本和风险上代价很高,而 对数据库系统性能的提升收效有限.
2.1为什么要优化SQL语句
第一,SOL语句是对数据库进行操作的惟一 途径,对数据库系统的性能起着决定性的作用.
第二,SQL语句消耗了70%至90%的数据库 资源.
第三,SQL语句独立于程序设计逻辑,对SQL 语句进行优化不会影响程序逻辑.
第四,SQL语句有不同的写法,在性能上的差 异非常大.
第五,第五。SQL语句易学,但难精通.
优化SQL语句的传统方法是通过手工重写 来对SQL语句进行优化.DBA或资深程序员通过 对SQL语句执行计划的分析,依靠经验,尝试重 写SQL语句,然后对结果和性能进行比较,以试 图到性能较佳的SQL语句.这种传统上的作法 无法出SQL语句的所有可能写法,且依赖于人 的经验,非常耗费时间.
2.2 SQL优化技术的发展历程
第一代SQL优化工具是执行计划分析工具. 这类工具针对输入的SQL语句,从数据库提取执 行计划,并解释执行计划中关键字的含义.
第二代SQL优化工具只能提供增加索引的 建议,它通过对输入的SQL语句的执行计划的分
析,来产生是否要增加索引的建议.
第三代SOL优化工具不仅分析输入SQL语 句的执行计划,还对输入的SQL语句本身进行语法分析,经过分析产生写法上的改进建议.
人工智能自动SQL优化出现 在90年代末.目前在商用数据库领域,LECCO Technology Limited(灵高科研有限公司)拥有该技 术,并提供使用该技术的自动优化产品LECCO SQL Expert,它支持Oracle、Sybase、MS SQL Server 和IBM DB2数据库平台.该产品针对数据库应用 的开发和维护阶段提供的模块有:SQL语法优化 器、PL/SQL集成化开发调试环境(IDE)、扫描器、 数据库监视器等.其核心模块SQL语法优化器的 工作原理为:
(1)输入一条源SQL语句;
(2)“人工智能反馈式搜索引擎”对输入的SQL语句,结 合检测到的数据库结构和索引进行重写,产生N 条等效的SQL语句输出;
(3)产生的N条等效 SQL语句再送人“人工智能反馈式搜索引擎”进 行重写,直至无法产生新的输出或搜索限额满;
(4)对输出的SQL语句进行过滤,选出具有不同 执行计划的SQL语句;
(5)对得到的SQL语句进 行批量测试,出性能最好的SQL语句.
3 LECCO SQL Expert自动优化实例
(1)假设我们从源代码中抽取出这条SQL语 句(也可以通过内带的扫描器或监视器获得SQL 语句):
SELECT COUNT(*) FROM EMPLOYEE swheresEXISTS(SELECT‘X’ FROM DEPARTMENT
swheresEMP_DEPT=DPIr_ID AND DPT_NAME LIKE‘AC%’) AND EMP_ID IN(SELECT SAL_EMP_ID FROM EMP_SAL_HIST B swheresSAL_SAIARY>70000)
按下“优化”按钮后,经过十几秒,SQL Expert 就完成了优化的过程,并在这十几秒的时间里重 写产生了2267条等价的SQL语句,其中136条 SQL语句有不同的执行计划. 接下来,我们可以对自动重写产生的136条 SQL语句进行批运行测试,以选出性能最佳的等 效SQL语句
.按下“批运行”按钮,在“终止条件” 页选择“最佳运行时间SQL语句”,按“确定”. 经过几分钟的测试运行后,我们可以发现 SQLl24的运行时间和反应时间最短.运行速度约 有22.75倍的提升(源SQL语句运行时间为 2.73 8,SQLl24运行时间为0.12 s).现在我们就 可以把SQLl24放入、源代码中,结束一条SQL语 句的优化工作了.
(2)“边做边学式训练”提升SQL开发水平.
LECCO SQL Expert不仅能够到最佳的 SQL语句,它所提供的“边做边学式训练”还能够 教开发人员和数据库管理员如何写出性能最好的 SQL语句.LECCO SQL Expert的“SQL比较器”可 以标明源SQL和待选SQL间的不同之处.
以上面优化的结果为例,为了查看源SQL语 句和SQLl24在写法上有什么不同,我们可以按 下“比较器”按钮,对SQLl24和源SQL语句进行 比较.“SQL比较器”将SQLl24相对于源SQL语 句的不同之处以蓝颜表示了出来.如果选择 “双向比较”复选框,“SQL比较器”可以将两条 SQL语句的不同之处以蓝表示.当然,我们也可 以从源语句和重写后的SQL语句中任选两条进 行比较.
从比较的结果可以看到,重写后的SQLl24 把第一个Exist3改写成了In;在字段DPT_ID上进行了合并空字符串的操作,以诱导数据库先执 行子查询中的db2数据库sql语句
(SELECT DPILIDII” FROM DEPARTMENT WHERE DPT_NAME LIKE‘AC%’)
在子查询完成后,再与EMPLOYEE表进行嵌 套循环连接(Nested Loop Join).
如果觉得对写法的改变难以理解,还可以点 中“执行计划”复选框,通过比较两条SQL语句的 执行计划的不同,来了锵其中的差异.在查看执行 计划过程中,如果有什么不明白的地方,可以点中 “sQL信息按钮”,再点击执行计划看不明白的地 方,LECCO SQL Expert的上下文敏感帮助系统将 提供执行计划该处的解释.
在“SQL比较器”中,选中“统计信息”复选框 后,可得到详细的两条SQL语句运行时的统计信 息比较,这对于学习不同的SQL写法对数据库资 源的消耗很有帮助.
(3)LECCO SQL Expert优化模块的特点.
LECCO SQL Expert优化模块的特点主要表 现为:自动优化SQL语句;以独家的人工智能知
识库“反馈式搜索引擎”来重写性能优异的SQL 语句;出所有等效的SQL语句及可能的执行计 划;保证产生相同的结果;先进的SQL语法分析 器能处理最复杂的SQL语句;可以重写SELECT、 SELECT INTO、UPDATE、INSERT和DELETE语 句;通过测试运行,为应用程序和数据库自动到 性能最好的SQL语句;提供微秒级的计时,能够优化Web应用程序和有大量用户的在线事务处 理中运行时间很短的SQL语句;为开发人员提供 “边做边学式训练”,迅速提高开发人员的SQL编 程技能;提供上下文敏感的执行计划帮助系统和 SQL运行状态帮助;不是猜测或建议,而是独一无 二的SQL重写解决方案.
(4)写出专家级的SQL语句.
LECCO SQL Expert的出现,使SQL的优化变 得极其简单,只要能够写出SQL语句,它就能帮 用户到最好性能的写法.LECCO SQL Expert不 仅能在很短的时间内到所有可能的优化方案, 而且能够通过实际测试,确定最有效的优化方案. 同以往的数据库优化手段相比较,LECCO SQL Expert将数据库优化技术带到了一个崭新的技术 高度,依赖人的经验、耗费大量时间、受人的思维 束缚的数据库优化手段已经被高效、省时且准确 的自动优化软件所取代了.通过内建的“LECCO 小助手”的帮助,即使是SQL的开发新手,也能快 速且简单地写出专家级的SQL语句.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论