了解了解一下SQLSERVER裡的鬼影記錄

2022-01-11 20:09:27 字數 1577 閱讀 9936

鬼影記錄也叫 幻影記錄、  虛影記錄 英文名叫 ghost record

關於 truncate table有沒有使用鬼影記錄的**

會出現鬼影記錄的兩種情況:(1)聚集索引表(2)使用了快照隔離級別的堆表

為什麼在聚集索引的表裡會出現鬼影記錄,大家知道有聚集索引的表,裡面資料頁會用雙向鍊錶連線起來,如果馬上刪除,

那麼就會影響索引查詢資料,比如有乙個事務正在利用聚集索引查詢資料,萬一這個時候刪除了某一頁,

那麼查詢出來的結果就不準確了,所以還是等空閒的時候,再慢慢地刪除資料,反正我是這麼認為的

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清理工具

2dbcc 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

3object_id('

[dlgpos].[dbo].[accounts]

'), --

表的objectid

4null, null,'

detailed

')

如果你想真正了解鬼影記錄,可以看一下我翻譯的兩篇文章

鬼影記錄翻譯一

鬼影記錄翻譯二

了解一下SQL Server

說實話,我在大學的時候用了下sql server,自從工作以來一直沒有接觸過sql sever,越是不接觸越是排斥,也是不了解越是排斥,所以花點時間了解下自己不熟悉的技術,可能也會有一番收穫。sqlserver的版本 它最初是由microsoft sybase和ashton tate三家公司共同開發...

了解一下NTLM

ntlm 在客戶機與伺服器之間提供身份認證的安全包。ntlm 身份驗證協議 是 質詢 應答身份驗證協議,是windows nt 4.0 及其早期版本中用於網路身份驗證的預設協議。windows 2000 中仍然支援該協議,但它不再是預設的。ntlm身份驗證過程 ntlm 是用於 windows nt...

了解一下 display flex

一 display flex flex 是flexuble box的縮寫,意為 彈性盒子 用來為盒狀模型提供最大的靈活性.任何乙個容器都可以指定為flex布局.box 行內元素也可以使用flex布局.box webkit核心的瀏覽器,必須加上 webkit box 注意為父級設計flex布局以後,子...