Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server 2008:由于与LOB数据相关的重影记录,表大小增加_Sql Server_Records - Fatal编程技术网

Sql server SQL Server 2008:由于与LOB数据相关的重影记录,表大小增加

Sql server SQL Server 2008:由于与LOB数据相关的重影记录,表大小增加,sql-server,records,Sql Server,Records,A关于生产环境,请参见下表。它被大量更新(大量插入和删除)。此表包含LOB数据类型-ntext和nvarchar(max)。 数据不断被删除并插入此表中。但总行数相当稳定,约为150000 但不知什么原因,表的大小只是增加了。这意味着删除数据的空间不会被释放 例如,此时表中有150000行,占60GB左右。如果我将此数据复制到新表(简单插入),则我的数据将仅占用10GB 我想做的是: 收缩文件或数据库对我没有帮助 索引重建对我没有帮助 DBCC CLEANTABLE对我没有帮助 以下是表格结构:

A关于生产环境,请参见下表。它被大量更新(大量插入和删除)。此表包含LOB数据类型-
ntext
nvarchar(max)
。 数据不断被删除并插入此表中。但总行数相当稳定,约为150000

但不知什么原因,表的大小只是增加了。这意味着删除数据的空间不会被释放

例如,此时表中有150000行,占60GB左右。如果我将此数据复制到新表(简单插入),则我的数据将仅占用10GB

我想做的是:

  • 收缩文件或数据库对我没有帮助
  • 索引重建对我没有帮助
  • DBCC CLEANTABLE对我没有帮助
  • 以下是表格结构:

    CREATE TABLE dbo.T_Test(
    KeyHash nvarchar(50) NOT NULL,
    SiteDomainId int NOT NULL,
    srcFullUrl nvarchar(max) NOT NULL,
    srcResponse ntext NOT NULL,
    srcExpirationDate datetime NOT NULL,
    srcKey nvarchar(max) NOT NULL,
    srcCachePeriodInMinutes int NOT NULL,
    srcNumOfHits int NOT NULL,
    srcVital bit NOT NULL,
    CONSTRAINT PK_T_Test_1 PRIMARY KEY NONCLUSTERED
    (
    KeyHash ASC,
    SiteDomainId ASC
    ))
    GO
    CREATE CLUSTERED INDEX [IX_T_Test_srcExpirationDate_ppa] ON dbo.T_Test
    (
    srcExpirationDate ASC
    )
    GO
    
    我确切地知道,问题出在与LOB数据相关的重影记录中。
    select*from sys.dm\u db\u index\u physical\u stats(db\u id(),object\u id('MyTable'),null,null,N'DETAILED')
    返回以下内容:

    index_type_desc alloc_unit_type_desc record_count ghost_record_count
    CLUSTERED INDEX LOB_DATA 394996 2869376
    
    但ghost进程工作正常,即为聚集索引的行中数据删除ghost记录

    现在我不知道如何删除鬼记录和回收空间。 唯一的方法是截断表并再次上载数据

    任何关于如何避免这个问题的建议都是有价值的。多谢各位

    我的环境的配置是Microsoft SQL Server Web Edition(64位)10.0.2531.0

    (在Paul Randal的SF上),特别是考虑到您的使用模式。我记得在SF上看到过这一点,但我从来没有遇到过这个问题,也从来没有尝试过Paul建议的修复方法,所以很抱歉。

    “可能是幽灵清理永远赶不上删除(在Paul Randal的SF上)特别是考虑到你的使用模式。我记得在SF上看到过这一点,但我从来没有遇到过这个问题,也从来没有尝试过Paul建议的修复方法,所以很抱歉。”


    我读过保罗·兰德尔的方法。它确实有效,但只适用于行内数据。在我的例子中,清除了行内数据的重影记录,但没有清除LOB的重影记录。我使用恒定的表扫描在生产循环上运行。在这种情况下,行内数据的重影记录接近于零,但它没有改变LOB重影记录的行为。

    我已重新启动sql server进程,问题已得到解决。

    请参阅sql 2008 R2 SP1的累积更新4


    您是否尝试过
    更改表重建
    ?这可能是一个碎片问题。由于您有非常宽的行,新行可能与原始(替换)行不在同一页面上,这意味着新页面将添加到表中。通常,我们会包含一些链接中的文本以证实答案