随笔分类 - Oracle 性能优化
1
摘要:Oracle 10046是一个Oracle内部事件。最常用的是在Session级别设置sql_trace(alter session set sql_trace=true)即是开启了级别为1的10046调试事件。当设置了10046事件之后,Oracle 将产生一个dump文件。通过得到的dump文件进行进一步分析,可以得到Oracle 内部执行系统解析、调用、等待、绑定变量等详细的trace信息,对于分析系统的性能有着举足轻重的作用。一、10046事件的相关参数该事件需要设置一些参数以控制dump文件的输出:TIMED_STATISTICS 用于控制计时信息,可以设定为true和false。.
阅读全文
摘要:一、概述:如果你的Oracle数据库性能低下,行链接和行迁移可能是其中的原因之一。我们能够通过合理的设计或调整数据库来阻止这个现象。行链接和行迁移是能够被避免的两个潜在性问题。我们可以通过合理的调整来提高数据库性能。本文主要描述的是:什么是行迁移与行链接如何判断行迁移与行链接如何避免行迁移与行链接当使用索引读取单行时,行迁移影响OLTP系统。最糟糕的情形是,对所有读取操作而言,增加了额外的I/O。行链接则影响索引读和全表扫描。注:在翻译行(row)时使用记录来描述(便于理解),如第一行,使用第一条记录。二、Oralce 块操作系统块的大小是操作系统读写的最小操作单元,也是操作系统文件的属性之一
阅读全文
摘要:当排序操作、重建索引等大型操作无法在内存中完成时,临时表空间将为排序提供便利。一般情况下临时表空间为多个用户,多个会话所共享。不能为会话分批空间配额。临时表空间耗用过度且在不能自动扩展的情形下将收到“ORA-1652:unable to extend temp segment” 错误.下面描述了过度扩展后如何释放临时表空间。与之相关的内容参考: Oracle 表空间与数据文件 临时表空间的管理与受损恢复 Oracle 彻底 kill session一、临时表空间何时释放 检索数据的会话游标关闭时,占用的临时空间即被释放 数据库关闭,重启(一般情况),会话 log off二、释放过...
阅读全文
摘要:PGA,即程序全局区(Program Global Area),是Oracle体系机构的重要组成部分。Oracle 数据库对系统内存的总开销即是PGA+SGA。SGA主要由库缓存(共享SQL区和PL/SQL区)和数据字典缓存组成。而PGA包含客户端连接服务器所派生的服务器进程的集合,每个服务器进程都拥有存放数据和控制信息的私有内存区域。客户端进程和服务器端进程一一对应,由服务器端进程完成用户的请求,并将数据返回给客户端进程。一、PGA的主要特性及结构1、主要特性不同于SGA,此部分为非共享的内存服务器进程启动或创建时分配,结束时释放,只能被一个进程使用(在系统运行时,排序,连接等操作可能需要.
阅读全文
摘要:在一条SQL语句中,当使用索引时,cosistent gets 减少,而cost增加。理论上在稳定后的执行计划中,physical reads为零值的前提下,cost应当相应减少。下面来看看其原由。1、原始的SQL语句SQL> SELECT acc_num, amount, curr_cd 2 FROM voucher_tbl ...
阅读全文
摘要:高水位线好比水库中储水的水位线,用于描述数据库中段的扩展方式。高水位线对全表扫描方式有着至关重要的影响。当使用delete 操作表记录时,高水位线并不会下降,随之导致的是全表扫描的实际开销并没有任何减少。本文给出高水位线的描述,如何降低高水位线,以及高水位线对全表扫描的影响。一、何谓高水位线如前所述,类似于水库中储水的水位线。只不过在数据库中用于描述段的扩展方式。可以将数据段或索引段等想象为一个从左到右依次排开的一系列块。当这些块中未填充任何数据时,高水位线位于块的最左端(底端)随着记录的不断增加,新块不断地被填充并使用,高水位线随之向右移动。高水位线之上为未格式化的数据块。删除(delete
阅读全文
摘要:自适应游标共享Adaptive Cursor Sharing或扩展的游标共享(Extended Cursor Sharing)是Oracle 11g的新特性之一,主要用于解决以前版本中由于绑定变量窥探导致SQL语句无法获得最佳执行计划的缺陷,即能够对效率低下的游标(子游标)进行自动识别而选择最佳的执行计划。本文详细描述了自适应游标共享并给出示例。 有关绑定变量窥探请参考:Oracle 绑定变量窥探一、示例自适应游标共享 1、创建演示环境 SQL> select * from v$version where rownum<2; ...
阅读全文
摘要:Bind Peeking是Oracle 9i中引入的新特性,一直持续到Oracle 10g R2。它的作用就是在SQL语句硬分析的时候,查看一下当前SQL谓词的值,以便生成最佳的执行计划。而在oracle 9i之前的版本中,Oracle 只根据统计信息来做出执行计划。一、绑定变量窥探 使用SQL首次运行时的值来生成执行计划。后续再次运行该SQL语句则使用首次执行计划来执行。 影响的版本:Oracle 9i, Oracle 10g 对于绑定变量列中的特殊值或非均匀分布列上的绑定变量会造成非高效的执行计划被选择并执行。 要注意的是,Bind Peeking只发生在硬分析的时候,即SQL被第一...
阅读全文
摘要:绑定变量是Oracle解决硬解析的首要利器,能解决OLTP系统中library cache的过度耗用以提高性能。然刀子磨的太快,使起来锋利,却容易折断。凡事皆有利弊二性,因地制宜,因时制宜,全在如何权衡而已。本文讲述了绑定变量的使用方法,以及绑定变量的优缺点、使用场合。一、绑定变量 提到绑定变量,就不得不了解硬解析与软解析。硬解析简言之即一条SQL语句没有被运行过,处于首次运行,则需要对其进行语法分析,语义识别,跟据统计信息生成最佳的执行计划,然后对其执行。而软解析呢,则是由于在library cache已经存在与该SQL语句一致的SQL语句文本、运行环境,即有相同的父游标与子游标,采用拿来.
阅读全文
摘要:游标是数据库领域较为复杂的一个概念,因为游标包含了shared cursor和session cursor。两者有其不同的概念,也有不同的表现形式。共享游标的概念易于与SQL语句中定义的游标相混淆。本文主要描述解析过程中的父游标,子游标以及共享游标,即shared cursor,同时给出了游标(session cursor)的生命周期以及游标的解析过程的描述。 有关游标的定义,声明,与使用请参考:PL/SQL 游标 有关硬解析与软解析请参考:Oracle 硬解析与软解析一、相关定义 shared cursor 也即是共享游标,是SQL语句在游标解析阶段生成获得的,是位于library ca..
阅读全文
摘要:Oracle 临时表空间是Oracle数据库的重要组成部分,尽管该部分并没有cont体系结构上得以展现,但其重要地位也是不容忽视的。尤其是对于大型的频繁操作,如创建索引,排序等等都需要在临时表空间完成来减少内存的开销。当然对于查询性能要求较高的应尽可能的避免在磁盘上完成这些操作。本文主要描述的是临时表空间的管理与受损恢复。一、临时表空间的特性与注意事项1.特性 用户存储临时数据的表空间 临时数据通常只在一个数据库会话期间内存在的数据,分为两种形式,排序数据和全局临时表 临时数据不会被写入存储永久对象的普通表空间内,而是存储在临时表空间的临时段中 临时表空间临时性导致不需要备份该类型的表空间,.
阅读全文
摘要:--====================-- 收缩表段(shrink space)--====================一、表的增长方式 当表被创建后,随着记录的不断插入,组成表的区间会被填满,如果启用了自动扩展,则当区间填满后,会分配新的区间。假定高水 位线随着记录的增加从最左端往右端来移动,当到底部区间的尾端时,则新的区间将会被分配。 二、表可收缩的原理 随着记录的增加高水位线不断的右移,记录的删除不会导致高水位线往回(左)移动 删除记录后的空闲空间(高水位线左侧)尽管可以使用,但其稀疏性导致空间空闲 注:完整的表扫描所耗费的时间不会因为记录的减少(删除)而减少三、使用 alte
阅读全文
摘要:--******************************************-- 使用DBMS_SHARED_POOL包将对象固定到共享池--****************************************** DBMS_SHARED_POOL包提供存储过程来将PL/SQL对象或SQL游标固定到Oracle 共享池。一旦这些对象固定之后,将不再参与aged out,而是常驻内存,即便是使用alter system flush shared_pool也不会将对象清除出共享池。 对于一些大值对象装载进共享池时容易引发两种类型的问题: ORA-04031 errors..
阅读全文
摘要:--*************************************************-- 共享池中保留池的调整(shared_pool_reserved_size)--*************************************************1.何谓保留池 简言之,保留一部分内存空间以备不时之需。通常情况下,Oracle会将大的内存请求分割成小的内存块来满足需求。而对于大的内 存且为连续的内存空间请求,如果在共享池中未找到,则会动用共享池中的保留池。当然,共享池在内存压力的情况下,也会使用到 保留池中的部分。保留池部分满足较大的内存需求更高效。缺省情况
阅读全文
摘要:--********************************-- Buffer cache 的调整与优化(二)--******************************** Buffer cache 实际上细分为多个不同的Buffer cache,如keep pool,recycle pool,default pool,下面描述不同buffer cache的使用。 有关Buffer cache 的总体描述,请参考:Buffer cache 的调整与优化(一) 一、不同buffer pool的应用 一个buffer pool即对应于一个oracle 数据块,三种不同的pool实际.
阅读全文
摘要:--************************************-- Oracle 表缓存(caching table)的使用--************************************1.使用caching table 的原因 在通常的情况下,应用程序访问在cache中的数据块将按照LRU算法来进行处理。然而对于小表的访问,当使用全表扫描时,则该表 中的块会放置LRU列表最近最少使用尾部的(LRU端),因此很快就被淘汰出局。然而使用基于成本优化的方法,对于小表进行查询以及收 集统计信息,大多情形下走的是全表扫描,因此势必造成一种情形,即该表后续需要再次访问,而每次
阅读全文
摘要:--==============================-- Buffer cache 的调整与优化(一)--============================== Buffer Cache是SGA的重要组成部分,主要用于缓存数据块,其大小也直接影响系统的性能。当Buffer Cache过小的时候,将会造成更多的free buffer waits事件。 下面将具体描述Buffer Cache的作用,调整与优化。一、SGA的所有组件 从动态视图v$sga_dynamic_components获取SGA的相关信息 SELECT component, current_size, mi.
阅读全文
摘要:--=======================================-- 共享池的调整与优化(Shared pool Tuning)--======================================= 共享池(Shared pool)是SGA中最关键的内存片段,共享池主要由库缓存(共享SQL区和PL/SQL区)和数据字典缓存组成。其中库缓存的作用是存放频繁使用的sql,pl/sql代码以及执行计划。数据字段缓存用于缓存数据字典。在内存空间有限的容量下,数据库系统根据一定的算法决定何时释放共享池中的sql,pl/sql代码以及数据字典信息。下面逐一解释各个部件并给出调
阅读全文
摘要:--=======================-- Oracle 硬解析与软解析--======================= Oracle 硬解析与软解析是我们经常遇到的问题,什么情况会产生硬解析,什么情况产生软解析,又当如何避免硬解析?下面的描述将给出软硬解析的产生,以及硬解析的弊端和如何避免硬解析的产生。 一、SQL语句的执行过程 当发布一条SQL或PL/SQL命令时,Oracle会自动寻找该命令是否存在于共享池中来决定对当前的语句使用硬解析或软解析。 通常情况下,SQL语句的执行过程如下: a.SQL代码的语法(语法的正确性)及语义检查(对象的存在性与权限)。 b.将SQL代码
阅读全文
摘要:--=======================-- 启用 AUTOTRACE 功能--======================= AUTOTRACE是一个SQL*Plus工具,用于跟踪SQL的执行计划,收集执行时所耗用资源的统计信息,是SQL优化工具之一,下面给出启用AUTOTRACE 功能步骤。 一、创建基础表 运行$ORACLE_HOME/rdbms/admin/utlxplan脚本来创建plan_table scott@ORCL> conn system/redhat --使用system帐户登陆 Connected. system@ORCL> start $ORAC
阅读全文
1