Oracle 函数在模式较多的情况下非常慢



我试图描述我的问题。我们得到了两个数据库:一个用于开发的测试数据库和一个生产数据库。两个数据库上的所有表、视图、包、函数、触发器等都是相同的。数据库的结构和内容应该相同,但不知何故,在某些部分它们的工作方式不同。

测试数据库。

  • 架构 1/包 1/函数 1
  • 架构 2/包 2/过程 1

产品.DB。

  • 架构 1/包 1/函数 1
  • 架构 2/包 2/过程 1
  • 模式2/包1/功能1 <--紧急解决方案ATM:完全相同的代码, 刚刚从架构 1 移动到架构 2

在测试数据库中。Schema2/Package2/Procedure1 调用 Schema1/Package1/Function1。它工作正常(几秒钟)。

在产品数据库中。Schema2/Package2/Procedure1 调用 Schema1/Package1/Function1。它的工作真的很慢。(更多分钟)

在 Prod DB 中,Schema2/Package2/Procedure1 调用 Schema2/Package1/Function1。它的工作速度同样快。

我们应该在哪里检查 Prod DB 中的问题。ini 文件或其他地方的哪些设置可能出错?

有什么想法吗?

让我们尝试一种自上而下的方法。 测试数据库和产品数据库是否位于不同的服务器上? 如果是这样,是否有可能一台服务器比另一台服务器负载更重? (查看 top、sar 等,以了解整体系统资源及其使用方式。

其次,在数据库级别,Oracle 具有很好的工具,可帮助您确定任何性能问题的根本原因。 第一步,您在测试和生产中是否有相同的执行计划? 如果执行计划发生变化(它可以基于数据量和数据分布等因素),这可能会对性能产生巨大影响。 (使用 dbms_xplan 显示执行计划。

如果执行计划没有差异,则还应考虑数据量和分布的差异是否会导致生产性能下降,即使执行计划相同也是如此。

最后,您可以使用像Tanel Poder的鲷鱼.sql(http://blog.tanelpoder.com/files/scripts/snapper.sql)这样的工具来准确查看时间花在哪里。 这可能会导致您找到性能问题的根本原因。

你的问题的性质是这样的,真的没有具体的答案。 我只是试图让你指出正确的方向,并给你一些思考点。

相关内容

最新更新