oracle数据库运行sql很卡很慢很顿,看等待事件都是cursor:pin s on x,这是啥

作者&投稿:泷满 (若有异议请与网页底部的电邮联系)
oracle数据库运行sql很卡很慢很顿,看等待事件都是cursor:pin s on x,这是啥~

详解cursor: pin S wait on X等待事件 ‘cursor: pin * events’等待事件 该类等待事件一般是为了pin相关的子游标 ‘Cursor: pin S on X’ 最常见的等待事件, 进程为了共享操作例如执行pin游标而以SHRD S mode申请mutex, 但是未立即获得。原因是该游标被其他进程以EXCL X mode 持有了。 实际该 cursor: pin S wait on X等待事件往往是由于其他因素诱发的。Mutex争用仅仅是问题的症状,但根本原因需要Database Consultant 进一步挖掘。 下面我们列出一些已知的常见案例, 在这些例子中可以看到 我上面提到的 Mutex的争用仅仅是伪争用: 过多的子游标 High Version Counts 过多的子游标版本Version Count可能导致Mutex 争用,一般一个SQL的Version Count不要高于500。 检查High Version Count很简单, 在AWR里就有SQL ordered by High Version Count,也可以写SQL查V$SQL、V$SQLAREA 昂贵的X$、V$视图查询 一些对于V$、X$视图的查询,需要访问X$KGL*之类的fixed table,可能触发Mutex争用。 Mutex持有者得不到CPU Mutex持有者若得不到足够的CPU片可能一直阻塞他人,直到它拿到需要的CPU。 这种情况可能由于OS操作系统的实际情况或者使用Resource Manager而引起。需要配合AWR中的Host CPU、Instance CPu一起看。 已经被KILLED的SESSION仍持有Mutex 当session正持有Mutex,而其对应的Process被强制KILL掉, 则直到PMON彻底清理掉该Dead Process并释放Mutex,其他session才能不再等待。 诊断该类问题,最好能检查PMON的TRACE。 当然也存在部分BUG会导致PMON清理过程非常慢。 举例来说,bug 9312879描述了一种场景:PMON 需要获得某个Mutex以便清理某个dead process,但是该Mutex又被其他进程持有,则PMON甚至无法开始真正清理并释放Mutex。 如果自己搞不定可以找ASKMACLEAN专业ORACLE优化团队成员帮您搞定!

cursor: pin * events’等待事件

该类等待事件一般是为了pin相关的子游标


cursor: pin S 当一个进程以共享pin模式申请一个Mutex,而不能立即获得时,进入cursor: Pin S等待事件。 Mutex Pin是以共享类型的操作,例如执行一个游标。

当一个进程等在cursor: pin S上,说明该进程在对一个共享的mutex pin
参考或取消参考时,有其他的进程也正在为同样的cursor heap创建或者取消一个共享Mutex pin。 实际上cursor: pin S
等待事件应当很少见,因为更新共享Mutex pin 的reference 应当是很快的。 再重复一次,S mode的Mutex可以被并发持有,
但是更新Mutex的Ref Count仍需要串行地处理 。 一旦reference count被增加好,则后续进程将可以为同样的cursor
heap增加reference count。 因此此处mutex 即可以扮演Latch的角色(串行控制ref
count的更新),又可以扮演pin的角色(ref count本身)。





详见 《深入理解Oracle中的Mutex》一文
http://www.askmaclean.com/archives/understanding-oracle-mutex.html

详解cursor: pin S wait on X等待事件
‘cursor: pin * events’等待事件
该类等待事件一般是为了pin相关的子游标
‘Cursor: pin S on X’ 最常见的等待事件, 进程为了共享操作例如执行pin游标而以SHRD S mode申请mutex, 但是未立即获得。原因是该游标被其他进程以EXCL X mode 持有了。
实际该 cursor: pin S wait on X等待事件往往是由于其他因素诱发的。Mutex争用仅仅是问题的症状,但根本原因需要Database Consultant 进一步挖掘。

下面我们列出一些已知的常见案例, 在这些例子中可以看到 我上面提到的 Mutex的争用仅仅是伪争用:

过多的子游标 High Version Counts

过多的子游标版本Version Count可能导致Mutex 争用,一般一个SQL的Version Count不要高于500。
检查High Version Count很简单, 在AWR里就有SQL ordered by High Version Count,也可以写SQL查V$SQL、V$SQLAREA

昂贵的X$、V$视图查询

