6

私は SQL Server 2008 R2 を使用しており、次のクエリを実行して、次の SQL を使用してデータベースでインデックスが最後に更新された時期を確認しようとしています。

SELECT last_system_update, last_user_update,
OBJECT_NAME(object_id) AS tblName
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID('mydatabase')

last_user_updateフィールドは正しく、SQL Server の最後の再起動以降、テーブルに対して更新が行われていない場合は NULL が含まれています

次のクエリを実行してインデックスを再構築すると、last_system_updateフィールドに、インデックスが再構築されたことを示す日付が含まれていることが予想されます。

ALTER INDEX ALL ON dbo.MyTable
REBUILD

ただし、このフィールドは NULL のままです。実際、last_system_update フィールドは、サーバー上のすべてのデータベースのすべてのインデックスで空 (NULL) です。last_user_updateも変更されません。

私も試しました:

UPDATE STATISTICS dbo.MyTable

しかし、運がありません。では、このフィールドはいつ更新されますか? また、強制的に更新するにはどうすればよいですか?

4

2 に答える 2

10

次のクエリを使用して、インデックスが最後に更新された日時を確認できますSTATS_DATE()

USE your_db;
SELECT t.name AS Table_Name
      ,i.name AS Index_Name
      ,i.type_desc AS Index_Type
      ,STATS_DATE(i.object_id,i.index_id) AS Date_Updated
FROM sys.indexes i
JOIN sys.tables t
  ON t.object_id = i.object_id
WHERE i.type > 0 
ORDER BY t.name ASC
    ,i.type_desc ASC
    ,i.name ASC;

sys.indexes が SQL Server 2000 になかったため、これは SQL Server 2005 以降でのみ機能すると思います。

于 2012-05-18T18:57:17.483 に答える
0

これらの列の詳細については、次のサイトを参照してください。

http://sqlblog.com/blogs/louis_davidson/archive/2007/07/22/sys-dm-db-index-usage-stats.aspx

system_seeks、system_scans、system_lookups、system_updates、last_system_seek、last_system_scan、last_system_lookup、last_system_update

ユーザー クエリ列と同じですが、インデックスが自動統計操作などのシステム操作に使用された場合に記録されます。

于 2012-05-21T04:52:17.543 に答える