服务器 频道

ITPUB版主盖国强:Oracle优化算法解析

  【IT168 现场报道】2013年4月18-20日,第四届中国数据库技术大会(DTCC 2013)在北京福朋喜来登酒店拉开序幕。在为期三天的会议中,大会将围绕大数据应用、数据架构、数据管理(数据治理)、传统数据库软件等技术领域展开深入探讨,并将邀请一批国内顶尖的技术专家来进行分享。本届大会将在保留数据库软件应用实践这一传统主题的基础上,向大数据、数据结构、数据治理与分析、商业智能等领域进行拓展,以满足于广大从业人士和行业用户的迫切需要。

ITPUB版主盖国强:Oracle优化算法解析
第四届中国数据库技术大会(DTCC 2013)

  自2010年以来,国内领先的IT专业网站IT168联合旗下ITPUB、ChinaUnix技术社区已经连续举办了三届数据库技术大会,每届大会超过千人规模,云集了国内技术水平最高的数据架构师、DBA、数据库开发工程师、研发总监、IT经理等,是目前国内最受欢迎的数据库技术盛会。下面进行演讲的嘉宾是ITPUB元老版主、云和恩墨创始人盖国强先生,他演讲的主题是“运用之妙 存乎一心 Oracle优化器案例与算法解析”.分享了在云架构、大数据风起云涌的时代,企业在数据架构变革中面对的问题,以及Oracle优化器案例与算法解析。

ITPUB版主盖国强:Oracle优化算法解析
▲ITPUB元老版主、云和恩墨创始人盖国强先生

  ITPUB元老版主盖国强简单介绍

  盖国强先生是云和恩墨信息技术有限公司的创始人,是国内第一个Oracle ACE及ACE总监,拥有超过10年的Oracle从业经验,至今仍然奋战在技术前线,是国内最大数据库技术论坛ITPUB的主要发起人之一,致力于技术分享与传播,截至2011年已经出版了10本技术书籍,自2010年开始,主编出版《Oracle DBA手记》系列书籍。在2010年,他和张乐奕共同创建了旨在开展技术交流的中国Oracle用户组(ACOUG - All China Oracle User Group),并开展了持续的公益活动。

  在演讲中,盖国强表示,数据库架构的演进就是一个合久必分的过程。很多企业都经历过这样一个过程,随着企业不断发展,数据不断积累时,首先做的是拆分数据表、分割数据库、采用分布式数据库、进行异构与迁移,就是互联网企业所谓的去IOE.从Oracle最近的技术演进来看,Exadata最核心的架构演进在于存储,Exadata将存储拆分成多台分布式存储,这些存储又能同时参与运算。同样,数据库架构的演进也是一个分久必合的过程。数据库面临合并整合,Oracle需要将其他数据库中的特性整合,以提升自身的性能,满足更多的需求。

ITPUB版主盖国强:Oracle优化算法解析

  性能问题是最近几年来DBA们越来越关注的一个数据库技术领域,归根结底,造成它的原因是最近几年信息化进程的飞速发展,导致了很多系统的用户数量猛增,数据库中存储的数据量亦成几何级数激增,数据库作为数据处理和存储的最终受体,将必然直接承担这种变化导致的性能下降。因此在人们对信息的依赖性越来越强的时候,对信息使用的效率也变得越来越关注,这样数据库的性能优化问题就日益严重地压在DBA的身上。

  优化器是SQL执行中最核心的部分,如果要分析SQL的性能,就不能不了解Oracle优化器的机制,这一章,我们就带你走进Oracle优化器-CBO的世界。

  基于成本的优化器 - CBO

  对于我现在所做的ORACLE优化,其实还停留在SQL优化的层次(以前我的前辈曾给我说关于数据库优化的三个层次:一是针对SQL的优化,如使用正确是索引,使用ORACLE提示等;二是针对数据库对象的优化,如增加索引,微调表结构等;三针对业务的优化,需要更改业务逻辑或者表结果,此类优化一般代价比较大,一般很少针对正在运行的系统做类似的操作)。

ITPUB版主盖国强:Oracle优化算法解析

  优化器算法 - 成败之所系

  对于ORACLE应用系统的优化,大方向上有一个顺序,首先考虑优化业务系统、再考虑优化ORACLE系统本身的参数(如内存分配等),再考虑操作系统本身的优化;在优化业务系统中,首先是首先相关的SQL,以SQL入手分析表是否缺少索引,表连接顺序是否正确,使用的索引是否正确等,然后再考虑调整表结构,调整业务逻辑等等。因此,SQL语句是我们对一个ORACLE业务系统进行优化的敲门砖。

  优化器算法 - 成本计算

ITPUB版主盖国强:Oracle优化算法解析

  对于找到的SQL语句,盖国强表示,我们可以逐一分析其执行计划,结合涉及到的表的数据量,我们可以估算或者测试该语句的执行效率,分析表WHERE条件中涉及的字段(术语叫做谓词),该字段数据分布如何,选择性是否好,是否有索引。这是一个非常繁杂和琐碎的工作,但从这些琐碎的工作中,我们能发现那些SQL执行时选择的索引不对,哪些表缺少相应的索引导致了全表扫描,哪些语句条件不够导致对分区表进行了全表扫描。总之,对于一个给定的SQL,我们结合其表数据量的大小和分布,SQL中使用的查询条件,能够找到一个性能卓越的执行方式,通过调整索引、使用ORACLE提示,使ORACLE系统按照最优的方式来执行SQL.

  解决之道

  知己知彼 百战不殆

  优化器依赖统计信息,在变更和维护的过程中,充分考虑统计信息的变化;给DBA时间充分研究那些重要的技术;扬长避短,手工设置统计信息(SET_TABLE_STATS )维持计划的稳定;在变化和边界中识别风险:月底月初、年底年初、分区增减等都可能带来问题;了解和研究那些被隐藏的秘密。

  DBA 成功之道

  不断积累,不断成长,举一反三;绕过问题是一种能力。

  对于SQL的执行方式,需要在工作中不断积累经验,比如曾经在一次优化中发现对一个表安三个字段查询的非常多,因此决定建立该三个字段的复合索引,但结果其语句执行效率却更差。

0
相关文章