首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Oracle10g中启用/禁用ROW_MOVEMENT的影响是什么?

在Oracle10g中启用/禁用ROW_MOVEMENT的影响是什么?
EN

Stack Overflow用户
提问于 2013-10-17 14:54:54
回答 3查看 48.7K关注 0票数 15

我们使用的是oracle10G,如果我们查询/删除数据,其中一个表需要很长时间。这个表包含了大约1000万条记录。

最近,我们发现在此表中禁用了ROW_MOVEMENT,我们希望了解以下内容:

  1. 如果启用ROW_MOVEMENT,我们可以获得什么样的性能增益?
  2. 启用ROW_MOVEMENT有什么坏处吗?
  3. 什么触发器的排动?甲骨文如何决定它需要移动行?

任何帮助都将不胜感激。

提前谢谢!!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-17 15:05:52

行运动主要是应用于分区表。它允许跨分区移动行。如果禁用了行移动(这是默认的),则无法使用更新移动一行:

代码语言:javascript
运行
复制
SQL> CREATE TABLE part_table (ID NUMBER)
  2  PARTITION BY RANGE (ID)
  3     (PARTITION p0 VALUES LESS THAN (1),
  4      PARTITION p1 VALUES LESS THAN (MAXVALUE));

Table created

SQL> INSERT INTO part_table VALUES (0);

1 row inserted

SQL> UPDATE part_table SET ID = 2;

UPDATE part_table SET ID = 2

ORA-14402: updating partition key column would cause a partition change

允许行移动时,可以使用更新移动行:

代码语言:javascript
运行
复制
SQL> ALTER TABLE part_table ENABLE ROW MOVEMENT;

Table altered

SQL> UPDATE part_table SET ID = 2;

1 row updated

在大多数情况下,此特性不会影响性能:无论是否启用该功能,都以完全相同的方式存储和查询行。但是,当启用行移动时,可以使用ALTER TABLE SHRINK SPACE物理地移动行(类似于ALTER TABLE SHRINK SPACE)。这个可能反过来影响索引集群因素,这可能会影响某些查询的性能。

默认情况下,行移动被禁用,因为它意味着行的rowid可能会更改,这不是Oracle中的通常行为。

票数 19
EN

Stack Overflow用户

发布于 2018-02-12 13:22:40

行移动的缺点是ROWIDs可能会被更改。因此,如果您有任何基于ROWID的查询,它们可能返回错误的结果。

票数 5
EN

Stack Overflow用户

发布于 2017-10-13 07:36:11

还请参见movement.htm

行移动是下列操作所必需的:

  • 在分区之间移动行(分区表)
  • 倒叙桌子
  • 收缩表(紧凑,级联,正常)

回答您的问题:如果启用行移动,则不会提高性能,但可以收缩表,这将提高完整表查询的性能。

ASKTOM对你的问题也给出了一个很好的答案:

ID:35203106066718

关于收缩(这需要行移动):

我建议进行基准测试--在执行操作之前和之后收集有关表的性能指标。在此之后,您将期望完整的扫描操作更有效,您将期望索引范围扫描要么保持不变,要么“更好”,因为每个块都有更多的行打包在一起(减少数据传播)。您将期待这种情况发生

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19430145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档