oraclesql慢
❶ 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优化团队成员帮您搞定!
❷ oracle数据库执行sql很慢怎么回事
由于经常执行sql语句,如果一条一条执行效率低下。
oarclecmd.commandtext
=
sqlstr;
oraclecmd.executenonquery();
sqlstr
可以写成如下所示语句
begin
sql1;
sql2;
......
sqln;
end;
//注意此处的分号很重要
然后同样调用executenonquery()方法,可以一次执行多条sql语句。
❸ oracle 查询的sql语句特别慢,是什么原因,是or特别慢吗,用什么优化,急急急!!!
把查询计划的内容发出来,你这一大堆代码谁能看出来啥啊。看你的代码这么长,条件那么多,语句用了函数,很多低效的or,not in等操作,另外还用了group by,order by,左右连接等等,如果表数据量很大的话,你这个语句性能不好是预料中的事情。如果你这条语句无法优化,建议从调整表结构角度考虑
❹ oracle sql 查询我使用自已写的函数查询很快,加了函数做条件就很慢是为什么
慢是因为
对于 几十万条记录左右,
你那个 test(a) 函数, 需要执行 很多次, 每行执行一次, 然后判断 LIKE '%123%'
至于:
select a,b, test(a) c from demo; --只这样查很快
我估计你使用的是 PLSQL Developer。
查询的时候, 默认是查询第一页, 因此很快。
因为只显示少部分行。
例如一页20行的话, 那么也就执行你那个函数 20次。
❺ 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优化团队成员帮您搞定!
❻ oracle数据库执行sql很慢怎么回事
一条sql突然执行变慢,耗时9秒,应用是不能改的,只能从数据库方面下手解决
步骤思路:
1:查看sql是否走索引
2:查看索引是否失效
3:hint 强制走索引(只是用来查看hint状态下,查询是否更改,应用是不能改的)
4:收集该表所有信息(包括索引)
5:分析该表所有信息(包括索引)
6:再次执行并查看
注意:哪个用户执行较慢,就用哪个用户进行操作,这样才准确
❼ 求助各位大侠,关于plsql连接oracle 慢
1、你在服务器上用plsql连接没有问题
说明:第一不是服务器问题,第二不是plsql软件问题
2、你在自己电脑上连接sql正常
说明:不是网络问题
3、但是你在你自己的电脑上连接服务器上的oracle有问题
个人认为应该从一下两个方面找原因
第一:你的plsql版本和你在服务器上测试时候用的版本是否一致
第二:你本地的oracle客户端版本和服务器上的版本是否一致
第三:你本地的tns文件和服务器上的tns文件是否一致
我没有遇到过这样的问题,但是如果我遇到了也就这个思路了!