1. 什么是DMVs
DMV是指动态管理视图(Dynamic Management Views),是SQL Server中的内置对象,提供有关SQL Server实例和数据库状态的信息。与之相关的对象是动态管理函数(Dynamic Management Functions,DMFs),提供了一种使用返回表的函数来查看SQL Server实例和数据库操作的方法。
DMVs提供了实时的、有关系统性能的信息,这些信息通常比系统表和Ntile的内容更详细、更具有针对性和可操作性。通过DMVs,您可以了解SQL Server实例、数据库、事务和应用程序的状态,以及长时间运行的查询和活动的查询的详细信息。DMVs可以帮助您来诊断性能问题,进行追踪,分析等。
2. DMV的分类
2.1 管理对象DMVs
管理对象DMVs是针对管理任务的性能表现和状态相关信息。关于SQL Server实例和数据库的一些基础性能计数器可以在这些DMVs中找到。例如,内容包括缓存的管理、锁等待以及访问计数等性能计数器。
这些DMVs包括内存、CUP、IO、等待和锁定等方面的数据。其中最常用的DMVs包括sys.dm_exec_requests、sys.dm_exec_sessions和sys.dm_exec_connections等。此外,sys.dm_exec_query_stats还提供了一个视图,通过这个视图可以获取有关查询的信息和计数器统计信息。
2.2 执行计划DMVs
这些DMVs提供了查询的执行计划的详细信息,包括XML格式的计划、统计和计数器等。使用这些视图,可以确定查询优化器如何处理查询,并确定在执行查询时使用的代码路径、开销和资源使用情况。
这些DMVs包括sys.dm_exec_query_plan、sys.dm_exec_text_query_plan和sys.dm_exec_single_sql_text等。其中,sys.dm_exec_text_query_plan可以根据要查询的计划句柄或指定的SQL语句来返回计划。
2.3 IO统计DMVs
IO统计DMVs用于提供与输入输出和磁盘读取有关的性能计数器和性能状态的信息。它们可以确定SQL Server实例中正在运行的查询和操作的磁盘资源使用情况。通过这些视图,可以确定查询导致的磁盘操作情况和性能瓶颈。
这些DMVs包括sys.dm_io_pending_io_requests、sys.dm_io_virtual_file_stats和sys.dm_io_cluster_shared_drives等。其中最常用的DMVs是sys.dm_io_pending_io_requests和sys.dm_io_virtual_file_stats。
3. 如何使用DMVs进行调优
使用DMVs进行性能调优的最常见方式是,评估执行服务器上的查询和编写的存储过程以及数据库的整体情况。使用DMVs可以了解处理特定查询时的资源利用、锁定问题、执行时间、查询计划和瓶颈等。以下是一些应用DMVs来诊断性能问题的示例。
3.1 了解缓存优化
缓存优化是提高SQL Server性能的一种方法。与DMVs相结合,可以查看已缓存的计划和存储过程调用频率,以确定SQL Server何时决定将特定查询的计划保留在缓存中。同时,您还可以查看缓存错误,例如死锁造成的问题和缓存清除造成的问题。以下是一些相关DMVs的示例。
SELECT TOP 10
OBJECT_NAME(objectID),
counter_name,
cntr_value
FROM
sys.dm_os_performance_counters
WHERE
counter_name IN ('Cache Hit Ratio','Cache Object Counts')
AND OBJECT_NAME(objectID) LIKE '%Plan Cache%'
3.2 检查查询计划
查询计划可以描述SQL Server生成的执行计划。使用DMVs可以查看查询是否使用索引,查看查询计划中的控制流、条件、分组和操作等,获取查询的系统资源使用情况。以下是一些相关DMVs的示例。
SELECT TOP 10
SUBSTRING(qt.TEXT, (r.statement_start_offset/2)+1, (
(CASE r.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE r.statement_end_offset
END - r.statement_start_offset
)/2)+1) AS sql_text,
r.*
FROM
sys.dm_exec_query_stats AS r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS qt
ORDER BY r.total_worker_time DESC
3.3 分析阻塞和死锁
使用锁定和阻塞统计,您可以监视SQL Server是如何处理请求和响应的请求等。DMVs可以查看锁定和阻塞的状态信息、锁定持续时间、锁定级别等。以下是一些相关DMVs的示例。
SELECT l.request_session_id AS SPID,
DB_NAME(l.resource_database_id) AS DatabaseName,
OBJECT_NAME(l.resource_associated_entity_id) AS ObjectName,
l.resource_type AS ResourceType,
l.request_mode AS RequestMode,
l.request_status AS RequestStatus
FROM sys.dm_tran_locks AS l
WHERE l.request_status <> 'GRANT'
3.4 监视资源使用
DMVs可以查看服务器上使用的计数器、缓存和某些资源的状态信息。使用这些视图,可以查看服务器性能、查询的资源使用情况,以及可能存在的瓶颈。以下是一些相关DMVs的示例。
SELECT TOP 10 *
FROM sys.dm_exec_query_memory_grants
ORDER BY total_memory_granted DESC
总结
通过利用DMVs,您可以查看SQL Server实例和数据库的性能和状态数据,以诊断性能问题,并对性能进行调优。DMVs可帮助您确定查询的执行计划、IO统计信息、缓存、锁定和阻塞等的情况,以及服务器性能、查询的资源使用情况、可能的瓶颈。掌握这些信息可以让您更好地了解什么是影响系统性能的主要问题,以及如何解决这些问题。