数据库.docx

上传人:b****2 文档编号:23030393 上传时间:2023-04-30 格式:DOCX 页数:10 大小:37.46KB
下载 相关 举报
数据库.docx_第1页
第1页 / 共10页
数据库.docx_第2页
第2页 / 共10页
数据库.docx_第3页
第3页 / 共10页
数据库.docx_第4页
第4页 / 共10页
数据库.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

数据库.docx

《数据库.docx》由会员分享,可在线阅读,更多相关《数据库.docx(10页珍藏版)》请在冰豆网上搜索。

数据库.docx

数据库

课程论文

 

课程名称:

高级数据库

 

论文题目:

数据库系统的性能调整和优化方法

 

任课教师:

董红斌教授

院(系)名称:

国际软件学院

学生学号:

2015282160085

学生姓名:

曾公群

学生专业:

软件工程

学生院(系):

国际软件学院

二○一五年十二月十五

摘要

在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的前提条件。

数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分,是进行科学研究和决策管理的重要技术手段。

本文将根据Oracle数据库从查询处理,查询优化,SQL调整以及优化器模式四个方面介绍数据库系统的性能调整和优化方法,它们影响着数据库效率的方方面面,它们的选择根据数据库内容的不同有不同的处理方式,如果能理解它们的工作方式,将极大的提高数据库的效率。

关键词:

查询处理;查询优化;SQL调整;优化器模式

目录

第一章绪论4

第二章查询处理5

2.1oracle查询处理的过程5

2.2查询优化器的任务6

第三章查询优化8

3.1基于代价的查询优化8

3.2启发式查询优化8

第四章SQL调整的过程和目标10

4.1SQL调整的目标10

4.1SQL调整的过程11

第五章优化器模式14

总结15

第一章绪论

世界上的所有行业几乎都在应用Oracle技术,《财富》100强中的98家公司都采用Oracle技术。

Oracle是第一个跨整个产品线(数据库、业务应用软件和应用软件开发与决策支持工具)开发和部署100%基于互联网的企业软件的公司。

Oracle是世界领先的信息管理软件供应商和世界第二大独立软件公司。

帮助中国软件企业在快速增长的经济大潮中取得成功,促进中国软件业的发展,同时也为中国的广大用户提供性价比高、可靠、安全的企业软件,为他们的业务增长作出贡献。

甲骨文收购了Sun,把Java收入囊中,对于Java这一最受全球编程者推崇的语言的前途业界有很多的担心,虽然甲骨文明确表示将继续开发JDK,继续支持Java。

IBM公司表示,IBM、甲骨文以及其他Java社区伙伴在OpenJDK上的协同工作,将加快Java平台的创新。

甲骨文和IBM的合作也标志着企业客户可以继续凭借Java社区来提供更加开放、灵活和创新的新技术,以促进其业务增长。

第二章查询处理

2.1oracle查询处理的过程

当一个数据库系统接收到这样一个查询的时候,它先通过一系列的查询变异步骤,然后在开始执行。

第一阶段:

即语法检查阶段,系统分析查询同时检查它是否符合语法规则,然后把查询语法中的对象同视图、表和在系统表中的列匹配。

接着进行适当的查询重写。

在这个阶段,系统确认用户有正确的权限并且查询没有违反任何相关的完整性约束。

第二阶段:

即查询优化阶段。

在这个阶段,系统要用到表和列的统计信息。

例如,在表中有多少行以及通过它们各自适当的统计信息找到相关的所引。

这个阶段是一个复杂的过程,我们把它看作是“决定做什么”,这个过程的结果是生成一个用来执行查询的程序化的存取方案。

第三阶段:

即执行阶段。

在这个阶段,存取方案被执行,其中系统通过存取索引和表从数据中得出查询的结果

Oracle数据库应用系统通过SQL(structuredquerylanguage)语言与数据库进行通信,数据库管理系统通过执行用户提交SQL语句完成查询过程。

具体的查询操作包括解析、执行和提取数据三个阶段。

(1)解析是检查SQL语句的语法和语义,最终生成SQL语句的执行计划,并将SQL语句和执行计划存放到共享池中。

