1

アクセスされた上位N個のテーブルを知りたい。私はデータベースと特定のテーブルへのグーグルアドレスの最終日のアクセスのほとんどのリンクについてのみ取得しました。

SELECT DatabaseName, MAX(LastAccessDate) LastAccessDate
FROM
    (SELECT
        DB_NAME(database_id) DatabaseName
        , last_user_seek
        , last_user_scan
        , last_user_lookup
        , last_user_update
    FROM sys.dm_db_index_usage_stats) AS PivotTable
UNPIVOT 
    (LastAccessDate FOR last_user_access IN
        (last_user_seek
        , last_user_scan
        , last_user_lookup
        , last_user_update)
    ) AS UnpivotTable
GROUP BY DatabaseName
HAVING DatabaseName NOT IN ('master', 'tempdb', 'model', 'msdb')
ORDER BY 2

今、私はこれをテーブルに必要としています。何かアイデアやリンクをお願いします。

4

1 に答える 1

4

コードを少し調整するだけで、一度に1つのデータベースを簡単に実行できます。

USE Your_Database;
GO

SELECT [schema]  = OBJECT_SCHEMA_NAME([object_id]), 
  [object]       = OBJECT_NAME([object_id]), 
  LastAccessDate = MAX(LastAccessDate)
FROM
    (SELECT
        [object_id]
        , last_user_seek
        , last_user_scan
        , last_user_lookup
        , last_user_update
    FROM sys.dm_db_index_usage_stats
    WHERE database_id = DB_ID()) AS PivotTable
UNPIVOT 
    (LastAccessDate FOR last_user_access IN
        (last_user_seek
        , last_user_scan
        , last_user_lookup
        , last_user_update)
    ) AS UnpivotTable
GROUP BY [object_id]
ORDER BY LastAccessDate;

もちろん、これは最後のサービスの再起動または再構成以降にのみ有効です。

データベースごとにこれを実行したい場合は、私のカスタムsp_MSforeachdb置換を使用できます。

于 2012-08-23T17:56:21.363 に答える