Tôi có một cơ sở dữ liệu rất lớn với hàng trăm bảng, và sau nhiều, nhiều nâng cấp sản phẩm, tôi chắc chắn một nửa trong số chúng không còn được sử dụng nữa. Làm thế nào tôi có thể biết một bảng đang được tích cực được chọn từ? Tôi không thể chỉ sử dụng Profiler - không chỉ tôi muốn xem trong hơn một vài ngày, mà còn có hàng nghìn thủ tục được lưu trữ, và profiler sẽ không dịch các cuộc gọi SP thành các cuộc gọi truy cập bảng. Điều duy nhất tôi có thể nghĩ đến là tạo chỉ mục nhóm trên các bảng quan tâm, sau đó theo dõi sys.dm_db_index_usage_stats
để xem có bất kỳ tìm kiếm hoặc quét nào trên chỉ mục nhóm, có nghĩa là dữ liệu từ bảng đã được tải . Tuy nhiên, việc thêm chỉ mục nhóm trên mỗi bảng là một ý tưởng tồi (vì bất kỳ lý do nào), vì không thực sự khả thi.Làm cách nào để biết bảng cơ sở dữ liệu có đang được truy cập nữa không? Muốn một cái gì đó giống như một "kích hoạt SELECT"
Có tùy chọn nào khác không? Tôi đã luôn luôn muốn có một tính năng như một "kích hoạt SELECT", nhưng có lẽ có những lý do khác tại sao SQL Server không có tính năng đó hoặc.
SOLUTION:
Cảm ơn, Remus, đã chỉ cho tôi đi đúng hướng. Sử dụng các cột đó, tôi đã tạo ra SELECT sau, thực hiện chính xác những gì tôi muốn.
WITH LastActivity (ObjectID, LastAction) AS
(
SELECT object_id AS TableName,
last_user_seek as LastAction
FROM sys.dm_db_index_usage_stats u
WHERE database_id = db_id(db_name())
UNION
SELECT object_id AS TableName,
last_user_scan as LastAction
FROM sys.dm_db_index_usage_stats u
WHERE database_id = db_id(db_name())
UNION
SELECT object_id AS TableName,
last_user_lookup as LastAction
FROM sys.dm_db_index_usage_stats u
WHERE database_id = db_id(db_name())
)
SELECT OBJECT_NAME(so.object_id) AS TableName,
MAX(la.LastAction) as LastSelect
FROM sys.objects so
LEFT
JOIN LastActivity la
on so.object_id = la.ObjectID
WHERE so.type = 'U'
AND so.object_id > 100
GROUP BY OBJECT_NAME(so.object_id)
ORDER BY OBJECT_NAME(so.object_id)
Có cách nào để nắm bắt dữ liệu này vào bảng khi máy chủ tắt không? Điều này sẽ cho phép theo dõi dài hạn. – AMissico
Câu hỏi hay. Chỉ cần cho bất cứ ai khác nhìn vào điều này, nếu bạn đang sử dụng năm 2008, bạn có thể thay thế các truy vấn bên trong CTE với những điều sau đây; 'CHỌN object_id AS TableName, (SELECT Max (v) TỪ (VALUES (last_user_seek), (last_user_scan), (last_user_lookup)) AS giá trị (v)) như [LastAction] TỪ sys.dm_db_index_usage_stats u ĐÂU database_id = DB_ID (db_name()) ' Ví dụ từ [đây] (http://stackoverflow.com/a/6871572/685760) –