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
    • 最新
    • 标签
主页 / server / 问题 / 23446
Accepted
SQLRockstar
SQLRockstar
Asked: 2009-06-11 08:01:19 +0800 CST2009-06-11 08:01:19 +0800 CST 2009-06-11 08:01:19 +0800 CST

幽灵清理

  • 772

我对幽灵清理过程的理解是,它每五秒钟就会寻找删除索引中的幽灵记录。因此它不会使系统过载,它一次只会“清理”大约十页。

那么,这意味着它每五秒只清理大约 8 万条记录吗?似乎我的索引总是充满幻影记录,清理工作永远不会完成。

所以,假设我运行了一个删除操作,可能有一百万行,而这几百万行的索引记录大小大约为 8Gb。所以大约是80k差异的100,000倍。这是否意味着幽灵清理过程将需要 500,000 秒或将近六天才能完成?

很明显,我在这里遗漏了一些东西,因为清除幽灵记录需要那么长时间是没有意义的。那么其他达到相同指数的活动呢?幽灵清理进程会导致等待,还是必须等待其他进程?

[这个问题是由我们在 OpsMgrDW 中看到的性能问题带来的,我们想了解更多关于这个过程的信息]

sql-server sql-server-2008
  • 4 4 个回答
  • 5241 Views

4 个回答

  • Voted
  1. Best Answer
    Paul Randal
    2009-06-11T14:18:49+08:002009-06-11T14:18:49+08:00

    我写了两篇全面的博客文章来解释幽灵清理(这是唯一在任何地方都深入解释过它的地方,无论是印刷版还是在线版)。

    第一个是存储引擎内部:Ghost cleanup 深入,第二个是Ghost cleanup redux。是的,每次 10 页,并且幽灵清理任务可能永远赶不上大量的连续删除。

    通过确保存储引擎“看到”幽灵记录,可以积极触发除每 5 秒 10 页之外的幽灵清理。使用类似的东西强制扫描受影响的表或索引

    select * from [problem-table] with (index = problem-index)

    这将排队请求积极清除幽灵记录。但请注意,它会在执行此操作时生成大量事务日志。作为常规索引维护的一部分,它们还应该通过索引重建或重组来清除。

    希望这可以帮助。

    • 4
  2. gbn
    2009-06-11T08:38:59+08:002009-06-11T08:38:59+08:00

    我一直认为索引重建会在结构移动时“修复”任何剩余的问题。

    • 2
  3. dwc
    2009-06-11T14:33:31+08:002009-06-11T14:33:31+08:00

    几年前,我遇到了这个问题,但无法通过配置、触发幽灵清理或任何类似的方式来解决它。我正在使用一个具有连续插入和删除的数据库,并且由于幽灵清理触发,SQLServer 将有效地定期锁定。

    我最终的解决方案是按时间对问题表进行分区,而不是删除旧行,我只能删除旧表。这帮助很大。这对于您的情况可能不可行,但它适用于许多情况,但有一些变化。

    • 2
  4. Ram
    2009-11-19T03:12:29+08:002009-11-19T03:12:29+08:00

    我们有类似的情况。我们的一张表有很多幽灵记录,这些记录没有被幽灵清理过程清理。DB Shrinking、DBCC Cleantable、Rebuilding index 和 Reorganizing index 没有用。为了解决这个问题,我们将数据传输到临时表,然后将表截断并将数据传输回截断表。此表包含 LOB 数据(2 个 nvarchar(max) 列)。有没有其他方法可以解决这个问题?

    • 2

相关问题

  • 将管理员用户添加到 SQL Server 2008

  • Vanilla Powershell 是否足以成为 Windows 和 DB 服务器管理员的语言?

  • 在 SQL Server 中,何时应将 PRIMARY Data FileGroup 拆分为辅助数据文件?

  • 如何从 SQL Server 2008 中的备份中排除索引

Sidebar

Stats

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

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve