• 系统表映射到系统视图


    一直对旧版本中的系统表和新版本中的系统视图分不清楚。此文参考将系统表映射到系统视图 (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

  • 相关阅读:
    子站同步
    phpcms分站
    oms.corp
    php curl 正则获取网页标题
    php根据网址获取标题和描述
    优化打印订单页面;补充配送商订单菜单权限
    隐藏配送商订单状态
    manifest
    懒加载lazyload
    angularjs源码1
  • 原文地址:https://www.cnblogs.com/Uest/p/6419017.html
Copyright © 2020-2023  润新知