当前位置:首页 » 编程语言 » oracle慢sql

oracle慢sql

发布时间: 2022-09-03 17:04:32

‘壹’ oracle 查询的sql语句特别慢,是什么原因,是or特别慢吗,用什么优化,急急急!!!

把查询计划的内容发出来,你这一大堆代码谁能看出来啥啊。看你的代码这么长,条件那么多,语句用了函数,很多低效的or,not in等操作,另外还用了group by,order by,左右连接等等,如果表数据量很大的话,你这个语句性能不好是预料中的事情。如果你这条语句无法优化,建议从调整表结构角度考虑

‘贰’ oracle 查询语句 第一次执行很快,第二次执行就很慢 。是什么原因

oracle sql 第一次查询快, 以后查询慢
大多数情况下,用oracle, 第一次查询慢, 第二次查询肯定比第二次查询快对吧,
但对于这种情况,第一次查询快, 以后查询慢。
Cardinality Feedback基数反馈, 是版本11.2中引入的关于SQL 性能优化的新特性,该特性主要针对 统计信息陈旧、无直方图或虽然有直方图但仍基数计算不准确的情况, Cardinality基数的计算直接影响到后续的JOIN COST等重要的成本计算评估,造成CBO选择不当的执行计划。以上是Cardinality Feedback特性引入的初衷。
基数反馈多少也造成了一些麻烦,典型的情况是测试语句性能时,第一次的性能最好,之后再运行其性能变差。
如何禁用Cardinality Feedback基数反馈
对于这些”惹火”特性,为了stable,往往考虑关闭该特性。
可以通过多种方法禁用该特性
1. 使用 _optimizer_use_feedback 隐藏参数
session 级别
SQL> alter session set “_optimizer_use_feedback”=false;
会话已更改。
system级别
SQL> alter system set “_optimizer_use_feedback”=false;
系统已更改。
————————————————
原文链接:https://blog.csdn.net/demonson/article/details/80522150

‘叁’ oracle 一句sql 执行速度特别慢,请指导如何改写,谢谢

selectf.channel_name,c.name,c.rule_detail,count(1)monthly,rank()over(orderbycount(1)desc)rank
fromcljy.sys_cljyc,channel_paylog_dayfwhereSUBSTR(f.recv_time,1,6)=
to_char(sysdate,'yyyymm')andc.namelike'%经典%'and
exists(selectcount(1)fromcljy.sys_pay_prize_targetj,nt_staff_channelgwherej.device_number=f.serial_numberandg.depart_id=f.recv_depart_id)--andrownum<2
groupbyf.channel_name,c.name,c.rule_detail
先把andrownum<2注释去掉能执行成功的话就没错,老感觉这个语句死循环了。。。测完再回复我,给你看

‘肆’ 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时,慢如蜗牛,如何优化

至少可以改成这个样子:
--------------------------------------------------------
select b.reach_item_no as 小区编号,
c.reach_item_name as 小区名称,
substr(b.floor_no, 1, 2) as 楼栋,
count(1) as 应抄数,
sum(decode(d.mp_item_no, null, 0, 1)) as 实抄数,
to_char(round((sum(decode(d.mp_item_no, null, 0, 1)) / count(1)) * 100)) as 抄收率,
'20090701' as 抄收日期
from meter_running a,
customer_files b,
reach_item_location c,
raw_day_e d
where a.customer_no = b.customer_no
and b.reach_item_no = c.reach_item_no
and d.mp_item_no(+) = a.mp_item_no
and d.data_dt(+) = '20090701'
group by substr(b.floor_no, 1, 2), b.reach_item_no, c.reach_item_name,
order by 1, 3
--------------------------------------------------------
如果执行还慢,那么就要看索引是否建了,统计信息是否收集,分配的pga是否够大。这种关联使用hash join应该效率更高,如果分配的pga太小,走nl,估计会比较慢。

‘陆’ 求助各位大侠,关于plsql连接oracle 慢

1、你在服务器上用plsql连接没有问题
说明:第一不是服务器问题,第二不是plsql软件问题
2、你在自己电脑上连接sql正常
说明:不是网络问题
3、但是你在你自己的电脑上连接服务器上的oracle有问题
个人认为应该从一下两个方面找原因
第一:你的plsql版本和你在服务器上测试时候用的版本是否一致
第二:你本地的oracle客户端版本和服务器上的版本是否一致
第三:你本地的tns文件和服务器上的tns文件是否一致
我没有遇到过这样的问题,但是如果我遇到了也就这个思路了!

‘柒’ Oracle:怎么修改这个sql来提高查询效率现在5秒100条太慢了


SELECTA.ID,SUM(CASEWHENA.NAME='a'ANDB.NAME='S'THENSZEND),
SUM(CASEWHENA.NAME='b'ANDB.NAME='SS'THENSZEND)
FROMAJOINBONA.ID=B.ID

‘捌’ oracle sql 查询我使用自已写的函数查询很快,加了函数做条件就很慢是为什么

慢是因为
对于 几十万条记录左右,
你那个 test(a) 函数, 需要执行 很多次, 每行执行一次, 然后判断 LIKE '%123%'

至于:
select a,b, test(a) c from demo; --只这样查很快

我估计你使用的是 PLSQL Developer。
查询的时候, 默认是查询第一页, 因此很快。
因为只显示少部分行。
例如一页20行的话, 那么也就执行你那个函数 20次。

‘玖’ oracle数据库执行sql很慢怎么回事

由于经常执行sql语句,如果一条一条执行效率低下。
oarclecmd.commandtext
=
sqlstr;
oraclecmd.executenonquery();
sqlstr
可以写成如下所示语句
begin
sql1;
sql2;
......
sqln;
end;
//注意此处的分号很重要
然后同样调用executenonquery()方法,可以一次执行多条sql语句。

热点内容
如何给孩子配置一份保险 发布:2025-01-15 18:07:53 浏览:456
思科模拟器ftp配置 发布:2025-01-15 18:01:53 浏览:196
wd软件如何修改密码 发布:2025-01-15 17:59:57 浏览:715
公共代理服务器地址 发布:2025-01-15 17:59:53 浏览:818
android文件图片 发布:2025-01-15 17:39:44 浏览:206
linux的路径怎么写 发布:2025-01-15 17:18:49 浏览:185
php解压程序 发布:2025-01-15 17:06:22 浏览:142
刷助力脚本 发布:2025-01-15 17:02:31 浏览:520
c盘里的用户文件夹可以删除 发布:2025-01-15 16:56:45 浏览:951
虚幻4编译到哪里 发布:2025-01-15 16:50:19 浏览:756