-----Oracle性能优化
文章平均质量分 92
清风智语
十年以上数据库领域一线实战经验,涵盖高可用,灾备中心设计,备份恢复,数据库开发,数据挖掘,数据库设计,性能优化等;其产品服务领域包括Oracle,MySQL,SQLserver,MongoDB等。曾先后服务于晨星资讯,dbadirect,香港易高科技等金融,证券软件行业;并提供企业级数据库性能优化,运维管理相关培训,先后提供培训服务的对象有速尔快递,同洲电子,民太安保险,康拓普,广州电信研究院,中行浙江分行等。
展开
-
Oracle DB Time 解读
Oracle DB Time是Oracle数据库在时间维度上剖析性能的一个重要指标,通过逐级分解该指标,定位到浪费资源或者资源争用的首要事件上,从而通过减少等待以及最小化每个请求的使用资源来达到优化的目的。本文主要讲述Oracle DB Time,以及给出示例演示Oracle DB Time。原创 2017-06-21 19:04:21 · 18571 阅读 · 4 评论 -
检查及设置合理的undo表空间
UNDO是用于实现并发控制以及构建一致性读,也就是在数据变更之前产生前镜像,以保证用户能够回滚或撤销对数据库所作的修改。是Oracle数据库完整性的重要组成部分。因此合理的设计及配置undo以及使用undo都将对数据库有较大的影响。通常情况下,对于大规模数据的删除,更新操作,我们建议使用分批删除分次提交以减少对undo的占用和冲击。那么对于undo的大小到底应该设置多大?是启用自动扩展还是关闭自动原创 2013-10-24 15:39:58 · 6379 阅读 · 1 评论 -
dbms_stats 导入导出表统计信息
在SQL tuning的过程中,不正确的或者过时的统计信息导致使用不正确的执行计划被采用的情况比比皆是。 当然对于这个情形,我们可以通过收集最新的统计信息来达到优化的目的。而且Oracle之前的统计信息会自动保留。除此之外,我们也可以通过备份的方式来实现导入导出统计信息。本文即使描述的即是该方式,同时并对比了不同统计信息的执行计划,最后给出了一个披俩导出统计信息的代码。 有关导入导出统计原创 2013-09-23 11:51:58 · 5861 阅读 · 0 评论 -
Oracle 硬解析与软解析
Oracle 硬解析与软解析是我们经常遇到的问题,什么情况会产生硬解析,什么情况产生软解析,又当如何避免硬解析?CURSOR_SHARING 参数?原创 2011-02-19 21:37:00 · 33122 阅读 · 3 评论 -
调整联机重做日志大小(change redo log size)
Oracle 联机日志加上Oracle归档日志记录了整个数据库完整的变更信息。是Oracle体系结构中的重要组成部分。因此联机日志的规划也相当重要。但随着业务的增加或当前联机日志文件的大小成为数据库瓶颈之一时,不得不调整联机日志的大小。本文演示了如何调整联机日志的大小。 有关联机日志、归档日志规划,设置等其参考: Oracle 联机重做日志文件(ONLINE LOG F原创 2013-03-22 15:57:04 · 7871 阅读 · 2 评论 -
使用 resource_limit 及 profile 限制用户连接
数据库性能是一个永恒的话题,那就是如何使用更少的资源以达到更高效的性能。Oracle系统参数RESOURCE_LIMIT是一个用于控制用户对于数据库资源使用的参数,当值为true的时候即为启用,否则禁用。该参数结合profile来可以控制多种资源的使用,如CPU_PER_SESSION, CONNECT_TIME,LOGICAL_READS_PER_SESSION,PRIVATE_SGA等等从而达原创 2013-06-27 10:18:31 · 19535 阅读 · 0 评论 -
使用 SQLNET.EXPIRE_TIME 清除僵死连接
数据库连接的客户端异常断开后,其占有的相应并没有被释放,如从v$session视图中依旧可以看到对应的session处于inactive,且对应的服务器进程也没有释放,导致资源长时间地被占用,对于这种情形开该如何处理呢?SQLNET.EXPIRE_TIME对于这个问题我们提供了解决方案,专门用于清理那些异常断开的情形,如网络异常中断,客户端异常掉电,异常重启等。本文描述了设置SQLNET.EXPI原创 2013-06-27 15:56:56 · 35993 阅读 · 4 评论 -
使用SQL tuning advisor(STA)自动优化SQL
Oracle 10g之后的优化器支持两种模式,一个是normal模式,一个是tuning模式。在大多数情况下,优化器处于normal模式。基于CBO的normal模式只考虑很小部分的执行计划集合用于选择哪个执行计划,因为它需要在尽可能短的时间,通常是几秒或毫秒级来对当前的SQL语句进行解析并生成执行计划。因此并不能保证SQL语句每次都是使用最佳的执行计划。而tuning模式则将高负载的SQL语句直原创 2013-05-30 20:00:27 · 13225 阅读 · 2 评论 -
SQL Tuning Advisor(STA) 到底做了什么?
SQL Tuing Advisor(STA) 是Automatic Tuning Optimizer(自动优化调整器)的一部分。在前面的文章使用SQL tuning advisor(STA)自动优化SQL中描述了SQL Tuing Advisor(STA)的相关背景并给出示例。本文主要是描述STA底层到底为我们作了什么使得SQL语句得以优化,同时演示绑定变量的情形下接受sql profile后,后原创 2013-06-08 11:15:56 · 6964 阅读 · 0 评论 -
Oracle 聚簇因子(Clustering factor)
聚簇因子是 Oracle 统计信息中在CBO优化器模式下用于计算cost的参数之一,决定了当前的SQL语句是否走索引,还是全表扫描以及是否作为嵌套连接外部表等。如此这般,那到底什么是聚簇因子,那些情况下会影响到聚簇因子,以及如何提高聚簇因子?本文将对此展开描述。 1、堆表的存储方式 Oralce 数据库系统中最普通,最为常用的即为堆表。 堆表的数据存储方式为无序存储,也就是任意的DML原创 2013-04-25 09:42:32 · 13629 阅读 · 3 评论 -
Oracle 全表扫描及其执行计划(full table scan)
全表扫描是Oracle访问数据库表是较为常见的访问方式之一。很多朋友一看到SQL语句执行计划中的全表扫描,就要考虑对其进行修理一番。全表扫描的存在,的确存在可能优化的余地。但事实上很多时候全表扫描也并非是最低效的,完全要看不同的情形与场合,任一方式都是有利有弊的,也就是具体情况要具体分析。本文描述了什么是全表扫描以及何时发生全表扫描,何时全表扫描才低效。 本文涉及到的相关链接: 高水位线原创 2013-05-24 21:46:54 · 19325 阅读 · 0 评论 -
Oracle db_file_mulitblock_read_count参数
Oracle DB_FILE_MULTIBLOCK_READ_COUNT是Oracle比较重要的一个全局性参数,可以影响系统级别及sessioin级别。主要是用于设置最小化表扫描时Oracle一次按顺序能够读取的数据块数。通常情况下,我们看到top events中的等待事件db file scattered read时会考虑到增加该参数的值。但是否增加了DB_FILE_MULTIBLOCK_REA原创 2013-05-28 17:20:51 · 6190 阅读 · 1 评论 -
Oracle 历史SQL语句执行计划的对比与分析
基于CBO优化器的环境中,SQL执行计划的生成依赖于统计信息的真实与完整。如列的离散度,列上的直方图,索引的可用性,索引上的聚簇因子。当这些信息是真实完整的情况下,CBO优化器通常都可以制定最优的执行计划。也正因此CBO优化器也灵活,难以控制,任一信息的不真实或缺失都可能导致执行计划发生变化而产生多个版本。经常碰到的情形是之前的某个SQL语句前阵子还不是TOP SQL,而最近变成了TOP SQL。原创 2013-05-19 19:24:37 · 9960 阅读 · 0 评论 -
dbms_stats 导入导出 schema 级别统计信息
在使用CBO优化器模式的Oracle数据库中,统计信息是CBO生成最佳执行计划的重要依据。这些统计信息通常包括列级、表级、索引、系统级别的统计信息等。所有的这些统计信息都可以被备份,导入导出也可以被锁定与解锁。因此相应地,我们可以导出列级、表级、索引、系统级别的统计信息。通过导出导入统计信息,可以在测试环境来模拟产生环境进行数据库性能优化,SQL调优等。本文主要描述了基于schema级别导出导入统原创 2013-05-17 09:49:01 · 6397 阅读 · 0 评论 -
Oracle 监控索引的使用率
Oracle提供了索引监控特性来判断索引是否被使用。在Oracle 10g中,收集统计信息会使得索引被监控,在Oracle 11g中该现象不复存在。尽管如此,该方式仅提供的是索引是否被使用。索引被使用的频率未能得以体现。下面的脚本将得到索引的使用率,可以很好的度量索引的使用情况以及根据这个值来判断当前的这些索引是否可以被移除或改进。 1、索引使用频率报告--运行环境SQL> select *原创 2013-04-19 11:32:36 · 11918 阅读 · 0 评论 -
收缩undo表空间
通常情况下,如果undo表空间的处于自动扩展且未指定最大值的情形,对于使用小表空间模式的数据库,undo表空间可能会一再增长,直到达到32GB。或者是在指定了自动扩展及其最大值而月底或年末的批量数据计算导致undo表空间疯狂超范围增长后不再释放。对于这些情形我们需要手动收缩表空间以达到节省空间资源以及数据库管理开销,如rman备份等。本文列出了收缩undo表空间的基本步骤并给出示例。 有原创 2013-10-27 21:01:05 · 8253 阅读 · 0 评论 -
Oracle 索引质量分析
索引质量的高低对数据库整体性能有着直接的影响。良好高质量的索引使得数据库性能得以数量级别的提升,而低效冗余的索引则使得数据库性能缓慢如牛,即便是使用高档的硬件配置。因此对于索引在设计之初需要经过反复的测试与考量。那对于已经置于生产环境中的数据库,我们也可以通过查询相关数据字典得到索引的质量的高低,通过这个分析来指导如何改善索引的性能。下面给出了演示以及索引创建的基本指导原则,最后给出了索引质量分析原创 2014-04-14 16:33:36 · 5497 阅读 · 2 评论 -
Oracle活动会话历史(ASH)及报告解读
对于数据库运行期间的各种状态的实时监控以及相关性能数据捕获对于解决性能问题,提高整体业务系统运行效率是至关重要的。在Oracle数据库中,实时捕获相关性能数据是通过ASH工具来实现的。ASH通过每秒钟抽取活动会话样本,为分析在最近时刻的性能问题提供最直接最有效的依据。本文主要讲述ASH的用法及使用。原创 2017-06-21 09:31:04 · 10467 阅读 · 0 评论 -
Oracle ADDM性能诊断利器及报告解读
性能优化是一个永恒的话题,性能优化也是最具有价值,最值得花费精力深入研究的一个课题,因为资源是有限的,时间是有限的。在Oracle数据库中,随着Oracle功能的不断强大和完善,Oralce数据库在性能方面实现自我诊断及优化的功能也越来智能化,这大大的简花了人工优化的脑力和体力的开销,尤其是借助ADDM自动诊断并给出调整建议。原创 2017-04-27 16:28:46 · 18428 阅读 · 0 评论 -
Oracle AWR特性描述
在对Oracle数据库做性能优化和调整的时候,整个数据库在运行期间的现状或者说真实状态只有在被完整记录下来,才是可查,可知,可比较,可推测或者说为未来优化调整提供支撑建议的基础。那在Oracle数据库中这个机制是由AWR来实现的。AWR是Oracle数据库用于收集,管理和维护数据库整个运行期间和性能相关统计数据的存储仓库,是Oracle数据库性能调整和优化的基础。1. 什么是AWRAWR是Auto原创 2017-04-24 10:05:13 · 4809 阅读 · 0 评论 -
Oracle AWR管理与维护
AWR是Automatic Workload Repository的简称,中文叫着自动工作量资料档案库。对于AWR的管理,主要是针对快照和基线的管理而言。比如设定快照的间隔,删除快照,设定快照的保留时间。那对于基线而言则是基线的创建,删除,自动创建等。本文主要描述这2部分的内容。一、快照管理 默认情况下,Oracle数据库每小时生成一次快照,并在工作负载库中保留8天的统计信息。必要时,你可以使用d原创 2017-04-24 11:41:12 · 4790 阅读 · 0 评论 -
Oracle Time Model Statistics(时间模型统计)
Oracle数据库从10g开始,启用以时间模型统计为主,命中率为辅等性能度量指标。基于时间模型统计,主要是基于操作类型测量在数据库中花费的时间的统计信息。最重要的时间模型统计是数据库时间,或DB时间。数据库时间表示在数据库调用中所花费的总时间,是实例工作负载量的总指示器。本文描述时间模型统计相关知识点。原创 2017-04-05 17:53:22 · 6826 阅读 · 0 评论 -
Oracle 数据库性能优化3日实战(企业培训)
课程名称一: Oracle性能优化及调整课程时长 1天课程深度: 高级上机实验: 10%-30%授课对象: Oracle开发人员、Oracle数据库管理人员,应用程序开发人员课程描述: 本课程讲述Oracle数据库物理层规划,系统性能的监控,数据库性能参数调整,统计信息的收集,使用自动化调试工具优化数据库,I/O子系统的配置与设计以及性能优化方法论等。预备知识: 熟悉操作原创 2017-04-05 11:49:28 · 6034 阅读 · 3 评论 -
Oracle自动性能统计
高效诊断性能问题,需要提供完整可用的统计信息,好比医生给病人看病的望闻问切,才能够正确的确诊,然后再开出相应的药方。Oracle数据库为系统、会话以及单独的sql语句生成多种类型的累积统计信息。本文主要描述Oracle性能统计涉及到的相关概念及统计对象,以更好的利用统计信息为性能调整奠定基础。原创 2017-04-13 10:10:15 · 4272 阅读 · 0 评论 -
Oracle 11G统计信息自动收集及调整
从Oracle 11G开始,数据库统计信息的自动收集被整合到自动维护任务中,满足大多数情形下的运行需求。但对于在线商城,交易系统而言,可能需要调整其执行时间或者自行指定收集窗口。本文描述了如何查看以及调整自动收集统计时间窗口等,供大家参考。原创 2017-03-25 11:05:35 · 12138 阅读 · 0 评论 -
父游标、子游标及共享游标
游标是数据库领域较为复杂的一个概念,因为游标包含了shared cursor和session cursor。两者有其不同的概念,也有不同的表现形式。共享游标的概念易于与SQL语句中定义的游标相混淆。本文主要描述解析过程中的父游标,子游标以及共享游标,即shared cursor,同时给出了游标(session cursor)的生命周期以及游标的解析过程的描述。原创 2011-10-21 12:14:46 · 12919 阅读 · 1 评论 -
Oracle Execute to Parse 执行解析比分析
Execute to Parse%是AWR报告中Instance Efficiency Percentages部分中重要的一个性能指标,反应了数据库SQL解析和执行的比率。这个比率值同时也涉及到了与cursor相关的参数以及硬解析,软解析,软软解析等。本文是围绕这个比率进行展开及描述。原创 2015-10-29 11:47:03 · 12112 阅读 · 2 评论 -
联机日志文件过小引发的log file 相关等待
Oracle 联机重做日志文件记录了数据库的所有变化(DML,DDL或管理员对数据所作的结构性更改等),用于对于意外删除或宕机利用日志文件实现数据恢复来确保数据的完整性。但不合理的联机日志文件规划将引发日志相关的等待事件。下面是这样一个来自生产环境中的例子。 1、故障描述--客户描述该数据库晚上用于实现数据同步以及汇总,以前一直工作的比较良好,随着需要同步的数量量的增大,最近变得越来越慢。--原创 2013-03-25 11:51:14 · 4271 阅读 · 0 评论 -
Oracle 重建索引脚本
索引是提高数据库查询性能的有力武器。没有索引,就好比图书馆没有图书标签一样,找一本书自己想要的书比登天还难。然而索引在使用的过程中,尤其是在批量的DML的情形下会产生相应的碎片,以及B树高度会发生相应变化,因此可以对这些变化较大的索引进行重构以提高性能。N久以前Oracle建议我们定期重建那些高度为4,已删除的索引条目至少占有现有索引条目总数的20%的这些表重建索引。但Oracle现在强烈建议不要原创 2014-04-21 17:52:32 · 6467 阅读 · 0 评论 -
Oracle 还原历史统计信息
统计信息是个非常有用的东东,没有它,SQL优化器就好比巧妇难为无米之炊!良好高效的SQL执行计划依赖于真实的统计信息。然而在有些情况下,比如对比生产环境与测试环境执行计划,需要使用生产环境的统计信息。而有时候呢则需要还原Oracle历史统计信息。本文基于后者即如何还原历史统计信息来展开,同时描述了11g缺省情况下对于统计信息的调度。 有关统计信息的导入导出可以参考:原创 2014-03-25 15:58:36 · 4917 阅读 · 2 评论 -
Oracle 重建索引的必要性
索引重建是一个争论不休被不断热烈讨论的议题。当然Oracle官方也有自己的观点,我们很多DBA也是遵循这一准则来重建索引,那就是Oracle建议对于索引深度超过4级以及已删除的索引条目至少占有现有索引条目总数的20% 这2种情形下需要重建索引。近来Oracle也提出了一些与之相反的观点,就是强烈建议不要定期重建索引。本文是参考了1525787.1并进行相应描述。1、重建索引的理由 a、Oracle原创 2014-04-15 15:45:07 · 10963 阅读 · 3 评论 -
Oracle OWI 等待事件视图(v$session_wait/v$session_event/v$system_event)
通常情况下,用户提交一条SQL语句,总会存在这样或那样的等待事件。也就是说由于所需资源被占用导致进程不得不处于等待状态。Oracle为我们提供了获取这些等待事件的可用视图。根据这些视图可以得知哪些事件导致该SQL语句效率低下而采取相应的修改或调整。本文基于Oracle 10g描述了如何通过视图v$session_wait,v$session_event,以及v$system_event去获取等待事原创 2013-04-16 10:00:59 · 9164 阅读 · 0 评论 -
Oracle OWI 等待事件历史视图及相关视图
Oracle提供的等待事件视图使得我们可以获取指定session以及实例级别等待事件的详细信息,这些视图分别是v$session_wait,v$session_event,以及v$system_event。然而这几个视图对于历史等待事件无能为力。对此,Oracle也提供了历史等待事件视图v$session_wait_history,同时视图v$session_wait_class,v$system原创 2013-04-17 09:50:36 · 6724 阅读 · 1 评论 -
PGA的设置与调整
PGA,即程序全局区(Program Global Area),是Oracle体系机构的重要组成部分。Oracle 数据库对系统内存的总开销即是PGA+SGA。SGA主要由库缓存(共享SQL区和PL/SQL区)和数据字典缓存组成。而PGA包含客户端连接服务器所派生的服务器进程的集合,每个服务器进程都拥有存放数据和控制信息的私有内存区域。客户端进程和服务器端进程一一对应,由服务器端进程完成用原创 2011-12-01 12:05:07 · 13054 阅读 · 0 评论 -
高水位线和全表扫描
高水位线好比水库中储水的水位线,用于描述数据库中段的扩展方式。高水位线对全表扫描方式有着至关重要的影响。当使用delete 操作表记录时,高水位线并不会下降,随之导致的是全表扫描的实际开销并没有任何减少。本文给出高水位线的描述,如何降低高水位线,以及高水位线对全表扫描的影响。 一、何谓高水位线 如前所述,类似于水库中储水的水位线。只不过在数据库中用于描述段的扩展方式。原创 2011-11-08 18:15:09 · 11030 阅读 · 6 评论 -
Oracle 绑定变量窥探
Bind Peeking是Oracle 9i中引入的新特性,一直持续到Oracle 10g R2。它的作用就是在SQL语句硬分析的时候,查看一下当前SQL谓词的值,以便生成最佳的执行计划。而在oracle 9i之前的版本中,Oracle 只根据统计信息来做出执行计划。一、绑定变量窥探 使用SQL首次运行时的值来生成执行计划。后续再次运行该SQL语句则使用首次执行计划来执行。原创 2011-11-01 09:19:44 · 16822 阅读 · 1 评论 -
Oracle自适应共享游标
自适应游标共享Adaptive Cursor Sharing或扩展的游标共享(Extended Cursor Sharing)是Oracle 11g的新特性之一,主要用于解决以前版本中由于绑定变量窥探导致SQL语句无法获得最佳执行计划的缺陷,即能够对效率低下的游标(子游标)进行自动识别而选择最佳的执行计划。本文详细描述了自适应游标共享并给出示例。 有关绑定变量窥探请参考:Orac原创 2011-11-01 09:45:02 · 10158 阅读 · 0 评论 -
绑定变量及其优缺点
绑定变量是Oracle解决硬解析的首要利器,能解决OLTP系统中library cache的过度耗用以提高性能。然刀子磨的太快,使起来锋利,却容易折断。凡事皆有利弊二性,因地制宜,因时制宜,全在如何权衡而已。本文讲述了绑定变量的使用方法,以及绑定变量的优缺点、使用场合。 一、绑定变量 提到绑定变量,就不得不了解硬解析与软解析。硬解析简言之即一条SQL语句没有被运行过,处于首次原创 2011-10-25 16:02:56 · 13503 阅读 · 2 评论 -
收缩表段(shrink space)
当表被创建后,随着记录的不断插入,组成表的区间会被填满,如果启用了自动扩展,则当区间填满后,会分配新的区间。假定高水 位线随着记录的增加从最左端往右端来移动,当到底部区间的尾端时,则新的区间将会被分配……原创 2011-07-25 09:22:26 · 24936 阅读 · 1 评论 -
使用DBMS_SHARED_POOL包将对象固定到共享池
--******************************************-- 使用DBMS_SHARED_POOL包将对象固定到共享池--****************************************** DBMS_SHARED_POOL包提供存储过程来将PL/SQL对象或SQL游标固定到Oracle 共享池。一旦这些对象固定之后,将原创 2011-06-24 09:45:00 · 7444 阅读 · 0 评论