在解析期间,搜索库高速缓存检查是否存在相同的SQL语句,若存在则直接执行该SQL语句。

否则检查SQL语句的语法、语义以及用户访问对象的权限,最后交给查询优化器,由查询优化器确SQL语句的最佳执行计划。

(2)执行(Execute)是指服务器进程按照SQL语句执行计划执行SQL语句。

执行计划是指执行这个查询所需要的一系列步骤,主要包括访问数据表的方式,表的连接次序,表的连接方式,以及各个步骤执行的先后顺序等。

(3)提取数据(fetch)是指将被选择行数据返回到客户端。

2.2查询优化器的任务

查询优化器的任务就是要产生一个代价最小的查询执行计划。

这要分两步走:

  ⑴ 产生逻辑上与给定表达式等价的表达式;

  ⑵ 对所产生的表达式做不同方式的注释,产生后选计划。

查询优化器中的这两步是交叉的,产生一些表达式并注释,然后又产生一些表达式并注释……

  表达式中的每个运算可用不同的算法实现,这些算法可能用到不同的索引,表达式中的各运算是如何协调执行的(用实体化计算方法还是用流水线计算方法),这些都是查询优化器在第二步的主要任务。

总之,查询优化器在第二步的主要工作是:

  ⑴ 选择实现关系运算的具体算法(包括各种索引,因为算法是和索引密切相关的);

  ⑵ 协调各关系运算的具体执行,例如,是采用实体化计算方法还是采用流水线计算方法;

  ⑶ 对整个关系代数表达式进行优化,产生代价最小的查询执行计划。

  一般来说,简单地为每个关系运算选择一个代价最小的算法,整个表达式的代价也可能最小。

但这样做往往是事与愿违(例如,索引嵌套循环连接并不是实现连接运算代价最小的算法,但是它可以提供把结果流水地传给下一个运算的机会)!

因此,必须采用一定的查询优化策略才能满足需要。

查询优化方法包括:

基于代价的优化和启发式优化。

选择最优的问题一般来说是一个NP问题。

对于这类问题,选择一个最优的解答其代价异常大,是得不偿失的,所以人们一般只是利用一些启发式的规则选择较优的策略。

查询的优化问题就属于这个范畴。

所以对查询进行优化通常是为了避免出现最坏的执行策略,同时选择一个相对较好的执行计划,而不是找到最优的执行策略。

将基于代价的优化和启发式的优化方法结合起来,其实是在局部最优的基础上实现全局的较优,效率比较高。

第三章查询优化

3.1基于代价的查询优化

基于代价的优化,其核心思想是将各种可能的查询执行计划全部产生出来,然后从中估计出代价最小的一个。

这件事情说起来容易做起来很难,而且几乎是不可能的!

例如,考虑r1,r2,r3的连接顺序的可能组合就有12种之多!

如图1所示。

图1

如果估计每一种连接顺序的代价,则将会花费很长的时间。

也有可能在运算代价还没有估计完之前,没有优化的连接运算r1,r2,r3的计算结果已经出来了!

因此基于代价的优化方法在某些时候优化本身的代价太高,有点得不偿失。

3.2启发式查询优化

由于基于代价的优化方法本身的代价太高,因此在很多系统中采用启发式规则来减少基于代价优化的可选方案数。

这种摸着石头过河的优化方法就叫启发式优化方法。

启发式优化的规则如下:

  ⑴ 将合取(∧)选择运算分解为单个选择运算序列;

  ⑵ 尽可能早地执行选择运算;

  ⑶ 确定哪些选择运算和连接运算将产生比较小的关系,重新组织表达式中多个连接的顺序;

  ⑷ 将其后跟有选择运算的笛卡尔积运算替换成连接运算;

  ⑸ 将投影属性加以分解,并尽可能早地执行投影运算;

  ⑹ 识别哪些运算可用流水线计算方法执行就采用流水线计算方法。

由于启发式方法基于假定因素太多,虽然优化的代价较小但优化的效果较差,目前已很少单独使用。

现在,实际RDBMS的优化器都将两种方法结合起来使用,即利用启发式方法尽量减少候选计划,利用基于代价的方法准确地确定执行计划。

