AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 298888
Accepted
Aleksey Vitsko
Aleksey Vitsko
Asked: 2021-09-02 04:02:13 +0800 CST2021-09-02 04:02:13 +0800 CST 2021-09-02 04:02:13 +0800 CST

ALTER INDEX REORGANIZE 问题

  • 772

我很少有索引高度碎片化(超过 90% 的碎片化)且大小足够大(数十 GB)的表。对这些进行碎片整理的目标是减少上述表格的空间消耗。

我想避免执行 REBUILD 操作,因为它太耗费资源。还试图避免记录到事务日志和日志增长,以及因此导致大的事务日志备份大小。

这就是为什么选择 REORGANIZE 操作而不是 REBUILD 来处理高碎片的原因。

关于 REORGANIZE,有以下问题:

  1. 如果同时在单独的索引上运行多个 REORGANIZE 操作(比如 10+,在单独的 SSMS 窗口/会话中) - 它会导致数据损坏或任何其他已知问题吗?

  2. REORGANIZE 操作是否以任何方式/根本记录到事务日志?

  3. REORGANIZE 持有什么样的锁?哪些查询会因此受到影响?

在我的案例中,进行碎片整理的唯一原因是减少存储空间消耗,它确实有帮助(例如索引之前是 18 GB,然后变成了 8 GB,等等)。就我而言,这比订购额外的存储空间更容易。

sql-server sql-server-2017
  • 1 1 个回答
  • 396 Views

1 个回答

  • Voted
  1. Best Answer
    Shanky
    2021-09-02T04:11:45+08:002021-09-02T04:11:45+08:00

    如果同时在不同的索引上运行多个 REORGANIZE 操作(比如 10+,在不同的 SSMS 窗口/会话中) - 它会导致数据损坏或任何其他已知问题吗?

    不,它不会。关于任何其他问题,如果您的 SQL Server 已修补到最新的 SP 和 CU,那么您应该非常安全。

    REORGANIZE 操作是否以任何方式/根本记录到事务日志中?

    是的,他们实际上记录在所有恢复模式中。引自SQLskills.com

    在所有恢复模式中,重新组织索引都是完全记录的,但作为一系列小事务执行,因此不应导致事务日志过度增长。当然,事务日志只为执行的操作生成,对于重组来说可能更少,因为它只处理存在的碎片。


    REORGANIZE 持有什么样的锁?哪些查询会因此受到影响?

    再次引用上面分享的 Paul Randals 博客

    索引重组在整个操作过程中都持有一个意图排他表锁,它只会阻止共享、排他和模式修改表锁。我为 SQL Server 2000 编写 DBCC INDEXDEFRAG 的主要原因之一是作为 DBCC DBREINDEX 的在线替代品。

    还试图避免记录到事务日志和日志增长,以及因此导致大的事务日志备份大小

    请注意,如上所述,索引重组已完全记录,因此会生成日志,但由于 SQL 引擎一次只在一个数据库页面上工作,因此日志增长不会过度膨胀并且会受到控制。

    • 9

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve