问题描述
你好,
我最近在Microsoft Windows 2012 R2 64位服务器16gb RAM上安装了Oracle 12c版本2,并在此服务器上创建了一个数据库,从运行在Microsoft Windows 2003 R2 64位12gb RAM上的11gR1 (11.1.0.6) 数据库中导入了数据。SQL的性能是相当的,但是当涉及到运行plsql代码时,它在12c上的速度要慢得多。
以下是两种环境的简单测试代码和输出 (注意: 我已将11g经过的时间附加到12c上,以节省您上下滚动)。600万美元问题-我应该在哪里寻找为什么会发生这种情况?
我应该添加两个服务器都是在不同物理主机上运行的VM (但两个主机都是相同的)。
非常感谢,
约翰
我最近在Microsoft Windows 2012 R2 64位服务器16gb RAM上安装了Oracle 12c版本2,并在此服务器上创建了一个数据库,从运行在Microsoft Windows 2003 R2 64位12gb RAM上的11gR1 (11.1.0.6) 数据库中导入了数据。SQL的性能是相当的,但是当涉及到运行plsql代码时,它在12c上的速度要慢得多。
以下是两种环境的简单测试代码和输出 (注意: 我已将11g经过的时间附加到12c上,以节省您上下滚动)。600万美元问题-我应该在哪里寻找为什么会发生这种情况?
我应该添加两个服务器都是在不同物理主机上运行的VM (但两个主机都是相同的)。
12.2.0.1.0 SQL> select 1 from dual; 1 ---------- 1 Elapsed: 00:00:00.01 (11.1.0.6: 00:00:00.00) 12.2.0.1.0 SQL> declare 2 x varchar2(30); 3 begin 4 select 'x' into x from dual; 5 end; 6 / PL/SQL procedure successfully completed. Elapsed: 00:00:00.00 (11.1.0.6: 00:00:00.00) 12.2.0.1.0 SQL> declare 2 x varchar2(30); 3 begin 4 for i in 1..1000 loop 5 select i into x from dual; 6 end loop; 7 end; 8 / PL/SQL procedure successfully completed. Elapsed: 00:00:00.14 (11.1.0.6: 00:00:00.03) 12.2.0.1.0 SQL> declare 2 x varchar2(30); 3 begin 4 for i in 1..10000 loop 5 select i into x from dual; 6 end loop; 7 end; 8 / PL/SQL procedure successfully completed. Elapsed: 00:00:01.12 (11.1.0.6: 00:00:00.20) 12.2.0.1.0 SQL> declare 2 x varchar2(30); 3 begin 4 for i in 1..100000 loop 5 select i into x from dual; 6 end loop; 7 end; 8 / PL/SQL procedure successfully completed. Elapsed: 00:00:10.54 (11.1.0.6: 00:00:01.51) 12.2.0.1.0 SQL> declare 2 x varchar2(30); 3 begin 4 for i in 1..1000000 loop 5 select i into x from dual; 6 end loop; 7 end; 8 / PL/SQL procedure successfully completed. Elapsed: 00:01:29.06 (11.1.0.6: 00:00:15.12) 12.2.0.1.0 SQL> spool off 11.1.0.6.0 SQL> select 1 from dual; 1 ---------- 1 Elapsed: 00:00:00.00 11.1.0.6.0 SQL> declare 2 x varchar2(30); 3 begin 4 select 'x' into x from dual; 5 end; 6 / PL/SQL procedure successfully completed. Elapsed: 00:00:00.00 11.1.0.6.0 SQL> declare 2 x varchar2(30); 3 begin 4 for i in 1..1000 loop 5 select i into x from dual; 6 end loop; 7 end; 8 / PL/SQL procedure successfully completed. Elapsed: 00:00:00.03 11.1.0.6.0 SQL> declare 2 x varchar2(30); 3 begin 4 for i in 1..10000 loop 5 select i into x from dual; 6 end loop; 7 end; 8 / PL/SQL procedure successfully completed. Elapsed: 00:00:00.20 11.1.0.6.0 SQL> declare 2 x varchar2(30); 3 begin 4 for i in 1..100000 loop 5 select i into x from dual; 6 end loop; 7 end; 8 / PL/SQL procedure successfully completed. Elapsed: 00:00:01.51 11.1.0.6.0 SQL> declare 2 x varchar2(30); 3 begin 4 for i in 1..1000000 loop 5 select i into x from dual; 6 end loop; 7 end; 8 / PL/SQL procedure successfully completed. Elapsed: 00:00:15.12 11.1.0.6.0 SQL> spool off复制
非常感谢,
约翰
专家解答
我认为您的12.2安装不正确。我得到的数字等于或优于您的v11数字,这仅在我的笔记本电脑上,无论是在Windows端口上,还是通过虚拟盒在Linux上。
也许尝试在其上运行PL/SQL profiler,看看两者之间的区别在哪里...但我怀疑那里有平台或操作系统级别的差异。
SQL> set timing on SQL> declare 2 x varchar2(30); 3 begin 4 select 'x' into x from dual; 5 end; 6 / PL/SQL procedure successfully completed. Elapsed: 00:00:00.00 SQL> SQL> declare 2 x varchar2(30); 3 begin 4 for i in 1..1000 loop 5 select i into x from dual; 6 end loop; 7 end; 8 / PL/SQL procedure successfully completed. Elapsed: 00:00:00.01 SQL> declare 2 x varchar2(30); 3 begin 4 for i in 1..10000 loop 5 select i into x from dual; 6 end loop; 7 end; 8 / PL/SQL procedure successfully completed. Elapsed: 00:00:00.10 SQL> SQL> declare 2 x varchar2(30); 3 begin 4 for i in 1..100000 loop 5 select i into x from dual; 6 end loop; 7 end; 8 / PL/SQL procedure successfully completed. Elapsed: 00:00:00.93 SQL> SQL> declare 2 x varchar2(30); 3 begin 4 for i in 1..1000000 loop 5 select i into x from dual; 6 end loop; 7 end; 8 / PL/SQL procedure successfully completed. Elapsed: 00:00:09.07 SQL> SQL> select banner from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production PL/SQL Release 12.2.0.1.0 - Production CORE 12.2.0.1.0 Production TNS for 64-bit Windows: Version 12.2.0.1.0 - Production NLSRTL Version 12.2.0.1.0 - Production 5 rows selected. Elapsed: 00:00:00.02复制
也许尝试在其上运行PL/SQL profiler,看看两者之间的区别在哪里...但我怀疑那里有平台或操作系统级别的差异。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
600次阅读
2025-04-15 17:24:06
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
583次阅读
2025-04-18 14:18:38
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
494次阅读
2025-04-08 09:12:48
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
477次阅读
2025-04-20 10:07:02
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
462次阅读
2025-04-22 00:20:37
Oracle 19c RAC更换IP实战,运维必看!
szrsu
439次阅读
2025-04-08 23:57:08
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
437次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
426次阅读
2025-04-17 17:02:24
火焰图--分析复杂SQL执行计划的利器
听见风的声音
369次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
360次阅读
2025-04-15 14:48:05