一些对于V$、X$视图的查询,需要访问X$KGL*之类的fixed table,可能触发Mutex争用。

Mutex持有者得不到CPU

Mutex持有者若得不到足够的CPU片可能一直阻塞他人,直到它拿到需要的CPU。
这种情况可能由于OS操作系统的实际情况或者使用Resource Manager而引起。需要配合AWR中的Host CPU、Instance CPu一起看。

已经被KILLED的SESSION仍持有Mutex

当session正持有Mutex,而其对应的Process被强制KILL掉, 则直到PMON彻底清理掉该Dead Process并释放Mutex,其他session才能不再等待。 诊断该类问题,最好能检查PMON的TRACE。 当然也存在部分BUG会导致PMON清理过程非常慢。
举例来说,bug 9312879描述了一种场景:PMON 需要获得某个Mutex以便清理某个dead process,但是该Mutex又被其他进程持有,则PMON甚至无法开始真正清理并释放Mutex。

如果自己搞不定可以找ASKMACLEAN专业ORACLE优化团队成员帮您搞定!


怎么用linux命令连接racle数据库(linux如何连接数据库)
1、登录到Linux后,就可以在命令窗口直接对Linux进行操作了。先将用户切换到Oracle。当显示为[oracle@db~]$时,说明切换成功。命令:su-oracle;2、切换到Oracle用户之后,我们登录到到sqlplus,使用dba权限登录到sqlplus。在sqlplus中,我们使用conn连接一下我们具体想要操作的数据库用户。命令:connusername...

oracle 如何将本地数据导入到前置机
具体方法:在CMD模式下执行以下命令exp username\/password服务器端数据库ID file=c:\/文件名.dmp_缦旅?:exp djyy\/djyyzhwx file=c:\/djyy20090921.dmp_xp wxzd\/wxzdzhwx file=c:\/wxzd20090921.dmp_racle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。_窃谑...

Java培训班一般都教什么内容?
2、掌握Java Web开发技术:Java开发中使用到的Web前端技术,HTML5+CSS3,JavaScript操作BOM和DOM,JQuery的选择器、事件处理、动画效果,MySQL数据库技术,JDBC技术、JSP、Servlet、EL和JSTL、过滤器和监听器、AJax异步请求等,Linux技术、SVN、Linux环境下项目发布部署等。3、掌握使用流行框架SSM\\SSH技术实现...

西北地区基于3S技术野外地质工作管理与服务体系构建
数据资源:地球基本数据(VritualEarthData)、中国省界瓦片数据(clipline.HDF)、Oracle数据库(beidou.dmp); 站点资源:IGServer服务器、系统站点(VirtualEarthDotNet); 软件资源:O racle10g或以上版本O racle客户端\/服务器、GSIGrid野外地质调查管理服务与安全保障系统-信息平台 BDServer、北斗应急保障系统站点配置工具MVECo...

jdbc 连接mysql时中的URL怎么写的
\/\/ MySQL的JDBC URL编写方式:jdbc:mysql:\/\/主机名称:连接端口\/数据库的名称?参数=值 \/\/ 避免中文乱码要指定useUnicode和characterEncoding \/\/ 执行数据库操作之前要在数据库管理系统上创建一个数据库,名字自己定, \/\/ 下面语句之前就要先创建javademo数据库 String url = "jdbc:mysql:...

oracle错误: ORA-01033
提示:第 1 行出现错误: ORA-01157: 无法标识\/锁定数据文件 19 - 请参阅 DBWR 跟踪文件 ORA-01110: 数据文件 19: ''C:\\oracle\\oradata\\oradb\\FYGL.ORA' 这个提示文件部分根据每个人不同情况有点差别。 继续输入 SQL>alter database datafile 19 offline drop; 提示:数据库已更改。循环使用最...

oracle redolog大小不一致可以吗
可以的_racle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。_窃谑菘饬煊蛞恢贝τ诹煜鹊匚坏牟贰?梢运_racle数据库系统是世界上流行的关系数据库管理系统,_低晨梢浦残院谩⑹褂梅奖恪⒐δ芮浚视糜诟骼啻蟆⒅小⑿∥⒒肪场?_且恢指咝_实摹⒖煽啃院玫摹...

