Sql-Server

在我們停止載入之前辨識 sql server 中的表使用情況

  • February 19, 2021

我嘗試瀏覽很多連結,但無法獲得太多幫助,所以我發布了這個聽起來有點相似的問題。

我們的應用程序團隊正在計劃一些表格,他們將在接下來的幾個月內停止發送數據。因此,這些表將成為稍後清理的好競爭者。

但是,如果 SQL 伺服器中有方法,我怎麼能找到一些我們不知道的其他使用者可能正在使用該表進行 XYZ 操作。

是否有本機可用的方法或者我需要 XE 來跟踪它?這是一個自始至終高度活躍的 OLTP 數據庫伺服器,因此執行任何審計都需要進行測試。

應該採取什麼方法以及如何實際處理這種情況?請建議。

謝謝!

我認為您最好的方法是從跟踪 sys.dm_db_index_usage_stats 中的計數器開始。只要您認為有必要,只需將結果儲存到表中(並按計劃執行)。然後查看計數器,看看它們是否有明顯的變動。總會有一點,尤其是在您進行維護的情況下。

如果你認為他們已經完成了,那麼重命名表格,看看是否有人尖叫。如果需要,您可以快速將其重命名。

最後,如果您想要跟踪擴展的事件會話,以下可能對您有用。如您所知,它會產生影響,但不會像您想像的那麼糟糕,尤其是對於您認為沒有被使用的桌子。儘管如此,當您第一次啟用它時,請對其進行測試以確保它能夠滿足您的需求,並且它的影響不會妨礙您的使用者。但是,這是我知道的唯一確定的方法來捕捉這種類型的東西。

當我想擷取包含特定文本字元串的特定儲存過程或查詢的使用情況時,我通常使用以下內容。我將它發送到一個環形緩衝區,因為我通常只執行它,直到我得到我正在尋找的東西。但是您可以將目標更改為任何您想要的。它會創建關閉的 XE,因此您可以在啟動之前返回並對其進行編輯。

CREATE EVENT SESSION [SpecificSQLWatch] ON SERVER 
ADD EVENT sqlserver.rpc_completed(
   ACTION(sqlserver.database_id,sqlserver.database_name,sqlserver.sql_text,sqlserver.username)
   WHERE ([sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%<my string here>%')))
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO

引用自:https://dba.stackexchange.com/questions/285652