zoukankan      html  css  js  c++  java
  • SQL Server Latch

    与锁的区别

    锁用来保证事务隔离及一致性,而latch则保证在内存里的对象的一致性
    锁会在事务运行期间持续存在,而Latch则只是短暂存在.
    锁可以通过隔离级别或hint控制,而Latch由数据库引擎自动控制.

    Latch模式

    • SH

    Shared Latches:读取页时被使用

    • UP

    Update Latches:修改页时被使用,但此时页可以被读取

    • EX

    Exclusive Latches:修改页发生时被使用,但此时页不可被读或修改

    • KP

    Keep Latches:保护内存中的页不被Destroy Latch清理,与除了DT之外的所有latch兼容

    • DT

    Destroy Latches:当SQL Server实例想释放内存中的数据页时,或从内存中移除数据页内容.

    Latch等待类型

    • Buffer Latches

    用来保护Buffer cache中的数据页,包括用户的和系统的.
    sys.dm_os_wait_stats PAGELATCH_XX XX为模式

    • Non-Buffer Latches;

    用来保护buffer cache外的数据结构
    sys.dm_os_wait_stats LATCH_XX

    • IO Latches:

    用来从存储子系统读取数据页到buffer cache中
    sys.dm_os_wait_stats PAGEIOLATCH_XX

    PAGELATCH_XX

    • page-latch(PFS page)争用

    加数据文件优化

    • last page insert争用

    分区,或改善造成hot-spot的表设计

    Latch_XX

    PAGEIOLATCH_XX

    #可以通过perfmon或下面的语句监测,它只记录自上一次engine启动到现在的记录,同时确保未使用dbcc dropcleanbuffers清除buffer cache中的数据
    #同时要保证碎片和统计信息的及时更新
    SELECT
    [ReadLatency] =
    CASE WHEN [num_of_reads] = 0
    THEN 0 ELSE ([io_stall_read_ms] / [num_of_reads]) END,
    [WriteLatency] =
    CASE WHEN [num_of_writes] = 0
    THEN 0 ELSE ([io_stall_write_ms] / [num_of_writes]) END,
    [Latency] =
    CASE WHEN ([num_of_reads] = 0 AND [num_of_writes] = 0)
    THEN 0 ELSE ([io_stall] / ([num_of_reads] + [num_of_writes])) END,
    [AvgBPerRead] =
    CASE WHEN [num_of_reads] = 0
    THEN 0 ELSE ([num_of_bytes_read] / [num_of_reads]) END,
    [AvgBPerWrite] =
    CASE WHEN [num_of_writes] = 0
    THEN 0 ELSE ([num_of_bytes_written] / [num_of_writes]) END,
    [AvgBPerTransfer] =
    CASE WHEN ([num_of_reads] = 0 AND [num_of_writes] = 0)
    THEN 0 ELSE
    (([num_of_bytes_read] + [num_of_bytes_written]) /
    ([num_of_reads] + [num_of_writes])) END,
    LEFT ([mf].[physical_name], 2) AS [Drive],
    DB_NAME ([vfs].[database_id]) AS [DB],
    [mf].[physical_name]
    FROM
    sys.dm_io_virtual_file_stats (NULL,NULL) AS [vfs]
    JOIN sys.master_files AS [mf]
    ON [vfs].[database_id] = [mf].[database_id]
    AND [vfs].[file_id] = [mf].[file_id]
    -- WHERE [vfs].[file_id] = 2 -- log files
    ORDER BY [Latency] DESC
    -- ORDER BY [ReadLatency] DESC
    -- ORDER BY [WriteLatency] DESC;
    GO
    

    清楚记录

    1. 重启服务
    2. dbcc sqlperf('sys.dm_os_latch_stats',clear)

    来自 <<Pro SQL Server 2019 Wait Statistics, 2nd Edition>> 一书

  • 相关阅读:
    使用Ant Design的Table和Checkbox模拟Tree
    js中的按位取反运算符~
    Antd的Table组件嵌套Table以及选择框联动
    antd的Select,DatePicker,Cascader等组件选项框随页面滚动的问题解决
    Promise简介以及常用方法
    js一键复制文本
    react中使用pre标签不生效的解决方法
    使用html2canvas将html通过canvas转换成图片
    谷歌浏览器新开页面进程问题
    如何使用Context
  • 原文地址:https://www.cnblogs.com/ls11736/p/13539817.html
Copyright © 2011-2022 走看看