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 / 问题 / 10200
Accepted
Oleg Dok
Oleg Dok
Asked: 2012-01-06 05:49:18 +0800 CST2012-01-06 05:49:18 +0800 CST 2012-01-06 05:49:18 +0800 CST

需要 SQL Server Frozen Ghost 清理解决方法

  • 772

我有几张表,行数在 5M 到 1.5G 之间

每个表都有其 BLOB 字段,其大小从 100 字节到 30 MB 不等,并且存储为“行外的大值类型”= ON

表存储在不同的文件组中,每个文件组有 3-4 个文件,每个文件在不同的磁盘上 @ 不同的 LUN @ 非常快的 SAN

这些表每天都会增长 5-100 Gb,行数为 600k - 150 万

经过一定的时间,从 2 周到 6 个月不等,一些行被删除或移动到存档数据库,所以 - 工作表中没有任何超过 6 个月的行。

服务器的当前配置:

  • SQL 服务器引擎是 2008 R2 SP1 Enterprise @ 24 核,@ 64Gb RAM
  • SQL Server 使用额外的启动标志运行:

-T 3640; (消除了为存储过程中的每个语句向客户端发送 DONE_IN_PROC 消息。这类似于 SET NOCOUNT ON 的会话设置,但是当设置为跟踪标志时,每个客户端会话都以这种方式处理)

-T 1118;(将 tempDB 中的分配从一次 1pg(前 8 页)切换到一个程度。)

-T 2301;(启用特定于决策支持查询的高级优化。此选项适用于大型数据集的决策支持处理)

-T 1117;(一次增长所有数据文件,否则依次增长。)

-E; (增加为文件组中的每个文件分配的范围数。此选项可能对运行索引或数据扫描的用户数量有限的数据仓库应用程序很有帮助)

-T 834; (导致 SQL Server 对分配给缓冲池的内存使用 Windows 大页面分配, http: //msdn2.microsoft.com/en-us/library/aa366720.aspx,http : //support.microsoft。 com/kb/920093 )

  • SQL Server 使用大页面扩展
  • SQL Server 利用快速文件初始化选项
  • AUTOSHRINK 对所有数据库都关闭

问题是- 从服务器正常运行时间的某个时间点(从几天到几个月)开始,GHOST CLEANUP进程拒绝进行强制清理并简单地完成其通常的工作 - 在几秒钟内清理几个页面(which is seen thru Extended Events),这是不合适的,因为它无法清理所有已删除的行

从 SQL Server 2005 RTM Enterprise 时代开始,问题就一直存在

我是如何尝试解决这个问题的:

  • 试图对表的聚集索引强制 SCAN 操作
  • 试图强制 SCAN 操作,这涉及到表的聚集索引上 BLOB 列的所有内容
  • 系统 sp_clean_db_free_space & sp_clean_db_file_free_space
  • 为数据库中的所有文件和页面手动 dbcc cleanpage(@dbid , @fileid, @page)
  • 聚集索引重建和重组
  • 重建数据库
  • DBCC FORCEGHOSTCLEANUP

  • 当我运行查询时:

    select * 
    from sys.dm_db_index_physical_stats(db_id(), object_id('ProblemTable'), 1, 0, 'detailed')
    

    我看到数以百万计的幽灵记录,但仅适用于 LOB_DATA 的分配单元类型

唯一有帮助的东西:

  • 使用 SHUTDOWN 命令停止服务器或重新启动整个主机 - 它会有所帮助,重新启动后 GHOST CLEANUP 进程会运行几个小时并实际清除所有重影记录
  • 带有 EMPTYFILE 选项的 DBCC SHRINKFILE - 将所有数据从一个文件移动到其他文件或新创建的文件只会清除该文件中的幽灵记录 - 问题是我真的很讨厌收缩操作。一个文件需要 3-4 天

问题- 是否存在任何程序化(首选)或维护方式来强制 GHOST CLEANUP 而无需服务器停机,因为服务器停机成本太高,甚至无法接受 - 每小时从数千美元到数万美元

发现与我类似的问题在这里:

  • http://support.microsoft.com/kb/932115
  • http://www.sqlservercentral.com/Forums/Topic496244-149-1.aspx

和这里一样:

  • http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/c023e51c-92ad-471b-89a6-8c93732ee6cb/
sql-server sql-server-2008-r2
  • 2 2 个回答
  • 8085 Views

2 个回答

  • Voted
  1. Best Answer
    Oleg Dok
    2013-07-11T00:31:01+08:002013-07-11T00:31:01+08:00

    最后,MS 已将此问题视为错误:http: //support.microsoft.com/kb/2622823

    简而言之:它固定在

    • Sql Server 2008 SP3 CU4
    • Sql Server 2008 R2 CU10
    • Sql Server 2008 R2 SP1 CU4

    在 Sql Server 2012 SP1 中,我运行时没有遇到这个问题超过一年。

    • 12
  2. mrdenny
    2012-01-06T23:54:07+08:002012-01-06T23:54:07+08:00

    这是应该向 CSS 提出的问题,以便他们可以与您一起解决问题。您可能有软件保证和支持合同。如果重新启动实例每小时花费数千美元,那么几百美元应该没什么大不了的。

    您是否尝试过允许数据库关闭然后联机?这将导致崩溃恢复运行,并可能启动幽灵清理。

    你经常写信给桌子吗?经常是指一直?

    至于 MSKB 932115,您是否看到幽灵记录仅留在所有文件中,还是清理文件组中的第一个文件?

    为什么使用-T1117 和即时文件初始化?

    • 3

相关问题

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

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

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

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

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

Sidebar

Stats

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

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

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

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

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

    • 4 个回答
  • Marko Smith

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

    • 7 个回答
  • 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
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +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
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +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