Ole*_*Dok 15 sql-server sql-server-2008-r2 ghost-cleanup
我有几个表,行数在 5M 到 1.5G 之间
每个表都有其 BLOB 字段,其大小从 100 字节到 30 兆字节不等,并存储为“行外大值类型”= ON
表存储在不同的文件组中,每个文件组有 3-4 个文件@不同的 LUN@非常快的 SAN
这些表每天增长 5-100 Gb 和 600k - 1.5M 行
经过一段时间后,从 2 周到 6 个月不等,一些行被删除或移动到存档数据库,因此 - 工作表中没有任何超过 6 个月的行。
服务器当前配置:
-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 )
问题是- 从服务器正常运行时间(从几天到几个月)的某个时间点开始,GHOST CLEANUP进程拒绝执行强制清理并只是执行其通常的工作 - 在几秒钟内清理几个页面 ( which is seen thru Extended Events),这是不合适的,因为它无法清理所有已删除的行
问题从 SQL Server 2005 RTM Enterprise 时代开始
我是如何尝试解决这个问题的:
DBCC 强制鬼魂清理
当我运行查询时:
select *
from sys.dm_db_index_physical_stats(db_id(), object_id('ProblemTable'), 1, 0, 'detailed')
Run Code Online (Sandbox Code Playgroud)
我看到数以百万计的幽灵记录,但仅适用于 LOB_DATA 的分配单元类型
唯一有帮助的事情:
问题- 是否存在任何程序化(优选)或维护方式来强制 GHOST CLEANUP 根本没有服务器停机,因为服务器停机成本太高,甚至不可接受 - 从每小时数千美元到数万美元不等
发现问题和我的一样:
这里也是一样:
Ole*_*Dok 12
最后,MS 已将此问题视为错误:http : //support.microsoft.com/kb/2622823
简而言之:它固定在
在 Sql Server 2012 SP1 中,我在超过一年的运行时没有遇到这个问题。
| 归档时间: |
|
| 查看次数: |
7928 次 |
| 最近记录: |