Microsoft SQL Server 2008R2 提供了一些工具来监控数据库。方法之一是动态管理视图。动态管理视图 (DMV)返回的服务器状态信息可用于监控服务器实例的运行状况、诊断问题和优化性能。
常规服务器动态管理对象包括:
dm_db_*:数据库和数据库对象
dm_exec_*:执行用户代码和关联的连接
dm_os_*:内存、锁定和时间安排
dm_tran_*:事务和隔离
dm_io_*:网络和磁盘的输入/输出
用户控制台所看到的metrics
命令: 总空间 = 数据空间 + 日志空间 + 其它文件空间(temp)
解释: 页面显示了磁盘空间的使用量单位是GB
命令: iopsflt.exe(自主开发)
解释: IOPS (Input/Output Operations Per Second),即每秒进行读写(I/O)操作的次数
命令:利用进程pid获得此进程的cpu使用率,再用获得的cpu使用率比上用户申请的得到一个百分比
解释: IOPS (Input/Output Operations Per Second),即每秒进行读写(I/O)操作的次数
命令
select count(*) from sys.dm_exec_sessions
where is_user_process=1
and login_name not in ('***')
and login_name not like '***'
and status not in ( 'Preconnect','Dormant')
解释
sys.dm_exec_sessions 是服务器范围的视图,显示了有关所有活动用户连接和内部任务的信息。
login_name 当前执行的会话所使用的 SQL Server 登录名。
is_user_process 用于判断是否是系统连接。
status 会话的状态。 可能的值:
Running - 当前正在运行一个或多个请求
Sleeping - 当前没有运行任何请求
Dormant – 会话因连接池而被重置,并且现在处于登录前状态。
Preconnect - 会话在资源调控器分类器中。
分类资源调控器支持对传入会话的分类。分类基于函数中包含的一组用户编写的条件。
函数逻辑的结果使资源调控器可以将会话归入现有工作负荷组类。
会话传入链接——分类(分类器函数)——路由到工作负荷组——工作负荷组使用相关联的资源池——资源池提供同时限制应用程序资源
命令
SELECT round(SUM(net_packet_size * 1.0 * num_reads / 1024), 0) AS read_kb, round(SUM(net_packet_size * 1.0 * num_writes / 1024), 0) AS write_kb
FROM sys.dm_exec_connections
WHERE session_id IN (
SELECT session_id
FROM sys.dm_exec_sessions
WHERE is_user_process = 1
)
理解
dm_exec_connections 返回与 SQL Server 实例建立的连接有关的信息以及每个连接的详细信息。
net_packet_size 用于信息和数据的网络包的大小。可为 Null 值。
num_reads 此连接中已发生的读包次数。可为 Null 值。
num_writes 此连接中已发生的写数据包次数。可为 Null 值。
session_id 标识与此连接关联的会话。可为 Null 值。
is_user_process 用于判断是否是系统连接。
命令
SELECT cntr_value
FROM sys.dm_os_performance_counters
WHERE object_name LIKE ‘MSSQL$MS3001:database%%’
AND instance_name = ‘_Total’
AND counter_name LIKE ‘Transactions/sec%%’
理解
Database 对象提供了计数器,来监视大容量复制操作、备份和还原吞吐量以及事务日志活动。
_Total 有的计数器的instance_name中有值为_Total的实例,它是对该计数器所有实例的聚合值(SUM)。
Transactions/sec 每秒为数据库启动的事务数
命令
SELECT cntr_value
FROM sys.dm_os_performance_counters
WHERE object_name = ‘MSSQL$MS3001:SQL Statistics’
AND counter_name = ‘Batch Requests/sec’
理解
SQL Statistics 对象提供计数器来监视编译和发送到 SQL Server实例的请求类型。通过监视查询编译和重新编译的次数以及 SQL Server 实例收到的批数,可了解 SQL Server 处理用户查询的速度,以及查询 优化器处理查询的效率。
Batch Requests/sec 每秒收到的 Transact-SQL 命令批数。
命令
SELECT a.cntr_value * 1.0 / b.cntr_value * 100.0 AS BufferCacheHitRatio
FROM sys.dm_os_performance_counters a
JOIN (SELECT cntr_value, OBJECT_NAME
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Buffer cache hit ratio base'
AND OBJECT_NAME = 'MSSQL$MS3001:Buffer Manager'
) b ON a.OBJECT_NAME = b.OBJECT_NAME
WHERE a.counter_name = 'Buffer cache hit ratio'
AND a.OBJECT_NAME = 'MSSQL$MS3001:Buffer Manager'
理解
sys.dm_os_performance_counters 为服务器维护的每个性能计数器返回一行。
counter_name 计数器的名称
OBJECT_NAME 计数器的所属类别
Buffer Manager 对象提供了计数器,用于监视 SQL Server 如何使用:内存存储数据页、内部数据结构和过程缓存; 计数器监视 SQL Server 读取和写入数据库页时的物理 I/O。
Buffer Manager中的Buffer cache hit ratio base和Buffer cache hit ratio
Buffer cache hit ratio 官方解释在缓冲区高速缓存中找到而不需要从磁盘中读取的页的百分比。
命令
SELECT cntr_value
FROM sys.dm_os_performance_counters
WHERE object_name = 'MSSQL$MS3001:Access Methods'
AND counter_name = 'Full Scans/sec'
理解
Access Methods 对象提供用于监视如何访问数据库中的逻辑数据的计数器。
Full Scans/sec 每秒不受限制的完全扫描数。这些扫描可以是基表扫描,也可以是全文索引扫描。
命令
SELECT cntr_value
FROM sys.dm_os_performance_counters
WHERE object_name = 'MSSQL$MS3001:SQL Statistics'
AND counter_name = 'SQL Compilations/sec'
理解
每秒的 SQL 编译数。 表示编译代码路径被进入的次数。 包括 SQL Server 中语句级重新编译导致的编译。 当 SQL Server 用户活动稳定后,该值将达到稳定状态。
命令
SELECT cntr_value
FROM sys.dm_os_performance_counters
WHERE object_name = 'MSSQL$MS3001:Buffer Manager'
AND counter_name = 'Checkpoint pages/sec'
理解
由要求刷新所有脏页的检查点或其他操作每秒刷新到磁盘的页数。
命令
SELECT cntr_value
FROM sys.dm_os_performance_counters
WHERE object_name = 'MSSQL$MS3001:General Statistics'
AND counter_name = 'Logins/sec'
理解
General Statistics 对象提供计数器,用于监视服务器范围内的常规活动
Logins/sec 每秒启动的登录数。 这不包括已入池连接。
命令
SELECT cntr_value
FROM sys.dm_os_performance_counters
WHERE object_name = 'MSSQL$MS3001:Locks'
AND counter_name = 'Lock Timeouts/sec'
AND instance_name = '_Total'
理解
Locks 对象提供了有关各种资源类型的 SQL Server 锁的信息
Lock Timeouts/sec 每秒超时的锁请求数,包括对 NOWAIT 锁的请求。
命令
SELECT cntr_value
FROM sys.dm_os_performance_counters
WHERE object_name = 'MSSQL$MS3001:Locks'
AND counter_name = 'Number of Deadlocks/sec'
AND instance_name = '_Total'
理解
Number of Deadlocks/sec 每秒导致死锁的锁请求数。
命令
SELECT cntr_value
FROM sys.dm_os_performance_counters
WHERE object_name = 'MSSQL$MS3001:Locks'
AND counter_name = 'Lock Waits/sec'
AND instance_name = '_Total'
解释
Lock Waits/sec 每秒要求调用者等待的锁请求数。