SQL Server活跃表:善用它获取性能收益(sqlserver活跃表)
SQL Server存储了一个有用的系统表,我们被称为“活跃表”,它们对收集特定事务信息非常重要。从业务层面上看,它们经常被DBA用来监测会话活动、监视慢查询、标识正在执行的事务以及记录读、写事务的时间戳。
活跃表的主要构成包括sys.dm_tran_active_snapshot_database 、 sys.dm_tran_active_transactions、 sys.dm_tran_active_snapshots 和 sys.dm_tran_database_transactions。sys.dm_tran_active_snapshot_database 是一个内容表,主要用来对特定数据库中存在的事务快照作一个标记,可以使DBA在不同服务器之间比较数据库之间的活动性差异。sys.dm_tran_active_transactions主要用于模仿出具体查询以及报告当前正在处理的事务。sys.dm_tran_active_snapshots用于记录活动事务和被锁定条目的事务ID,以及锁定类型等等。最后,sys.dm_tran_database_transactions 是活动事务表,它可以提供特定数据库所有正在运行的事务的明细信息。
善用SQL Server的活跃表不仅可以收集关键的事务信息,而且能帮助DBA获取极大的性能收益。例如,DBA可以通过查看活跃表,找出消耗更多CPU时间或者占用更多IO资源的查询,然后通过优化索引结构或查询来改善性能。此外,DBA还可以对活跃表进行定期检查,加强服务器负载管理,在占用较多资源的情况下,及时限制和调整它们以获得最佳性能,比如使用下面的代码来获取每个数据库具体的利用率:
SELECT
DB_NAME(database_id) as Database_Name,
COUNT(*) as ‘Number_of_Active_Transactions’,
(COUNT(*)*1.0 / @@MaxDOP) * 100 as ‘Percentage_of_MaxDOP_Utilized’
FROM
sys.dm_tran_active_snapshot_database
GROUP BY
DB_NAME(database_id)
HAVING
(COUNT(*) * 1.0 / @@MaxDOP) * 100 > 5.0
ORDER BY
‘Number_of_Active_Transactions’ DESC
总之,活跃表在获得性能收益方面是极具价值的,DBA可以通过活跃表确定什么是慢查询,以及哪些查询会消耗大量的资源,以及可以收集重要信息以进行监测和管理的信息。当然,DBA最好对活跃表应用有一定的了解,以确保系统的安全和稳定性。