あなたの使用統計を取得する方法 SQL Server データベース

今すぐ共有:

非常に大規模で作業する場合 SQL Server 環境では、特定のデータベースを誰が使用しているかを組織内の誰も知らないことが非常に一般的です。 このシナリオは、複数のレガシーシステムがある場合に非常に一般的です。 この記事に従って、どの程度効果的に SQL Server データベースが使用されます。

方法1:

このメソッドでは、sp_who2の出力を読み取り、それをテーブルにキャプチャします。 最初のステップは、このスクリプトを使用してテーブルを作成することです。

CREATE TABLE T1 (
    session_id INT
    ,status_message VARCHAR(1000) NULL
    ,login_name SYSNAME NULL
    ,Name_of_Host SYSNAME NULL
    ,Blocked_By SYSNAME NULL
    ,Database_Name SYSNAME NULL
    ,Script_description VARCHAR(1000) NULL
    ,CPU_Time INT NULL
    ,Disk_Input_Output INT NULL
    ,Last_Batch VARCHAR(1000) NULL
    ,Name_of_Program VARCHAR(1000) NULL
    ,Session_ID_2 INT
    ,ID_of_Request INT NULL
    ,Log_Date DATETIME DEFAULT GETDATE()
    );

このスクリプトを次のようにスケジュールして実行します SQL Server 作業内容:ログテーブルをいつでも確認することで、対象データベースが使用されているかどうかを特定できます。

INSERT INTO T1 (
    session_id
    ,status_message
    ,login_name
    ,Name_of_Host
    ,Blocked_By
    ,Database_Name
    ,Script_description
    ,CPU_Time
    ,Disk_Input_Output
    ,Last_Batch
    ,Name_of_Program
    ,Session_ID_2
    ,ID_of_Request
    )
EXECUTE sp_who2 active;

方法2:

上記の方法とは異なり、詳細にあまり関心がなく、データベースが使用されているかどうかを知りたいだけの場合は、このスクリプトが最適です。 使用している場合 SQL Server 2014 年より前のバージョンでは、これは機能しません。このスクリプトの出力には 3 つのフィールドが表示されます。最初のフィールドにはデータベース名に関する情報が表示されます。これは、ターゲット データベースが使用されているかどうかを識別するのに役立つため、重要なフィールドです。2 番目のフィールドは、データベースへの接続をユーザー接続か、それとも別の接続かに分類するのに役立ちます。 SQL Server 内部接続。 最後の列は、データベースへの接続数を示しています。

SELECT DB_NAME(sys.dm_exec_sessions.database_id) AS [Database Name]
    ,CASE 
        WHEN sys.dm_exec_sessions.is_user_process = 1
            THEN 'YES'
        WHEN sys.dm_exec_sessions.is_user_process = 0
            THEN 'NO'
        END AS [Is it User connection?]
    ,COUNT(sys.dm_exec_sessions.session_id) AS [Connections Count]
FROM sys.dm_exec_sessions
GROUP BY DB_NAME(sys.dm_exec_sessions.database_id)
    ,sys.dm_exec_sessions.is_user_process
ORDER BY 1
    ,2;

方法3:

データをログテーブルにプッシュする前に、方法1では、データベース名に対してフィルターを実行できません。 ただし、方法2と方法3では可能です。

SELECT t1.objtype AS [Object]
    ,t1.refcounts AS [ReferredCount]
    ,t1.usecounts AS [Usage]
    ,t1.size_in_bytes / 1024 AS [KB Size]
    ,db_name(t3.dbid) AS [DatabaseName]
FROM sys.dm_exec_cached_plans t1
OUTER APPLY sys.dm_exec_text_query_plan(plan_handle, 0, - 1) t2
OUTER APPLY sys.dm_exec_sql_text(plan_handle) AS t3
WHERE db_name(t3.dbid) = 'ERP10_SandBox'
ORDER BY t1.usecounts DESC;

方法4:

SQLプロファイラーこの方法は、データベースの使用状況を特定するのに非常に強力ですが、リソースを大量に消費します。 はい、プロファイラーについて話しています。 プロファイラーからテンプレートを選択するか、カスタムテンプレートを使用してデータベース接続を追跡します。

データベースを削除します

データベースを削除する上記の方法から、データベースがまだ使用されているかどうかを識別できます。 使用されなくなったという結論に達した場合、ベストプラクティスは、サーバーから削除されることをそれぞれのチームに通知することです。 天気の良い日には、この未使用のデータベースの完全バックアップを取り、サーバーから削除します。 しないように注意する必要があります 腐敗した SQL Server db このプロセス中に。

著者紹介:

Neil Varleyは、のデータ復旧の専門家です。 DataNumen、Inc。は、以下を含むデータ復旧技術の世界的リーダーです。 Outlookのpstデータエラーを修復します と優れた回復ソフトウェア製品。 詳細については、次のWebサイトをご覧ください。 WWW。datanumen.com

今すぐ共有:

コメントは締め切りました。