深入解析SQL Server动态管理对象 |
本文标签:SQL Server动态管理对象 SQL Server动态管理对象在SQL Server2005之前的版本中并不存在,SQL Server动态管理对象是SQL Server 2005的新功能,它们是在指定时间返回某个数据库实例的特殊状态信息的数据库视图或函数 。 这些SQL Server动态管理对象对象允许数据库管理员或开发者对数据库服务器进行高效监控 。动态管理对象取代了SQL Server以前版本中的许多系统表格,但也为数据库管理员提供更多观测手段 。 服务器上需要监控的内容,几乎都有对应的SQL Server动态管理对象 。既然有这么多动态管理对象,逐一进行讨论是不实际的 。例如,共有12类动态管理对象,但这里我主要讨论我认为相当重要的五个对象,它们分别来自与SQL Server操作系统、目录和执行有关的类中 。 这些对象被分为两类:数据库级别和服务器级别 。SQL Server 2005的安全构架有些不同,所以必须采取一些措施保证能够使用本文讨论的视图和函数 。必须保证使用这些例子的用户能够查看对象的SERVER STATE和DATABASE STATE 。可以应用GRANT语句来完成这一点 。 建立一个可用在所有例子里面的表格 。列表A是建立这个表格的代码 。 SQL Server操作系统相关动态管理对象 sys.dm_os_performance_counters:这个视图返回的信息列举与SQL Server直接相关的性能统计 。返回的信息代表通过Windows性能监控器显示的外部性能计数器 。在SQL Server 2000中,这些数据以一个叫做sysperfinfo的系统表格来表示,SQL Server 2005中也有这个表格,但仅用于向后兼容 。将来的版本可能会删除这个表格 。 要了解如何应用这个视图,而不是运行Windows性能监控器来获取系统信息,请运行列表B中的查询代码 。这个查询将返回服务器当前时刻的缓存命中率(Buffer Cache Hit Ratio) 。缓存命中率指在内存中所发现的SQL Server请求页面的百分比 。如果服务器运转正常,这个值一般在90%以上 。如果这个值低于90%,则意味着服务器将会去硬盘那里恢复数据页面,这可能是服务器需要更多内存的信号 。 如果为了同样的目的,准备运行上面的查询,并将得到的结果与运行Windows性能监控器显示的结果进行比较(SQL Server:缓冲器管理器缓存命中率),会发现这些数据几乎是一样的 。稍稍研究一下,就可以根据这个表格开发出自己的脚本库,而不必总是运行Windows性能监控器 。 Caveat:这个视图仅限于SQL Server相关的计数器使用 。如果希望获得SQL Server之外的数据,还是要使用Windows性能监控器 。 这个函数返回的另一个特别有趣的域为avg_page_space_used_in_percent域,它说明数据页面有多大 。从查询中发现数据页面约为0.25% 。可以应用这个数据来开发程序,查看数据库表格,并根据程序中设定的标准,重新为它们编写目录 。 sys.dm_exec_requests:这个视图显示发生在SQL Server实例中的每个请求的有关信息 。当研究服务器阻塞时,由此视图提供的信息特别有用 。读、写、会话设置和 blocking_session_id是这个视图返回的一些有用数据 。blocking_session_id栏指出系统上阻塞数据库请求的会话 。稍后,我将举出一个例子,说明如何确定用户运行的阻塞请求的语句 。
|