一条sql突然执行变慢,耗时9秒,应用是不能改的,只能从数据库方面下手解决
步骤思路:
1:查看sql是否走索引
2:查看索引是否失效
3:hint 强制走索引(只是用来查看hint状态下,查询是否更改,应用是不能改的)
4:收集该表所有信息(包括索引)
5:分析该表所有信息(包括索引)
6:再次执行并查看
注意:哪个用户执行较慢,就用哪个用户进行 *** 作,这样才准确
应该是之前连接数太多没有断开,内存无法释放,所以会出现这个问题。
检查下应用软件的问题吧
还有朋友遇到这样的问题,就是查看session时发现DBSNMP在不断联oracle又死掉而不释放进程眼看session数不断增大直到超过最大进程数,最后在’服务‘里将DBSNMPEXE停掉才解决问题。
在oracle中
不关是执行sql还是存储过程,当你第一次执行的时候需要对相关语句进行相关权限、对象等分析,这个过程会产生执行计划,叫做硬解析,如果分析通过,之后将语句转化成ascii等效数字码,再通过hash算法得到散列值,然后检查库缓存中是否存在同样hash值的语句。
如果存在,就是软解析然后就执行语句得出结果所以第一次执行的时候要是硬解析,速度较慢,而第二次已经以后多次执行的时候是软解析,速度较快大概就这样
如果要详细说
这东西几个钟头都说不完的
详解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数据库的机器这样
看了你的补充,你试试看换个端口还会不会这样,默认oracle是1521端口,你换一个看
楼主的语法是按orcale来的吧?sql server2000中的trigger中没有before、for each row、new等关键字。下面我写了个,能实现你的功能,只是不知道有没有性能更好的写法。期待更佳的
if exists(select from sysobjects where name='Insert_Or_Update_sal')
drop trigger Insert_Or_Update_sal
go
CREATE TRIGGER Insert_Or_Update_sal
ON TEACHER
FOR insert,update
AS
BEGIN
进行连接本地ORACLE数据库m_pConnection-> ConnectionString =
"Provider=OraOLEDBORACLE1;
Data Source=jiey;
User Id=system;
Password=manager; ";
m_pConnection-> Open( " ", " ", " ",adConnectUnspecified );
这部分整个运行期只做一次,连接是很费时间的,不要总是open
如果不需要查看数据就不要m_pRecordset-> Open了
直接用m_pConnection执行SQL语句插入
我想这样会快很多
以上就是关于oracle数据库执行sql很慢怎么回事全部的内容,包括:oracle数据库执行sql很慢怎么回事、Oracle10数据库周期性变慢、oracle数据库存储过程执行慢时如何优化等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)