SQLSERVER的鬼影记录

浏览: 2653

鬼影记录也叫 幻影记录、  虚影记录 英文名叫 ghost record

关于 truncate table有没有使用鬼影记录的探讨

会出现鬼影记录的两种情况:(1)聚集索引表 (2)使用了快照隔离级别的堆表

相关文章:

http://support.microsoft.com/kb/2622823/zh-cn
http://www.sqlskills.com/blogs/paul/ghost-cleanup-redux/
http://www.cnblogs.com/Amaranthus/archive/2013/04/22/3036619.html#2664812
http://www.sqlskills.com/blogs/paul/inside-the-storage-engine-ghost-cleanup-in-depth/

为什么在聚集索引的表里会出现鬼影记录,大家知道有聚集索引的表,里面数据页会用双向链表连接起来,如果马上删除,

那么就会影响索引查找数据,比如有一个事务正在利用聚集索引查找数据,万一这个时候删除了某一页,

那么查找出来的结果就不准确了,所以还是等空闲的时候,再慢慢地删除数据,反正我是这麽认为的

Ghost记录清理
问:在SQL Server企业管理器的进程信息窗口中,我找到了一个名为“Ghost Record Cleanup”(幻影记录清除)的后台进程,并且该命令由用户系统所引发。

答:在从数据库中删除行、页或扩展盘区时,SQL Server会将这些对象标记为“幻影”(表示删除操作有待执行),并在稍后使用后台任务清除这些对象,该进程就是Ghost Record Cleanup。Ghost Record Cleanup改善了Delete命令的性能,因为SQL Server无需立即执行物理清除操作。

 

下面的内容根据给出的文章链接总结出来

(sql server中ghost清理任务每5秒执行一次)可以使用跟踪标志661来关闭ghost清理工具的运行

这样会减少物理IO,因为清理需要把页保存在buffer pool,会产生日志,造成物理IO。

如果对于delete量比较大的数据库可以启用跟踪标志661,这样ghost清理任务就不会运行。

1 DBCC TRACEOFF(661,-1)--在全局范围关闭ghost清理工具
2 DBCC TRACESTATUS(661) --查看是否ghost清理工具是否在运行 status列

查看某一张表是否存在ghost记录

对于表扫描而言,该鬼影记录数越小越好,至于为什麽,因为在查询的时候,执行引擎还要判断是否有鬼影记录,如果是鬼影记录就跳过这条记录,继续下一条记录的查找

1 SELECT  [ghost_record_count], [version_ghost_record_count]
2 FROM [sys].[dm_db_index_physical_stats](DB_ID('dlgpos'), --数据库ID
3 OBJECT_ID('[DLGPOS].[dbo].[Accounts]'), --表的objectid
4 NULL, NULL,'detailed')

 

如果你想真正了解鬼影记录,可以看一下我翻译的两篇文章

鬼影记录翻译一

鬼影记录翻译二

如果文中有不对的地方,欢迎大家拍砖o(∩_∩)o  

推荐 0
本文由 桦仔 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册