查看连接当前数据库的SPID所加的锁

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT DB_NAME(resource_database_id) AS DatabaseName
, request_session_id
, resource_type
, CASE
WHEN resource_type = 'OBJECT'
THEN OBJECT_NAME(resource_associated_entity_id)
WHEN resource_type IN ('KEY', 'PAGE', 'RID')
THEN (SELECT OBJECT_NAME(OBJECT_ID)
FROM sys.partitions p
WHERE p.hobt_id = l.resource_associated_entity_id)
END AS resource_type_name
, request_status
, request_mode
FROM sys.dm_tran_locks l
WHERE request_session_id !=@@spid
ORDER BY request_session_id

结果如图:

如果像查看更多的锁,调整where条件即可

查看没关闭事务的空闲Session

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT es.session_id, es.login_name, es.host_name, est.text
  , cn.last_read, cn.last_write, es.program_name
FROM sys.dm_exec_sessions es
INNER JOIN sys.dm_tran_session_transactions st
            ON es.session_id = st.session_id
INNER JOIN sys.dm_exec_connections cn
            ON es.session_id = cn.session_id
CROSS APPLY sys.dm_exec_sql_text(cn.most_recent_sql_handle) est
LEFT OUTER JOIN sys.dm_exec_requests er                    
            ON st.session_id = er.session_id
                AND er.session_id IS NULL

查看被阻塞的语句和它们的等待时间

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT
  Waits.wait_duration_ms / 1000 AS WaitInSeconds
  , Blocking.session_id as BlockingSessionId
  , DB_NAME(Blocked.database_id) AS DatabaseName
  , Sess.login_name AS BlockingUser
  , Sess.host_name AS BlockingLocation
  , BlockingSQL.text AS BlockingSQL
  , Blocked.session_id AS BlockedSessionId
  , BlockedSess.login_name AS BlockedUser
  , BlockedSess.host_name AS BlockedLocation
  , BlockedSQL.text AS BlockedSQL
  , SUBSTRING (BlockedSQL.text, (BlockedReq.statement_start_offset/2) + 1,
    ((CASE WHEN BlockedReq.statement_end_offset = -1
      THEN LEN(CONVERT(NVARCHAR(MAX), BlockedSQL.text)) * 2
      ELSE BlockedReq.statement_end_offset
      END - BlockedReq.statement_start_offset)/2) + 1)
                    AS [Blocked Individual Query]
  , Waits.wait_type
FROM sys.dm_exec_connections AS Blocking                         
INNER JOIN sys.dm_exec_requests AS Blocked
            ON Blocking.session_id = Blocked.blocking_session_id
INNER JOIN sys.dm_exec_sessions Sess
            ON Blocking.session_id = sess.session_id 
INNER JOIN sys.dm_tran_session_transactions st
            ON Blocking.session_id = st.session_id
LEFT OUTER JOIN sys.dm_exec_requests er
            ON st.session_id = er.session_id
                AND er.session_id IS NULL
INNER JOIN sys.dm_os_waiting_tasks AS Waits
            ON Blocked.session_id = Waits.session_id
CROSS APPLY sys.dm_exec_sql_text(Blocking.most_recent_sql_handle)
                             AS BlockingSQL
INNER JOIN sys.dm_exec_requests AS BlockedReq                    
            ON Waits.session_id = BlockedReq.session_id
INNER JOIN sys.dm_exec_sessions AS BlockedSess
            ON Waits.session_id = BlockedSess.session_id
CROSS APPLY sys.dm_exec_sql_text(Blocked.sql_handle) AS BlockedSQL
ORDER BY WaitInSeconds

查看超过30秒等待的查询

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT
  Waits.wait_duration_ms / 1000 AS WaitInSeconds
  , Blocking.session_id as BlockingSessionId
  , Sess.login_name AS BlockingUser
  , Sess.host_name AS BlockingLocation
  , BlockingSQL.text AS BlockingSQL
  , Blocked.session_id AS BlockedSessionId
  , BlockedSess.login_name AS BlockedUser
  , BlockedSess.host_name AS BlockedLocation
  , BlockedSQL.text AS BlockedSQL
  , DB_NAME(Blocked.database_id) AS DatabaseName
FROM sys.dm_exec_connections AS Blocking                        
INNER JOIN sys.dm_exec_requests AS Blocked
            ON Blocking.session_id = Blocked.blocking_session_id
INNER JOIN sys.dm_exec_sessions Sess
            ON Blocking.session_id = sess.session_id 
