系统表映射到系统视图

一直对旧版本中的系统表和新版本中的系统视图分不清楚。此文参考将系统表映射到系统视图 (Transact-SQL)
实例级别系统视图或函数
1、登录主体

--1、sys.syslogins-->sys.server_principals、sys.sql_logins
--sys.server_principals 每个服务器级别主体占一行
--sys.sql_logins 每个SQL Server身份验证登录返回一行
--sys.server_principals比sys.syslogins多SERVER_ROLE类型的主体
select * from sys.server_principals where type_desc='SERVER_ROLE' order by name
SELECT pr.principal_id, pr.name, pr.type_desc,   
    pe.state_desc, pe.permission_name   
FROM sys.server_principals AS pr   
JOIN sys.server_permissions AS pe
    ON pe.grantee_principal_id = pr.principal_id;
View Code

"-->"左侧表示旧版系统表,"-->"右侧表示新版系统视图(下同)。权限问题可参考数据库权限检查 ,监控系列中的登录名信息建议使用新版系统视图。
2、数据库、数据库文件

--2.1、sysdatabases-->sys.databases
select sd.database_id,sd.name DatabaseName,sd.state_desc,sd.log_reuse_wait_desc,sd.create_date,suser_sname(sd.owner_sid) ownername
,sd.collation_name,sd.recovery_model_desc,sd.compatibility_level,sd.user_access_desc
,case sd.is_read_only when 1 then 'READ_ONLY' when 0 then 'READ_WRITE' end as read_only_desc
,sd.page_verify_option_desc
,case when (sd.is_published=1 or sd.is_merge_published=1) then 1 else 0 end as is_published
,sd.is_distributor
,sd.is_encrypted --is_encrypted for >=08
,sd.is_cdc_enabled --is_cdc_enabled for >=08
from sys.databases sd 

--2.2、sysaltfiles-->sys.master_files
select db_name(mf.database_id) DatabaseName, mf.[file_id],mf.name LogicalName,mf.type_desc,mf.data_space_id,mf.physical_name
,mf.state_desc,mf.size size_page,mf.max_size max_size_page,mf.growth,mf.is_percent_growth,mf.is_read_only,mf.is_sparse,mf.is_name_reserved
from sys.master_files mf
--对应各DB下的系统视图或函数
select * from sys.database_files
select * from sys.filegroups
View Code

3、连接、会话信息

--3、sysprocesses-->sys.dm_exec_connections、sys.dm_exec_sessions、sys.dm_exec_requests
--sys.dm_exec_connections 返回有关与此 SQL Server 实例建立的连接的信息以及每个连接的详细信息
--sys.dm_exec_sessions 所有活动用户连接和内部任务的信息。 此信息包含客户端版本、客户端程序名称、客户端登录时间、登录用户、当前会话设置等
--sys.dm_exec_requests 返回有关在 SQL Server 中正在执行的每个请求的信息
--查看连接信息
select spid,kpid,blocked,waittype,waittime,lastwaittype,waitresource,dbid,cpu,login_time,last_batch,ecid,open_tran,status
from sys.sysprocesses where spid in(52,59)
select session_id,most_recent_session_id,connect_time,last_read,client_net_address,most_recent_sql_handle 
from sys.dm_exec_connections where session_id in(52,59)
select session_id,login_time,last_request_start_time,status,transaction_isolation_level,login_name,program_name
from sys.dm_exec_sessions where session_id in(52,59)
select session_id,start_time,status,database_id,blocking_session_id,wait_type,wait_time,last_wait_type,wait_resource
,statement_start_offset,statement_end_offset
from sys.dm_exec_requests where session_id in(52,59)
View Code


上图来自监控-阻塞检查中的测试样例
4、计划缓存

dbcc FREEPROCCACHE
go
use AdventureWorks2008R2
go
exec sp_executesql N'select * from Sales.SalesOrderDetail where ProductID = @pid order by SalesOrderID',
N'@pid int',@pid = 870;--870|897
--4、syscacheobjects-->sys.dm_exec_cached_plans、sys.dm_exec_plan_attributes、sys.dm_exec_sql_text、sys.dm_exec_cached_plan_dependent_objects
--4.1、sys.dm_exec_cached_plans 缓存的查询计划、缓存的查询文本、缓存计划占用的内存量,以及重新使用缓存计划的计数
SELECT ecp.bucketid,ecp.cacheobjtype,ecp.objtype,ecp.usecounts,ecp.plan_handle,est.[text],eqp.query_plan
FROM sys.dm_exec_cached_plans ecp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS est
CROSS APPLY sys.dm_exec_query_plan(ecp.plan_handle) AS eqp
WHERE text LIKE N'%Sales.SalesOrderDetail%'
GO
--4.2、sys.dm_exec_plan_attributes
SELECT pvt.plan_handle,pvt.set_options,pvt.sql_handle
FROM (
      SELECT ecp.bucketid,ecp.cacheobjtype,ecp.objtype,ecp.usecounts,ecp.plan_handle,epa.attribute,epa.[value]
      FROM sys.dm_exec_cached_plans ecp
      OUTER APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa
      WHERE plan_handle=0x06000700331CE236B880510E000000000000000000000000
      ) AS ecpa