只是各个系统在具体的做法上稍有不同而已。

第四章SQL调整的过程和目标

4.1SQL调整的目标

Oracle数据库里SQL优化的终极目标就是要缩短目标SQL语句的执行时间。

要达到上述目的,我们通常只有如下三种方法可以选择:

1.降低目标SQL语句的资源消耗;

2.并行执行目标SQL语句;

3.平衡系统的资源消耗。

“方法1:

降低目标SQL语句的资源消耗”以缩短执行时间,这是最常用的SQL优化方法。

这种方法的核心是要么通过在不更改业务逻辑的情况下改写SQL来降低目标SQL语句的资源消耗,要么不改SQL但通过调整执行计划或相关表的数据来降低目标SQL语句的资源消耗。

“方法2:

并行执行目标SQL语句”,这实际上是以额外的资源消耗来换取执行时间的缩短,很多情况下使用并行是针对某些SQL的唯一优化手段。

“方法3:

平衡系统的资源消耗”可以避免不必要的资源争用所导致的目标SQL语句执行时间的增长。

对某些SQL而言,其执行时间的增长或者不稳定(时快时慢)不是由于其执行计划的问题,而是由于在目标SQL执行时系统处于高负荷状态,执行目标SQL所需要的硬件资源(CPU、内存、IO等)得不到保障,存在争用的情况。

在这样的情况下,如果我们能平衡系统的资源消耗,把一些跟目标SQL同时执行的不重要但很消耗系统资源的操作(如报表、批处理等)挪到系统不忙的时候执行,比如把它们挪到晚上执行,那么就可以释放部分系统硬件资源以确保目标SQL执行时所需要的硬件资源不再存在争用的情况,进而就避免了其执行时间的增长或者不稳定。

总的来说,SQL调整的目标如下:

1.去掉不必要的大型全表扫描。

2.缓存小的全表扫描。

3.检验优化索引的使用。

4.检验优化的连接技术。

4.1SQL调整的过程

本节介绍了SQL 语句处理的基本过程,主要包括查询语句处理,DML 语句处理(insert,update,delete),DDL 语句处理(create,drop,alter,),事务控制(commit,rollback),SQL 语句的执行过程(SQLStatementExecution)。

在某些情况下,Oracle( 大型网站数据库平台) 运行SQL的过程可能与下面列出的各个阶段的顺序有所不同。

对许多Oracle( 大型网站数据库平台) 的工具来说,其中某些阶段会自动执行。

绝大多数用户不需要关心各个阶段的细节问题,然而,知道执行的各个阶段还是有必要的,这会帮助你写出更高效的SQL 语句来,而且还可以让你猜测出性能差的 SQL 语句主要是由于哪一个阶段造成的,然后我们针对这个具体的阶段,找出解决的办法。

每种类型的语句都需要如下阶段:

第1 步:

 创建游标(CreateaCursor)

由程序接口调用创建一个游标(cursor )。

任何SQL 语句都会创建它,特别在运行DML 语句时,都是自动创建游标的,不需要开发人员干预。

多数应用中,游标的创建是自动的。

然而,在预编译程序(pro*c) 中游标的创建,可能是隐含的,也可能显式的创建。

在存储过程中也是这样的。

第2 步:

 分析语句(ParsetheStatement)

在语法分析期间,SQL 语句从用户进程传送到Oracle( 大型网站数据库平台) ,SQL 语句经语法分析后,SQL语句本身与分析的信息都被装入到共享SQL 区。

在该阶段中,可以解决许多类型的错误。

第3 步:

 描述查询结果(DescribeResultsofaQuery)

描述阶段只有在查询结果的各个列是未知时才需要;例如,当查询由用户交互地输入需要输出的列名。

在这种情况要用描述阶段来决定查询结果的特征(数据类型,长度和名字)。

第4 步:

 定义查询的输出数据(DefineOutputofaQuery)

在查询的定义阶段,你指定与查询出的列值对应的接收变量的位置、大小和数据类型,这样我们通过接收变量就可以得到查询结果。

如果必要的话,Oracle( 大型网站数据库平台) 会自动实现数据类型的转换。

