动态管理视图是SQL Server的一个功能,用于提供详细的数据库和系统信息。第一类的DMVs,正如我在第一篇文章“深入了解SQL Server动态管理视图”中所指出的是针对数据库级别的。另一类DMV是针对服务器级别的,返回SQL Server实例及其所在系统的信息。 例如,动态管理视图sys.dm_exec_cached_plans返回详细的关于缓存的或当前执行的查询计划。
运行下面的SELECT语句,可以获得系统中字节数超过400,000字节的查询计划的详细资料: SELECT bucketid AS BucketID, usecounts AS……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
动态管理视图是SQL Server的一个功能,用于提供详细的数据库和系统信息。第一类的DMVs,正如我在第一篇文章“深入了解SQL Server动态管理视图”中所指出的是针对数据库级别的。另一类DMV是针对服务器级别的,返回SQL Server实例及其所在系统的信息。
例如,动态管理视图sys.dm_exec_cached_plans返回详细的关于缓存的或当前执行的查询计划。运行下面的SELECT语句,可以获得系统中字节数超过400,000字节的查询计划的详细资料:
SELECT bucketid AS BucketID, usecounts AS UseCounts, size_in_bytes AS Size FROM sys.dm_exec_cached_plans WHERE size_in_bytes > 400000; |
请注意,该语句返回每个计划的桶ID、使用次数和大小,如下表所示:
BucketID | UseCounts | Size |
4577 | 12 | 1122304 |
5914 | 2 | 450560 |
9824 | 1 | 598016 |
2523 | 5 | 434176 |
在这里,我的系统中只有四个大小超过400,000字节的缓存的或正在执行的查询计划。(同样,我的SQL Server只运行了很短的时间。)
我们看的下一个服务器级别的DMV是sys.dm_exec_connections,该视图返回有关SQL Server实例连接建立的信息。运行下面的SELECT语句,返回每个连接的会话ID和连接时间:
SELECT session_id AS SessionID, connect_time AS StartTime, DATEDIFF(minute, connect_time, GETDATE()) AS MinConnected FROM sys.dm_exec_connections; |
在这个语句中,我还计算了自从连接建立后已经流逝的时间(单位:分钟)。下表是动态管理视图sys.dm_exec_connections返回的结果:
SessionID | StartTime | MinConnected |
51 | 2011-01-23 08:44:52.890 | 136 |
52 | 2011-01-23 10:45:22.560 | 15 |
53 | 2011-01-23 10:55:21.577 | 5 |
56 | 2011-01-23 08:50:37.140 | 130 |
现在让我们来看看动态管理视图sys.dm_exec_procedure_stats,该视图返回缓存的存储过程的性能统计数据。下面的例子将返回ReportServer$SQLSRV2008数据库中存储过程的信息(如果你已经在系统中配置了SQL Server报表服务,那么该数据库就已经被安装):
USE ReportServer$SQLSRV2008; GO SELECT OBJECT_NAME(object_id) AS ObjectName, execution_count AS ExecCount, total_physical_reads AS PhysReads FROM sys.dm_exec_procedure_stats WHERE database_id = DB_ID('ReportServer$SQLSRV2008') AND execution_count > 10 ORDER BY ObjectName; |
在本例下,我只检索那些执行次数大于10的数据。正如下表所示,该语句返回存储过程的名字、执行次数和总物理读取数:"
ObjectName | ExecCount | PhysReads |
GetDBVersion | 722 | 0 |
GetMyRunningJobs | 48 | 0 |
在接下来的例子中,我使用sys.dm_os_threads动态管理视图返回操作系统中SQL Server进程所拥有的线程信息:
SELECT thread_address AS ThreadAddress, creation_time AS CreatedTime, stack_bytes_committed BytesCommitted, stack_bytes_used AS BytesUsed FROM sys.dm_os_threads WHERE stack_bytes_used > 10000; |
该语句返回线程的地址、创建时间、提交的字节数和使用的字节数。语句还限制了只返回使用字节数超过10,000的这些行。如下表所示,只有两个线程的使用字节数超过规定的大小:
ThreadAddress | CreatedTime | BytesCommitted | BytesUsed |
0x7FFDEE28 | 2011-01-23 08:44:22.000 | 516096 | 11280 |
0x7FFA2E28 | 2011-01-23 08:44:25.127 | 516096 | 24320 |
最后我们来看服务器相关的动态管理视图是sys.dm_os_sys_info。该视图返回运行SQL Server的计算机上的各种信息。这些信息可用于确定哪些是对SQL Server可用的资源,如下例所示:
SELECT physical_memory_in_bytes AS PhysMemory, virtual_memory_in_bytes AS VirtMemory, stack_size_in_bytes AS StackSize, max_workers_count AS WorkersCount FROM sys.dm_os_sys_info; |
下表显示这个语句返回的信息:
PhysMemory | VirtMemory | StackSize | WorkersCount |
536330240 | 2147352576 | 520192 | 256 |
正如你所看到的,我使用动态管理视图sys.dm_os_sys_info查询系统配置的物理内存和虚拟内存数量,以及堆栈大小和最大工作数。
使用SQL Server动态管理视图
当然,还有更多的比我在这两篇文章中所列举的DMVs。你可以使用这个SQL Server功能来查询变更数据捕获的信息,相关的I/O活动,通用语言运行时,数据库镜像和许多其他类别的信息。详细信息请参阅SQL Server联机丛书“动态管理视图和函数(Transact - SQL)”。该主题将按特定类别划分DMVs。
对于每个类别,你都可以链接到该类型的DMVs清单,以及该类别的每个DMV,你可以链接到该DMV的特定主题。每当你在语句中引用一个DMV,首先要阅读其主题以了解该视图返回的信息和对视图列类型的描述。你很快就会意识到我文章所描述的内容仅仅是冰山的一角。
翻译
相关推荐
-
OpenWorld18大会:Ellison宣布数据库的搜寻和破坏任务
在旧金山举行的甲骨文OpenWorld 2018大会中,甲骨文首席技术官(CTO)兼创始人Larry Elli […]
-
云端SQL Server高可用性最佳做法
与内部部署相比,在云端运行SQL Server可为数据库软件用户提供更多的灵活性和可扩展性,也可能更省钱。但云 […]
-
ObjectRocket着力发展Azure MongoDB服务
MongoDB吸引了微软公司的注意力,微软公司计划针对运行于该公司2017年发布的Azure Cosmos D […]
-
绘制数据关系图的利器:SQL Server 图像数据库工具
SQL Server 2017新增了图形数据库功能,你可以使用图结构来表示不同数据元素之间的关系。