PIVOT (MAX(ecpa.value) FOR ecpa.attribute IN ("set_options","sql_handle")) AS pvt
GO

--补充1、sys.dm_exec_query_stats 返回 SQL Server中缓存查询计划的聚合性能统计信息
--特定语句聚合性能统计µs
select top 100 SUBSTRING (c.text,(b.statement_start_offset/2) + 1
      ,((CASE WHEN b.statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX), c.text)) * 2 
       ELSE b.statement_end_offset END - b.statement_start_offset)/2) + 1) RunSQL
      ,b.creation_time --编译计划的时间
      ,b.last_execution_time --上次开始执行计划的时间
      ,b.execution_count AS SQLExCount--计划自上次编译以来所执行的次数
      ,b.last_logical_reads --上次执行计划时所执行的逻辑读取次数
      ,b.total_logical_reads/b.execution_count avg_logical_reads
      ,b.last_worker_time --上次执行计划所用的 CPU 时间(微秒)
      ,b.last_elapsed_time --最近一次完成执行此计划所用的时间(微秒)
      ,b.total_elapsed_time/b.execution_count avg_elapsed_time --上次完成执行此计划所用的总时间
      --,b.sql_handle,b.plan_handle
      --,d.query_plan
      ,c.text
FROM sys.dm_exec_query_stats b with(nolock)
CROSS APPLY sys.dm_exec_sql_text(b.sql_handle) c
CROSS APPLY sys.dm_exec_query_plan(b.plan_handle) d
where c.text like '%Sales.SalesOrderDetail%'

--补充2、sys.dm_exec_procedure_stats 返回缓存存储过程的聚合性能统计信息
--返回做IO数目最多的存储过程以及它们的执行计划(微秒)
SELECT TOP 20 DB_NAME(eps.database_id) DBname
      ,OBJECT_NAME(eps.object_id,eps.database_id) ProcName
      ,eps.cached_time
      ,eps.last_execution_time
      ,eps.execution_count
      ,eps.last_logical_reads
      ,eps.total_logical_reads / eps.execution_count avg_logical_reads
      ,eps.total_logical_writes / eps.execution_count avg_logical_writes
      ,eps.total_physical_reads / eps.execution_count avg_physical_reads
      --,eps.total_worker_time / eps.execution_count AS avg_worker_time
      ,eps.total_elapsed_time / eps.execution_count avg_elapsed_time
      --,b.text
      ,c.query_plan
      ,eps.plan_handle
FROM  sys.dm_exec_procedure_stats AS eps
      CROSS APPLY sys.dm_exec_sql_text(eps.sql_handle) b
      CROSS APPLY sys.dm_exec_query_plan(eps.plan_handle) c
WHERE OBJECT_NAME(eps.object_id,eps.database_id) ='procname'
ORDER BY
       eps.total_logical_reads/eps.execution_count desc

dbcc freeproccache(0x06000700331CE236B880510E000000000000000000000000)
select * from sys.dm_exec_query_plan(0x06000700331CE236B880510E000000000000000000000000)
select * From sys.dm_exec_sql_text(0x06000700331CE236B880510E000000000000000000000000)
View Code

很多计划、性能信息都可以从上面的系统视图查看,2005版查看存储过程的执行情况
5、性能计数器

--5、sys.sysperfinfo-->sys.dm_os_performance_counters 为服务器维护的每个性能计数器返回一行 
--最大服务器内存
SELECT top 10 *,cntr_value/1024 cntr_value_mb 
FROM sys.dm_os_performance_counters with(nolock)
where counter_name like '%Server Memory%'

--Total Pages:BufferPool的总大小(等于DatabasePages+Free Pages+Stolen Pages)。
--该值乘以8KB,应该等于MemoryManager:TotalServer Memory的值。而TotalServer Memory(KB):SQLServer缓冲区提交的内存,基本等于SQL使用的内存。
select top 10 * ,
cast(p.cntr_value*8/1024.0 as int) as MemoryMB
from sys.dm_os_performance_counters p with(nolock)
where p.object_name like '%MSSQL$SQL08R2:Buffer Manager%'
and (p.counter_name like '%Total Pages%'
or p.counter_name like '%Free Pages%'
or p.counter_name like '%Target Pages%'
or p.counter_name like '%Stolen Pages%'
or p.counter_name like '%Database Pages%')
View Code

原文地址:https://www.cnblogs.com/Uest/p/6419017.html