INNER JOIN sys.dm_tran_session_transactions st
            ON Blocking.session_id = st.session_id
LEFT OUTER JOIN sys.dm_exec_requests er
            ON st.session_id = er.session_id
                AND er.session_id IS NULL
INNER JOIN sys.dm_os_waiting_tasks AS Waits
            ON Blocked.session_id = Waits.session_id
CROSS APPLY sys.dm_exec_sql_text(Blocking.most_recent_sql_handle)
                                     AS BlockingSQL
INNER JOIN sys.dm_exec_requests AS BlockedReq                   
            ON Waits.session_id = BlockedReq.session_id
INNER JOIN sys.dm_exec_sessions AS BlockedSess
            ON Waits.session_id = BlockedSess.session_id
CROSS APPLY sys.dm_exec_sql_text(Blocked.sql_handle) AS BlockedSQL
WHERE Waits.wait_duration_ms > 30000
ORDER BY WaitInSeconds

buffer中缓存每个数据库所占的buffer

SET TRAN ISOLATION LEVEL READ UNCOMMITTED
SELECT
    ISNULL(DB_NAME(database_id), 'ResourceDb') AS DatabaseName
    , CAST(COUNT(row_count) * 8.0 / (1024.0) AS DECIMAL(28,2))
                                                   AS [Size (MB)]
FROM sys.dm_os_buffer_descriptors
GROUP BY database_id
ORDER BY DatabaseName

结果如图:

当前数据库中每个表所占缓存的大小和页数

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT 
     OBJECT_NAME(p.[object_id]) AS [TableName]
     , (COUNT(*) * 8) / 1024   AS [Buffer size(MB)]
     , ISNULL(i.name, '-- HEAP --') AS ObjectName
     ,  COUNT(*) AS NumberOf8KPages
FROM sys.allocation_units AS a
INNER JOIN sys.dm_os_buffer_descriptors AS b
    ON a.allocation_unit_id = b.allocation_unit_id
INNER JOIN sys.partitions AS p
INNER JOIN sys.indexes i ON p.index_id = i.index_id
                         AND p.[object_id] = i.[object_id]
    ON a.container_id = p.hobt_id
WHERE b.database_id = DB_ID()
  AND p.[object_id] > 100
GROUP BY p.[object_id], i.name
ORDER BY NumberOf8KPages DESC

结果如下:

数据库级别等待的IO

