【发布时间】:2017-01-27 01:58:21
【问题描述】:
我的应用程序使用 Oracle 上的 JDBC 驱动程序运行 select sql 查询,并将数据存储在结果集中。然后通过使用缓冲区写入器/文件写入器将信息写入 xml。
** 奇怪的行为:使用 Oracle 11g 运行相同的代码需要 2 小时才能完成,而对于 12 C 则需要 @ 12 小时。
** 我使用的 JDBC 驱动与 11g 和 12c 兼容。两个数据库上的数据相同。两个数据库都是独立的实例,所以没有迁移问题。 有人可以帮忙吗,我该如何调试呢?
** 选择查询使用绑定参数 IN 子句,其中包含 1000 个值。
【问题讨论】:
-
尝试直接在两个实例上运行查询(使用一些客户端 sqlplus、toad 等)以检查 - 是 java 和驱动程序问题..还是 db 问题。
-
Oracle 12c 很可能选择了一个不同的、比 11g 更慢的执行计划。这是升级到新数据库版本时您一直期望的那种差异。使用客户端工具(Toad、SQL Develeoper、SQL*plus 等)检索每个系统上的执行计划并进行比较。
-
AWR 报告也值得一看
-
这也可能是分配给 12c db 的内存不同 - 例如,当我们将 10g solaris db 迁移到 11g Linux ASM 时,我们丢失了 solaris 的大量文件/系统缓存为我们处理,这意味着我们的 SGA 和/或 PGA(我忘了是哪个)在 11g 实例上被严重低估了。将其提高到 32GB(而不是之前的 2GB!)极大地提高了性能。最有可能的是,您遇到了迄今为止所建议的事情的组合
标签: java jdbc oracle11g oracle12c