`
itspace
  • 浏览: 978827 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

记一次Oracle SQL高版本(high version count)引起性能故障处理

阅读更多
用户报告前台业务响应缓慢,登陆至数据库获取awr报告。kill掉相关会话后系统恢复,杀会话可参考metalink id 786507.1
Load Profile 除了Rollback per transaction %比较高之外,达到了95%。其他指标似乎正常。




于是进一步查看事务回滚相关信息,可以看到每秒事务回滚数(transaction rollbacks)只有145.13,远远小于user rollbacks (2,454.12)
Statistic                                                 Total   per Second per Trans
rollback changes - undo records applied                   830,757 688.73     0.27
rollbacks only - consistent read gets                     152,722 126.61     0.05
transaction rollbacks                                       175,061 145.13     0.06
transaction tables consistent read rollbacks               322      0.27       0.00
transaction tables consistent reads - undo records applied 96,665    80.14       0.03                                                                                   
user commits                                               168,522   139.71     0.05     
user rollbacks                                             2,960,222   2,454.12    0.95
这里需要注意的是在分布式事务中,如采用dblink获取数据,不论用户发出commit或者rollback,在会话统计中transaction rollbacks基数都会增加。即commit或者rollback一次
transaction rollbacks都会加1.
当用户发出rollback命令,不论有无事务user rollbacks都会增加。从数值上来看
Rollback per transaction %应该等于user rollbacks/(user commits+user rollbacks),所以回滚率高应该不会是引起性能问题的主要原因。
通过进一步研究可以发现 Rollback per transaction%计算方法可以$ORACLE_HOME/rdbms/admin/sprepins.sql找到
Rollback per transaction %:' dscr,  round(100*:urol/:tran,2) pctval
而urol,tran可以从$ORACLE_HOME/rdbms/admin/spcpkg.sql脚本中找到具体意思
urol   := SYSDIF('user rollbacks');
tran   := ucom + urol;
ucom   := SYSDIF('user commits');
我们的猜测得到了证实。
于是进一步分析top 5等待事件,可以看到前3位都为mutex等待。

从经验来讲,出现mutex锁等待,且出现了共享和排他一起出现。在Oracle 10g mutex技术还不是非常成熟。
一般来说,出现这种等待八九不离十应该是bug引起的,可以通过_kks_use_mutex_pin将其关闭。在Oracle 10g中mutex等待一般都是shared pool引起的。而引起shared pool故障,
一般来说大量的parse或者ddl或者高版本SQL引起的,在本案例中可以看到soft parse指标还算正常。那么接下来查看SQL是否有高版本。
果然在高版本SQL列表中出现了:

接下来查询V$SQL_SHARED_CURSOR观察引起高版本SQL的原因:可以看到AUTH_CHECK_MISMATCH,TRANSLATION_MISMATCH等匹配发生问题

通过搜索metalink 果然是bug 11930680,其解决办法是设置参数optimizer_secure_view_merging=false
This problem is introduced in 10.2.0.5 and 11.2.0.2 .

If optimizer_secure_view_merging is enabled then some SQL statements may
not be shared due to AUTH_CHECK_MISMATCH / INSUFF_PRIVS even if the
SQL is issued repeatedly by the same user. This can cause excess shared
pool memory use and other contention issues due to the high child cursor
count.
There is also a security issue addressed within this fix and so
customers needing this fix have to go via the security process.
(Patches are restricted)

Workaround:
  The only workaround is to set optimizer_secure_view_merging=false
  which may not be acceptable in many cases.


  • 大小: 75.8 KB
  • 大小: 28.9 KB
  • 大小: 34.2 KB
  • 大小: 40.1 KB
分享到:
评论

相关推荐

    常用Oracle监控数据库性能的SQL

    首先,`V$视图`是Oracle提供的一种内置的性能数据源,通过查询这些视图,我们可以获取到丰富的性能信息。例如: 1. `V$SESSION`: 显示当前活跃会话的信息,包括会话ID、用户、等待事件等,可以帮助我们找出占用资源...

    oracle 中的经典SQL

    ### Oracle中的经典SQL查询知识点详解 #### 一、查看表空间的名称及大小 此查询用于获取Oracle数据库中各个表空间的名称及其总大小(单位为MB)。 **SQL语句**: ```sql SELECT T.TABLESPACE_NAME, ROUND(SUM(BYTES...

    面试oracle必备的sql语句

    ### 面试Oracle必备的SQL语句知识点详解 #### 1. 查看表空间的名称及大小 在Oracle数据库管理中,了解每个表空间的大小对于资源管理和优化至关重要。以下SQL语句可以帮助我们获取各个表空间的名称及其总大小(以MB...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

     Oracle 数据库中的SQL是当今市场上功能最强大的SQL实现之一,而本书全面展示了这一工具的威力。如何才能让更多人有效地学习和掌握SQL呢?Karen Morton及其团队在本书中提供了专业的方案:先掌握语言特性,再学习...

    oracle_V$SQLAREA_.rar_oracle_oracle V$sqlarea

    7. **版本控制**:`CHILD_NUMBER` 和 `VERSION_COUNT` 列展示了SQL语句的版本和子游标信息,当SQL语句因为不同绑定值或优化模式改变而产生新版本时,这些信息会有所变化。 通过`V$SQLAREA`,我们可以监控SQL语句的...

    Oracle常用SQL查询语句

    根据提供的信息,我们可以总结出以下Oracle数据库中常用的SQL查询语句及它们的功能: ### 1. 查询表空间及其总大小 ...以上查询涵盖了Oracle数据库管理中常用的一些SQL语句,对于日常维护和性能调优非常有帮助。

    oracle 维护常用SQL

    根据给定的文件信息,以下是对...以上SQL语句涵盖了Oracle数据库维护中的多个核心方面,从存储管理到性能监控,再到锁定和版本信息,对于DBA和数据库开发人员来说,掌握这些查询对于确保数据库高效稳定运行至关重要。

    Oracle SQL 性能优化

    ### Oracle SQL 性能优化关键知识点 #### 一、选择最有效率的表名顺序 在多表连接查询中,合理安排表的顺序对于提升查询性能至关重要。具体来说,应尽可能选择行数较少的表作为驱动表(即查询最先访问的表)。这种...

    oracle常用经典SQL查询方案

    根据给定的文件信息,以下是对“oracle常用经典SQL查询方案”的详细解析,涉及的知识点主要包括Oracle数据库中的数据字典视图、空间管理、对象管理、版本查询、数据库模式、性能监控等方面。 ### 1. 查询表空间大小...

    oracle常用SQL查询

    根据提供的文件信息,我们可以归纳出一系列与Oracle数据库管理和查询相关的知识点。这些知识点涵盖了从基本的表空间、数据文件管理到更高级的回滚段、控制文件等查询技巧,对于希望成为Oracle DBA(数据库管理员)的...

    Oracle维护常用SQL语句汇总

    - `v$version` 是Oracle中的一个动态性能视图,用于显示Oracle实例的版本信息。 - 通过这个查询可以了解当前Oracle数据库的具体版本,这对于确保数据库补丁的正确安装以及兼容性检查非常重要。 ### 2. 查询表空间的...

    SQLServer和Oracle的常用函数

    在数据库管理领域,SQL Server和Oracle都是广泛应用的关系型数据库管理系统。它们都提供了丰富的函数来处理数据,以满足各种复杂的查询需求。以下是对SQL Server和Oracle常用函数的详细讲解。 1. **字符串函数** ...

    Oracle常用SQL语句

    Oracle数据库系统是世界上最广泛使用的数据库管理系统之一,它提供了丰富的SQL(结构化查询语言)支持来管理和操作数据库。以下是一些在Oracle中常用的SQL语句,涵盖了数据库管理、性能监控和信息查询等多个方面: ...

    oracle查看系统对象sql语句

    这条SQL语句返回快照的所有者、快照名称、主表名称、最后一次刷新时间以及下次预计刷新的时间。 #### 查看同义词 - **SQL语句**: ```sql SELECT * FROM SYNONYM; ``` - **说明**: - `SYNONYM`视图提供了同义...

    Oracle维护常用SQL语句

    此查询用于检查数据库中的回滚段,了解其状态、初始扩展大小、下一次扩展大小等,对于监控和管理事务处理非常重要。 ### 4. 控制文件信息查询 SQL语句: ```sql select name from v$controlfile; ``` 控制文件是...

Global site tag (gtag.js) - Google Analytics