佳木斯市15092831291: oracle数据库执行sql很慢怎么回事 -
当涂建奥义: 一条sql突然执行变慢,耗时9秒,应用是不能改的,只能从数据库方面下手解决 步骤思路:1:查看sql是否走索引2:查看索引是否失效3:hint 强制走索引(只是用来查看hint状态下,查询是否更改,应用是不能改的)4:收集该表所有信息(包括索引)5:分析该表所有信息(包括索引)6:再次执行并查看 注意:哪个用户执行较慢,就用哪个用户进行操作,这样才准确

佳木斯市15092831291: oracle数据库运行sql很卡很慢很顿,看等待事件都是cursor:pin s on x,这是啥 -
当涂建奥义: 详解cursor: pin S wait on X等待事件 'cursor: pin * events'等待事件 该类等待事件一般是为了pin相关的子游标 'Cursor: pin S on X' 最常见的等待事件, 进程为了共享操作例如执行pin游标而以SHRD S mode申请mutex, 但是未立即获得....

佳木斯市15092831291: 执行一下Oracle SQL时,慢如蜗牛,如何优化
当涂建奥义: 将子查询的排序给去了 --------------------- select i.reach_item_no as 小区编号, i.reach_item_name as 小区名称, i.floor_no as 楼栋, g.num1 as 应抄数, i.num2 as 实抄数, to_char( round((i.num2/g.num1)*100)) as 抄收率, i.data_dt as 抄收日...

佳木斯市15092831291: oracle 中sql执行超慢几乎查询不出来 -
当涂建奥义: select LINKEDSTATION from rstation t left join bdz_app b on b.OBJ_ID =t.LinkedStation left join WHBZPZ w on b.OBJ_ID =PZ.WHDW left join DEPS d on PZ.WHDW = d.OBJ_ID and d.OBJ_ID =' '63EBEC8E-00165''

佳木斯市15092831291: oracle存储过程执行速度很慢是什么原因 -
当涂建奥义: SQL文的执行效率低.需要对存储过程中每个SQL文的执行效率进行调试.

佳木斯市15092831291: oracle数据库很慢 几乎卡住了电话 是什么原因、看了下等待事件很多 resmgr:cpu qu -
当涂建奥义: resmgr:cpu quantum是Resource Manager特性导致的等待事件,理论上只有版本10g以后才可能出现,同时应当仅在resource manager plan被激活的时间窗口中发生该等待事件.该等待事件存在的意义是当resource manager控制CPU调度时,...

佳木斯市15092831291: SQL一运行就卡死 应该从哪方面入手解决比较好 -
当涂建奥义: 1. SQL优化的原则是:将一次操作需要读取的BLOCK数减到最低,即在最短的时间达到最大的数据吞吐量. 调整不良SQL通常可以从以下几点切入: ? 检查不良的SQL,考虑其写法是否还有可优化内容 ? 检查子查询 考虑SQL子查询是否可以用简单连接的方式进行重新书写 ? 检查优化索引的使用 ? 考虑数据库的优化器 2. 避免出现SELECT * FROM table 语句,要明确查出的字段.

佳木斯市15092831291: ORACLE 直接用SQL 很快 ,用视图很慢 -
当涂建奥义: 原因:"SELECT * FROM (${你的sql语句})a" 等价于 " SELECT * FROM ${由你的sql创建的视图名称}" 也就是说, 属于一个查询里面套用子查询了, 得把你的sql语句全部查出来. 所以用"EXPLAIN ${你的sql语句}" 你会看到有 "Using temporary; Using filesort" 全表查 而"${你的sql语句}" 直接执行的话, 相当于就少了一层. 不用全表查, 可以很轻松的走索引了(如果有的话) 以上纯属个人见解, 若有不对, 还请大神们纠正.

佳木斯市15092831291: oracle数据库存储过程执行慢时如何优化 -
当涂建奥义: 1 首先看看,先分析慢的原因,一部分是因为循环次数多,一部分是因为查询数据量大慢.2 可以从优化查询入手,比如某次查询的sql里面的数据,条件字段没有建索引,导致了全表扫描,是不是 只需要几个字段,但是你写了 select * 等等,总之要优化数据的速度.2 可以从循环逻辑看起,有些循环可能是不必要的,能不能通过条件查询来替代循环,总之要从逻辑上优化代码

佳木斯市15092831291: oracle数据库一到高峰期救很卡 -
当涂建奥义: 你要查卡在什么地方了.是什么导致的卡,是锁?还是物理读或者是逻辑读增高,或者是cpu或者是io等等原因.找到原因,才能有相应的解决办法,这么说几乎没用,不过还是要找到原因才行.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网