这是将接收变量的类型与对应的列类型相比较决定的。

第5 步:

 绑定变量(BindAnyVariables)

此时,Oracle( 大型网站数据库平台) 知道了SQL 语句的意思,但仍没有足够的信息用于执行该语句。

Oracle(大型网站数据库平台) 需要得到在语句中列出的所有变量的值。

得到这个值的过程就叫绑定变量(bindingvariables)。

此过程称之为将变量值捆绑进来。

程序必须指出可以找到该数值的变量名(该变量被称为捆绑变量,变量名实质上是一个内存地址,相当于指针)。

应用的最终用户可能并没有发觉他们正在指定捆绑变量,因为Oracle( 大型网站数据库平台) 的程序可能只是简单地指示他们输入新的值,其实这一切都在程序中自动做了。

因为你指定了变量名,在你再次执行之前无须重新捆绑变量。

你可以改变绑定变量的值,而Oracle( 大型网站数据库平台) 在每次执行时,仅仅使用内存地址来查找此值。

第6 步:

 并行执行语句(ParallelizetheStatement)

Oracle( 大型网站数据库平台) 可以在SELECTs,INSERTs,UPDATEs,MERGEs,DELETEs 语句中执行相应并行查询操作,对于某些DDL 操作,如创建索引、用子查询创建表、在分区表上的操作,也可以执行并行操作。

并行化可以导致多个服务器进程(Oracle( 大型网站数据库平台)serverprocesses) 为同一个SQL 语句工作,使该SQL 语句可以快速完成,但是会耗费更多的资源,所以除非很有必要,否则不要使用并行查询。

第7 步:

 执行语句(RuntheStatement)

到了现在这个时候,Oracle( 大型网站数据库平台) 拥有所有需要的信息与资源,因此可以真正运行SQL 语句了。

如果该语句为SELECT 查询或INSERT 语句,则不需要锁定任何行,因为没有数据需要被改变。

然而,如果语句为 UPDATE 或DELETE 语句,则该语句影响的所有行都被锁定,防止该用户提交或回滚之前,别的用户对这些数据进行修改。

这保证了数据的一致性。

对于某些语句,你可以指定执行的次数,这称为批处理(arrayprocessing) 。

指定执行N 次,则绑定变量与定义变量被定义为大小为N 的数组的开始位置,这种方法可以减少网络开销,也是优化的技巧之一。

第8 步:

 取出查询的行(FetchRowsofaQuery)

在fetch 阶段,行数据被取出来,每个后续的存取操作检索结果集中的下一行数据,直到最后一行被取出来。

上面提到过,批量的fetch 是优化的技巧之一。

第9 步:

 关闭游标(ClosetheCursor)

SQL 语句处理的最后一个阶段就是关闭游标

第五章优化器模式

在Oracle9i中,优化器模式可以选择first_rows,all_rows,choose,rule 等模式:

Rule:

 基于规则的方式。

Choolse:

指的是当一个表或或索引有统计信息,则走CBO的方式,如果表或索引没统计信息,表又不是特别的小,而且相应的列有索引时,那么就走索引,走RBO的方式。

FirstRows:

它与Choose方式是类似的,所不同的是当一个表有统计信息时,它将是以最快的方式返回查询的最先的几行,从总体上减少了响应时间。

AllRows:

 10g中的默认值,也就是我们所说的Cost的方式,当一个表有统计信息时,它将以最快的方式返回表的所有的行,从总体上提高查询的吞吐。

虽然Oracle10g中不再支持RBO,Oracle10g官方文档关于optimizer_mode参数的只有first_rows和all_rows.但是依然可以设置optimizer_mode为rule或choose,估计是ORACLE为了过渡或向下兼容考虑。

总结

性能一直是数据库面临的主要问题,Oracle也不能例外。

作为执行大部分磁盘IO和数据处理的应用程序的一部分,数据库通常是影响应用程序吞吐量的制约因素,也是影响应用程序响应时间的决定因素。

无论是现在还是未来,数据库的性能管理与数据库代码调优都是数据库专业人员的一个高优先级的事情。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 国外设计风格

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1