SET TRAN ISOLATION LEVEL READ UNCOMMITTED
SELECT DB_NAME(database_id) AS [DatabaseName]
  , SUM(CAST(io_stall / 1000.0 AS DECIMAL(20,2))) AS [IO stall (secs)]
  , SUM(CAST(num_of_bytes_read / 1024.0 / 1024.0 AS DECIMAL(20,2)))
                                                        AS [IO read (MB)
  , SUM(CAST(num_of_bytes_written / 1024.0 / 1024.0  AS DECIMAL(20,2)))
                                                     AS [IO written (MB)
  , SUM(CAST((num_of_bytes_read + num_of_bytes_written)
                   / 1024.0 / 1024.0 AS DECIMAL(20,2))) AS [TotalIO (MB)
FROM sys.dm_io_virtual_file_stats(NULL, NULL)
GROUP BY database_id
ORDER BY [IO stall (secs)] DESC

结果如下:

按文件查看IO情况

SET TRAN ISOLATION LEVEL READ UNCOMMITTED
SELECT DB_NAME(database_id) AS [DatabaseName]
  , file_id
  , SUM(CAST(io_stall / 1000.0 AS DECIMAL(20,2))) AS [IO stall (secs)]
  , SUM(CAST(num_of_bytes_read / 1024.0 / 1024.0 AS DECIMAL(20,2)))
                                                     AS [IO read (MB)]
  , SUM(CAST(num_of_bytes_written / 1024.0 / 1024.0  AS DECIMAL(20,2)))
                                                  AS [IO written (MB)]
                                                    , SUM(CAST((num_of_bytes_read + num_of_bytes_written)
                / 1024.0 / 1024.0 AS DECIMAL(20,2))) AS [TotalIO (MB)]
FROM sys.dm_io_virtual_file_stats(NULL, NULL)
GROUP BY database_id, file_id
ORDER BY [IO stall (secs)] DESC

结果如下:

转载于:https://www.cnblogs.com/CareySon/archive/2012/05/17/2506223.html

有关锁和内存使用的DMV相关推荐

  1. Java中的常见的锁及其内存语义

    文章目录 为什么会有锁? JVM内存模型 没有锁会怎么样? happens-before 先行先发生原则 Java中常见的锁 synchronized 内存语义 实现原理 volatile 内存语义 ...

  2. 原子变量、锁、内存屏障,写得非常好!

    突然想聊聊这个话题,是因为知乎上的一个问题多次出现在了我的Timeline里:请问,多个线程可以读一个变量,只有一个线程可以对这个变量进行写,到底要不要加锁?可惜的是很多高票答案语焉不详,甚至有所错漏 ...

  3. 第六十四期:聊聊原子变量、锁、内存屏障那点事

    突然想聊聊这个话题,是因为知乎上的一个问题多次出现在了我的Timeline里:请问,多个线程可以读一个变量,只有一个线程可以对这个变量进行写,到底要不要加锁?可惜的是很多高票答案语焉不详,甚至有所错漏 ...

  4. Linux无锁共享内存,优秀数据结构学习 - 共享内存无锁队列的实现(二)

    优秀数据结构学习 - 共享内存无锁队列的实现(二) 优秀数据结构学习 - 共享内存无锁队列的实现(二) 1 关键技术 操作系统提供的进程间通信机制有文件.socket.消息队列.管道.共享内存等.其中 ...

  5. Java内存模型深度解析:锁--转

    原文地址:http://www.codeceo.com/article/java-memory-5.html 锁的释放-获取建立的happens before 关系 锁是java并发编程中最重要的同步 ...

  6. Java多线程 -- 深入理解JMM(Java内存模型) --(五)锁

    [转载自并发编程网 – ifeve.com 原文链接:http://ifeve.com/tag/jmm/] 锁的释放-获取建立的happens before 关系 锁是java并发编程中最重要的同步机 ...

  7. sql 闩锁 原因_如何识别和解决SQL Server中的热闩锁

    sql 闩锁 原因 描述 (Description) In SQL Server, internal latch architecture protects memory during SQL ope ...

  8. SQL Server 性能调优(内存)

    存储引擎自调整 sql server 是如何分配内存的 32bit地址空间的限制 用户模式vas分配和virtualalloc 非boffer pool 分配内存(保留内存) VAS调整 AWE 启动 ...

  9. Elasticsearch内存分配设置详解

    Elasticsearch默认安装后设置的内存是1GB,对于任何一个现实业务来说,这个设置都太小了.如果你正在使用这个默认堆内存配置,你的集群配置可能会很快发生问题.   这里有两种方式修改Elast ...

最新文章

  1. react绑定this_React绑定模式:处理“ this”的5种方法
  2. Gson.toJson()时内存溢出StackOverflowError
  3. signature=c58a3c5e53e2eed44d09cd8589207f96,合同英语
  4. 休眠事实:如何“断言” SQL语句计数
  5. java provider_Java SPI(Service Provider Interface)
  6. musictools怎么用不了_夏天少不了一只草编包,怎么搭配才不像“买菜用”?
  7. 我同事狠心用 Python 3 ,刚开始就直接崩溃!你们试试......
  8. android通知栏如何添加按钮,如何在通知栏上放置媒体控制器按钮?
  9. 那些长期单身的人,到底在想什么?
  10. 如何利用大数据打造智慧交通
  11. 打开桌面计算机窗口闪动,电脑进去桌面就一直闪
  12. CDIO工程实践 无线充电智能循迹小车制作
  13. 扩展卡尔曼滤波EKF
  14. Web3 赋能音乐行业,能否创造更多价值?
  15. docker stop all containers
  16. C++版本OpenCv教程(四十三)直线拟合
  17. 计算机科学与技术的未来发展前景
  18. 30岁女生转行做软件测试,本人三十岁,女,现在软件测试行业,想转行,什么行业合适呢?...
  19. Netdiscover网络扫描工具
  20. opencv-opencv打开莱娜双目相机问题

热门文章

  1. OpenStack Juno版本网络节点gre模式配置
  2. abapdata定义方法_ABAP中用函数定义后台作业的一个程序
  3. 开放源代码_如何使用开放源代码开展业务:热门阅读
  4. 多元回归和简单回归的区别_技术多元化的关键比您想象的要简单
  5. openstack 功能_OpenStack Juno的新功能
  6. 实践 + 理论 | API 接口安全性设计
  7. ai作文批改_抢鲜体验丨大鱼人机口语“AI智能作文批改”正式上线
  8. Ubuntu下deb与rpm包的安装方法
  9. c#(.net)对dbf(arcgis shp属性表)的操作 (验证版)
  10. Java中try catch finally语句中含有return语句的执行情况