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 / 问题 / 108704
Accepted
Gabe
Gabe
Asked: 2015-08-01 10:31:39 +0800 CST2015-08-01 10:31:39 +0800 CST 2015-08-01 10:31:39 +0800 CST

重建索引时何时使用 sort_in_tempdb?

  • 772

我们正在讨论是否对我们的 DW 表使用 SORT_IN_TEMPDB 选项。我的理解是,使用此选项时会有更多的写入,尽管它们更具顺序性。我们有一个 SAN(它有时非常慢),所以在我们的例子中,我们希望尽可能地限制写入次数。我相信 tempdb 位于单独的 LUN(磁盘集)上。

我们的数据文件和 tempdb 文件中有足够的磁盘空间。在这种情况下,我们会从使用 SORT_IN_TEMPDB 中受益吗?

让我印象深刻的一件事是对这个答案的评论

重建索引时,您需要两倍的索引空间 + 20% 用于排序。因此,通常要重建数据库中的每个索引,您只需要数据库中最大索引的 120%。如果您使用 SORT_IN_TEMPDB,您只赢了 20%,您的数据文件中还需要额外的 100%。此外,在 tempdb 中使用 sort 会大大增加 IO 负载,因为您现在不是将索引一次写入数据文件,而是将其写入 tempdb 一次,然后将其写入数据文件。所以这并不总是理想的。

我们绝对不希望使用缓慢/可能配置错误的 SAN 来增加 IO 负载。

测试这个的最好方法是什么?通过简单地重建带有和不带有选项的表并记录时间?

编辑:我们有 8 个 tempdb 文件,每个 15GB。我们确实设置了 TF 1117/1118 标志并启用了 IFI。我们目前使用 sort_in_tempdb 选项和不使用它进行重建的混合。

谢谢!

SQL Server 2012 企业版

sql-server sql-server-2012
  • 1 1 个回答
  • 30897 Views

1 个回答

  • Voted
  1. Best Answer
    Kin Shah
    2015-08-01T11:28:22+08:002015-08-01T11:28:22+08:00

    SORT_IN_TEMPDB意味着 SQL 服务器将用于tempdb分配临时空间,而不是在正在重建索引的用户数据库中分配空间。这意味着您在索引重建操作期间将需要更少的用户数据库中的可用空间,而在 tempdb 中需要更多的可用空间。

    当 tempdb 位于与用户数据库不同的一组磁盘 (LUN) 上时,它会为您提供更好的优势。

    从SORT_IN_TEMPDB 选项 - BOL:

    如果SORT_IN_TEMPDB 选项设置为 ON,并且 tempdb 位于与目标文件组不同的一组磁盘上,则在第一阶段,数据页的读取发生在与 tempdb 中排序工作区的写入不同的磁盘上。这意味着数据键的磁盘读取通常会在磁盘上以更串行的方式继续进行,并且对 tempdb 磁盘的写入通常也是串行的,构建最终索引的写入也是如此。即使其他用户正在使用数据库并访问单独的磁盘地址,当指定 SORT_IN_TEMPDB 时,读取和写入的整体模式也比不指定时更有效。

    确保在 SORT_IN_TEMPDB 为 ON 时阅读磁盘空间要求。

    慢速/可能配置错误的 SAN

    你知道痛点。您为什么不与您的 SAN 管理员一起修复它?配置错误和/或缓慢的 SAN 会导致各种问题,例如速度缓慢。

    需要注意的一些要点:

    • 在进行在线索引重建时使用MAXDOP=1 - 否则会导致碎片增加。
    • 根据碎片级别和页面碎片智能地重组/重建索引。
    • 阅读 SQLFool 的创建 60 GB 索引的经验
    • 确保您已正确配置 tempdb - TF 1117 (GROW ALL FILES IN A FILEGROUP EQUALLY) 和 1118 (FULL EXTENTS ONLY)并拥有更多 tempdb 数据文件。

    测试这个的最好方法是什么?

    是的,您必须在使用和不使用SORT_IN_TEMPDB. 还要测量运行时间,在 PROD 中执行时,请确保在维护窗口或较少的服务器活动期间执行此操作。还要检查您的读/写数据和日志延迟。

    我不确定您是否有即时文件初始化,但它会在恢复、数据文件自动增长和创建新数据库时受益(仅提及完整性)。

    • 28

相关问题

  • 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