zoukankan      html  css  js  c++  java
  • DBCC DROPCLEANBUFFERS失效了?

    原文出处:http://www.sqlskills.com/blogs/paul/when-dbcc-dropcleanbuffers-doesnt-work/

    DBCC DROPCLEANBUFFERS是用来清除内存中的数据缓存,一般我们在做性能调优时为了方便看到一条语句的执行时间和物理IO消耗,都会在语句执行前执行一遍DBCC DROP CLEANBUFFERS。

    但,这招并不是时时很灵。

    有人或许就碰到这种现象,即使执行了DBCC DROPCLEANBUFFERS,但在SSMS的输出信息里面还是看不到物理读,这条语句还是从内存中读取的数据(逻辑读)。

    你会很诧异,“不是已经将内存中的缓冲清空了吗,怎么没有物理读呢?出现这种现象是不是DBCC DROPCLEANBUFFERS失效了呢?”

    不是。DROP CLEANBUFFERS确实是可以用来清除内存中的数据缓存,但只能清除掉clean状态的缓存页面,相对的,如果这些页面是脏页,也就是内存中已被修改且还未同步到磁盘的数据页面,那么它是无法从缓存中清除的,这是为了性能的考虑。

    所以当你遇到DROP CLEANBUFFERS“失效”时,尝试手动同步下内存和磁盘中的数据页面,执行:

    checkpoint

    你也可以通过如下语句查看当前内存中clean页面和脏页的数量和大小:

    SELECT *,
    
    [DirtyPageCount] * 8 / 1024 AS [DirtyPageMB],
    
    [CleanPageCount] * 8 / 1024 AS [CleanPageMB]
    
    FROM
    
    (SELECT
    
    (CASE WHEN ([database_id] = 32767)
    
    THEN N'Resource Database'
    
    ELSE DB_NAME ([database_id]) END) AS [DatabaseName],
    
    SUM (CASE WHEN ([is_modified] = 1)
    
    THEN 1 ELSE 0 END) AS [DirtyPageCount],
    
    SUM (CASE WHEN ([is_modified] = 1)
    
    THEN 0 ELSE 1 END) AS [CleanPageCount]
    
    FROM sys.dm_os_buffer_descriptors
    
    GROUP BY [database_id]) AS [buffers]
    
    ORDER BY [DatabaseName]
    
    GO
  • 相关阅读:
    Python 缓冲区
    Python接收执行参数
    Python编码
    Maven 多环境 打包
    JS 时间 获取 当天,昨日,本周,上周,本月,上月
    Window Mysql 5.7.18安装
    Eclipse 更改Maven项目名
    Redis 命令
    Redis 安装 和 启动
    Mongodb 安装 和 启动
  • 原文地址:https://www.cnblogs.com/i6first/p/4503746.html
Copyright © 2011-2022 走看看