问题描述
嗨
有点奇怪-可能是错误。
如果运行第一个SELECT,则会得到167行,这是正确的。
但是,如果你运行第二个选择,你会得到10,000行,这是不正确的。
如果取消注释rownum谓词,则会获得正确的167行。
我正在针对dba_hist_active_sess_history使用此版本,以获取每小时一分钟的平均会话数和最大会话数。
我错过了什么吗?我可以让它工作的唯一方法是添加rownum <1e28谓词,我认为这是停止CBO重写查询。
感谢和问候
伊恩
有点奇怪-可能是错误。
DROP TABLE xxibpc_test; CREATE TABLE xxibpc_test AS WITH data AS (SELECT LEVEL l_no FROM dual CONNECT BY LEVEL <= 10000) SELECT 1 instance_number ,1 + l_no session_id ,10 + l_no session_serial# ,CAST (systimestamp - ((1 / 24 / 60) * l_no) AS TIMESTAMP(3)) sample_time FROM data; SELECT trunc(sample_time,'HH24') sample_hr ,COUNT(*) cnt FROM xxibpc_test GROUP BY trunc(sample_time,'HH24') ORDER BY 1; SELECT trunc(sample_date,'HH24') sample_hr ,trunc(AVG(sessions)) avg_sessions ,MAX(sessions) max_sessions FROM (SELECT trunc(sample_time,'Mi') sample_date ,COUNT(DISTINCT to_char(instance_number) || to_char(session_id) || to_char(session_serial#)) sessions FROM xxibpc_test WHERE 1=1 --AND rownum < 1e28 -- Bug Fix GROUP BY trunc(sample_time,'Mi')) GROUP BY trunc(sample_date,'HH24') ORDER BY 1;复制
如果运行第一个SELECT,则会得到167行,这是正确的。
但是,如果你运行第二个选择,你会得到10,000行,这是不正确的。
如果取消注释rownum谓词,则会获得正确的167行。
我正在针对dba_hist_active_sess_history使用此版本,以获取每小时一分钟的平均会话数和最大会话数。
我错过了什么吗?我可以让它工作的唯一方法是添加rownum <1e28谓词,我认为这是停止CBO重写查询。
感谢和问候
伊恩
专家解答
是的-这是一只虫子。但是它已在12.2中修复,并且有一个适用于12.1.0.2的补丁程序。
同时,您可以通过将 _ optimizer_aggr_groupby_elim设置为false来解决它:
有关更多详细信息,请参见MOS注释21826068.8。
同时,您可以通过将 _ optimizer_aggr_groupby_elim设置为false来解决它:
alter session set "_optimizer_aggr_groupby_elim"=true; select count(*) from ( SELECT trunc(sample_date,'HH24') sample_hr ,trunc(AVG(sessions)) avg_sessions ,MAX(sessions) max_sessions FROM (SELECT trunc(sample_time,'Mi') sample_date ,COUNT(DISTINCT to_char(instance_number) || to_char(session_id) || to_char(session_serial#)) sessions FROM xxibpc_test WHERE 1=1 GROUP BY trunc(sample_time,'Mi')) GROUP BY trunc(sample_date,'HH24') ); COUNT(*) 10000 alter session set "_optimizer_aggr_groupby_elim"=false; select count(*) from ( SELECT trunc(sample_date,'HH24') sample_hr ,trunc(AVG(sessions)) avg_sessions ,MAX(sessions) max_sessions FROM (SELECT trunc(sample_time,'Mi') sample_date ,COUNT(DISTINCT to_char(instance_number) || to_char(session_id) || to_char(session_serial#)) sessions FROM xxibpc_test WHERE 1=1 GROUP BY trunc(sample_time,'Mi')) GROUP BY trunc(sample_date,'HH24') ); COUNT(*) 167复制
有关更多详细信息,请参见MOS注释21826068.8。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
655次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
625次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
530次阅读
2025-04-20 10:07:02
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
525次阅读
2025-04-08 09:12:48
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
479次阅读
2025-04-22 00:20:37
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
475次阅读
2025-04-17 17:02:24
Oracle 19c RAC更换IP实战,运维必看!
szrsu
457次阅读
2025-04-08 23:57:08
一页概览:Oracle GoldenGate
甲骨文云技术
456次阅读
2025-04-30 12:17:56
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
449次阅读
2025-04-22 00:13:51
火焰图--分析复杂SQL执行计划的利器
听见风的声音
404次阅读
2025-04-17 09:30:30