欢迎来到天天文库
浏览记录
ID:56995104
大小:125.50 KB
页数:22页
时间:2020-07-26
《性能优化培训文档课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、广州赛意信息科技有限公司性能优化培训张文锋目录SQL语句处理的过程ORACLE的几种优化器访问路径(方法)表之间的连接如何干预执行计划实例讨论性能优化培训SQL语句处理的基本过程SQL语句处理的基本过程第1步:CreateaCursor创建游标第2步:ParsetheStatement分析语句第3步:DescribeResultsofaQuery描述查询的结果集第4步:DefineOutputofaQuery定义查询的输出数据第5步:BindAnyVariables绑定变量第6步:Paralle
2、lizetheStatement并行执行语句第7步:RuntheStatement运行语句第8步:FetchRowsofaQuery取查询出来的行第9步:ClosetheCursor关闭游标;PL/SQL简介PL/SQL简介:PL/SQL(procedurelanguage/SQL)是标准SQL基础上的增加过程化处理的语言,是ORACLE对SQL的扩充。与标准SQL语言一样,也是ORACLE客户端工具(如SQLPLUS,DEVELOPER/2000)访问服务器的语言PL/SQL与SQLSQL(S
3、tructuredQueryLanguage)是第四代程序语言,是一种对关系数据库(RDBMS)进行操作的标准化语言,它是用来设置,使用,维护关系数据库。PL/SQL是SQL的扩展,增加了过程化处理PL/SQL对于SQL优缺点程序过程模块化(不是面向对象的)程序易移植,可以使用与任何有使用ORALCE的服务器程序易维护,在数据库中重新编译既可可以提高数据库性能;性能优化培训ORACLE的几种优化器ORACLE的几种优化器基于规则的优化器:ORACLE7之前,主要是使用基于规则的优化器。RACLE
4、在基于规则的优化器中采用启发式的方法(HeuristicApproach)或规则(Rules)来生成执行计划。例如,如果一个查询的where条件(whereclause)包含一个谓词(predicate,其实就是一个判断条件,如”=”,“>”,”<”等),而且该谓词上引用的列上有有效索引,那么优化器将使用索引访问这个表,而不考虑其它因素,如表中数据的多少、表中数据的易变性、索引的可选择性等。此时数据库中没有关于表与索引数据的统计性描述,如表中有多上行,每行的可选择性等。优化器也不考虑实例参数,如
5、multiblocki/o、可用排序内存的大小等,所以优化器有时就选择了次优化的计划作为真正的执行计划,导致系统性能不高。基于代价的优化器:SQL(StructuredQueryLanguage)是第四代程序语言,是一种对关系数据库(RDBMS)进行操作的标准化语言,它是用来设置,使用,维护关系数据库。PL/SQL是SQL的扩展,增加了过程化处理;ORACLE的几种优化器基于代价的优化器:基于代价的优化器--CostBasedOptimization(简称CBO)Oracle把一个代价引擎(Co
6、stEngine)集成到数据库内核中,用来估计每个执行计划需要的代价,该代价将每个执行计划所耗费的资源进行量化,从而CBO可以根据这个代价选择出最优的执行计划。一个查询耗费的资源可以被分成3个基本组成部分:I/O代价、CPU代价、network代价。I/O代价是将数据从磁盘读入内存所需的代价。访问数据包括将数据文件中数据块的内容读入到SGA的数据高速缓存中,在一般情况下,该代价是处理一个查询所需要的最主要代价,所以我们在优化时,一个基本原则就是降低查询所产生的I/O总次数。CPU代价是处理在内存
7、中数据所需要的代价,如一旦数据被读入内存,则我们在识别出我们需要的数据后,在这些数据上执行排序(sort)或连接(join)操作,这需要耗费CPU资源。;性能优化培训访问路径(方法)访问路径(方法)全表扫描(FullTableScans):为实现全表扫描,Oracle读取表中所有的行,并检查每一行是否满足语句的WHERE限制条件。Oracle顺序地读取分配给表的每个数据块,直到读到表的最高水线处(highwatermark,标识表的最后一个数据块)。一个多块读操作可以使一次I/O能读取多块数据块
8、。而不是只读取一个数据块,这极大的减少了I/O总次数,提高了系统的吞吐量,所以利用多块读的方法可以十分高效地实现全表扫描,而且只有在全表扫描的情况下才能使用多块读操作。;访问路径(方法)通过ROWID的表存取:行的ROWID指出了该行所在的数据文件、数据块以及行在该块中的位置,所以通过ROWID来存取数据可以快速定位到目标数据上,是Oracle存取单行数据的最快方法。为了通过ROWID存取表,Oracle首先要获取被选择行的ROWID,或者从语句的WHERE子句中得到,或者通过表的一个或多个索引
此文档下载收益归作者所有