Jay Asked: 2012-10-31 23:04:26 +0800 CST2012-10-31 23:04:26 +0800 CST 2012-10-31 23:04:26 +0800 CST 链接行和迁移行之间的区别 772 链接行和迁移行有什么区别?另外应该使用什么查询来显示这些行?(我使用的是 Oracle 11gR2 数据库) oracle oracle-11g-r2 2 个回答 Voted Best Answer Mat 2012-11-01T01:33:00+08:002012-11-01T01:33:00+08:00 链接和迁移的行在概念指南的逻辑存储结构中进行了说明。 迁移的行将是由于更新而将列数据从一个块完全转移到另一个块的行。原始块基本上只会为该行存储一个“转发地址”。 链接的行将在多个块中包含部分列数据。原始块将包含实际列数据和其余部分的转发地址。(您可以将行链接到两个以上的块。) 两者都以相同的方式深入实施,因此它们实际上是同一事物的两个方面。 另请注意,对于超过 255 列的表,所有行在技术上都是链接的——一个“行片段”只能包含 255 个列值。链接可以发生在同一个块中,也可以与其他块一起发生,具体取决于空间可用性(如果所有数据都在同一个块中,这并不是特别“坏”)。 据我所知,获取行链接的准确数据的唯一方法是使用: ANALYZE TABLE your_table [partition (your_part)] LIST CHAINED ROWS 请参阅列出表和集群的链式行。 这可能很昂贵,需要扫描整个表。统计信息收集不会填满视图的CHAIN_CNT列dba_tables。(我认为它可能在某个时候有,但至少在 11.2 中没有。) 您可以监控table fetch continued row1统计信息 ( v$sysstat) 以查看查询是否受到链接或迁移行的影响,但我不相信您可以在每个会话中拥有该指标,因此您需要一个安静的系统来衡量,或者读数将是“嘈杂”。 Oracle 行链接和迁移的秘密包含有关链接和迁移的行、如何测量它们以及修复它们的潜在方法的有趣信息。 与往常一样,不要“仅仅因为”看到链接或迁移的行就重建表或更改存储参数。仅当您测量它实际上导致您的性能问题时才这样做。 1来自统计说明: 在提取期间遇到链接或迁移的行的次数 检索跨越多个块的行会使逻辑 I/O 增加一个因子,该因子对应于需要访问的块数。导出和重新导入可能会消除此问题。评估存储参数 PCTFREE 和 PCTUSED 的设置。如果行大于数据库块(例如,如果使用 LONG 数据类型并且行非常大),则无法修复此问题。 另请参阅按连续行取表。 Andy Black 2013-07-04T07:21:35+08:002013-07-04T07:21:35+08:00 一种更“主动”的方式来查找您是否对链式行有问题是使用 OEM 和段顾问。(管理 -> 存储 -> 段顾问 -> 链行分析)段顾问按计划运行,并寻找可能表示链行问题的奇怪的长操作。然后它会在您的数据库维护窗口期间进行更深入的分析,并为您提供更正问题的选项......但我更喜欢在 OEM 之外更正问题。 要解决此问题,您有几个选择。阅读上面的答案,奇怪的是最近的 Oracle 文档提到执行导出/导入......这很有效,但它可能不是最快或最简单的选择。 比导出/导入更快的方法是执行“alter table table_name move;”...这将在同一个表空间中重新组织表。这也可以并行完成。之后,您需要重建该表上的所有索引。 另一个(在线)选项是使用 dbms_redefinition。这在工作时很棒,但它比其他选项更复杂。 您还可以插入新表(插入新表名选择 * 从表名),重命名表,使新表具有旧名称,然后重建索引。 根据我的经验,最好的方法通常是更改表移动,除非您有存储容量限制。
链接和迁移的行在概念指南的逻辑存储结构中进行了说明。
迁移的行将是由于更新而将列数据从一个块完全转移到另一个块的行。原始块基本上只会为该行存储一个“转发地址”。
链接的行将在多个块中包含部分列数据。原始块将包含实际列数据和其余部分的转发地址。(您可以将行链接到两个以上的块。)
两者都以相同的方式深入实施,因此它们实际上是同一事物的两个方面。
另请注意,对于超过 255 列的表,所有行在技术上都是链接的——一个“行片段”只能包含 255 个列值。链接可以发生在同一个块中,也可以与其他块一起发生,具体取决于空间可用性(如果所有数据都在同一个块中,这并不是特别“坏”)。
据我所知,获取行链接的准确数据的唯一方法是使用:
请参阅列出表和集群的链式行。
这可能很昂贵,需要扫描整个表。统计信息收集不会填满视图的
CHAIN_CNT
列dba_tables
。(我认为它可能在某个时候有,但至少在 11.2 中没有。)您可以监控
table fetch continued row
1统计信息 (v$sysstat
) 以查看查询是否受到链接或迁移行的影响,但我不相信您可以在每个会话中拥有该指标,因此您需要一个安静的系统来衡量,或者读数将是“嘈杂”。Oracle 行链接和迁移的秘密包含有关链接和迁移的行、如何测量它们以及修复它们的潜在方法的有趣信息。
与往常一样,不要“仅仅因为”看到链接或迁移的行就重建表或更改存储参数。仅当您测量它实际上导致您的性能问题时才这样做。
1来自统计说明:
另请参阅按连续行取表。
一种更“主动”的方式来查找您是否对链式行有问题是使用 OEM 和段顾问。(管理 -> 存储 -> 段顾问 -> 链行分析)段顾问按计划运行,并寻找可能表示链行问题的奇怪的长操作。然后它会在您的数据库维护窗口期间进行更深入的分析,并为您提供更正问题的选项......但我更喜欢在 OEM 之外更正问题。
要解决此问题,您有几个选择。阅读上面的答案,奇怪的是最近的 Oracle 文档提到执行导出/导入......这很有效,但它可能不是最快或最简单的选择。
比导出/导入更快的方法是执行“alter table table_name move;”...这将在同一个表空间中重新组织表。这也可以并行完成。之后,您需要重建该表上的所有索引。
另一个(在线)选项是使用 dbms_redefinition。这在工作时很棒,但它比其他选项更复杂。
您还可以插入新表(插入新表名选择 * 从表名),重命名表,使新表具有旧名称,然后重建索引。
根据我的经验,最好的方法通常是更改表移动,除非您有存储容量限制。