如何获取您的使用情况统计信息 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 个字段。第一个字段提供数据库名称信息。这是我们的关键字段,因为它有助于我们确定目标数据库是否正在使用。第二个字段有助于我们将数据库连接分类为用户连接或其他连接。 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事件探查器这种方法在识别数据库使用方面非常强大,但它非常耗费资源。 是的,我们正在谈论探查器。 从 Profiler 中选择一个模板或使用自定义模板并跟踪数据库连接。

删除数据库

删除数据库通过上面列出的方法,您将能够确定您的数据库是否仍在使用中。 如果您得出不再使用它的结论,最好的做法是通知相应的团队它将从服务器中删除。 在晴朗的一天,对这个未使用的数据库进行完整备份并将其从服务器上删除。 必须注意不要 腐败 SQL Server db 在这个过程中。

作者简介:

Neil Varley 是一位数据恢复专家 DataNumen, Inc.,它是数据恢复技术领域的世界领先者,包括 修复 Outlook pst 数据错误 和 excel 恢复软件产品。 欲了解更多信息,请访问 datanumen.com

立即分享:

评论被关闭。