暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 使用alter table收缩空间级联后,性能差了,为什么?

askTom 2017-08-04
349

问题描述

我们有一个没有分区的Oracle 12g数据库 (另一个问题是由于成本),它有一个表,在我们删除不需要的行之前变得非常大。
该表增长到超过1.5亿行,超过数据库的50% (分配了200gb)。
用户抱怨使用数据库的应用程序性能不佳 (它确实选择并且没有插入)。
我们让用户删除不需要的数据,表现在包含2000万行,没有性能提高。

使用 “alter table收缩空间级联” 后,数据库大小现在仅分配了70gb。
我们重新构建了表上的所有索引。
我们已经运行了GATHER_SCHEMA_STATS (用户,method_opt => '对于所有列',选项 => '收集STALE')

应用程序的性能 (仅选择) 现在甚至更差。
不幸的是,我们的dba指责应用程序 (第三方) 和应用程序支持指责我们的数据库。

由于表大小的减小,我期望selects的性能有所提高。
那么,关于为什么在缩小表并降低HWM之后我们的性能较差的任何想法?

在 “alter table” 和 “收集统计信息” 之后,我们还应该执行其他步骤吗?

专家解答

这是一个很好的例子,说明为什么在开始进行更改之前,您应该了解为什么某些事情会很慢。你可能会 “修理” 错误的东西!

因此,当您缩小表时,某些行将移至新的数据块。

为什么这是个问题?

我猜你的慢查询使用了一个索引。缩表后,它访问的行会分散在更多的数据块中。特别是你的查询得到的行。必须访问更多的块 => 数据库做更多的工作。数据库做更多的工作 => 查询速度较慢。

当然,这是我的猜测。有可能还有别的事情发生。要真正理解和帮助,我们需要查看SQL的执行计划。

因此,如果您需要进一步的帮助,请获取查询的执行计划并在此处发布。确保这包括实际的行和缓冲区统计信息!

如果您不确定如何执行此操作,请阅读is博客文章:

https://blogs.oracle.com/sql/how-to-create-an-execution-plan
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论