一.概述

  在前几章介绍过 sql server 性能调优资源等待之PAGEIOLATCH,PAGEIOLATCH是出现在sql server要和磁盘作交互的时候,所以加个IO两个字。这次来介绍PAGELATCH。PAGELATCH类型是sqlserver在缓冲池里的数据页面上经常加的另一类latch锁。

  既然缓冲池里的数据页面与PAGELATCH有关系,那先来介绍数据页面。

  1. 数据页面

  数据页面在"sql server 索引阐述系列二 索引存储结构"中有详细介绍,这里讲与PAGELATCH有关的知识点。 一个页面包含页头,数据存储,页尾偏移量。 在页头里包含了页面属性,页面编号,记录了当前页面空闲的起始位置,当sqlserver 在要插入的时候,就能够很快地找到插入的位置,而页尾的偏移量记录了每一条数据行所有页中的位置,当需要查找页中数据时,通过页尾的偏移量很快能定位。

  当数据行发生变化时, sql server不但要去修改数据本身,还要维护页中数据行与偏移量的关系。

2.  PAGELATCH

  讲了这么多关于数据页面, 现在来理清一下关系, lock锁是保证数据页中数据的逻辑关系,PAGEIOLATCH的latch锁是保证数据页与磁盘进行存储的关系,  PAGELATCH的latch锁是保证数据页中数据行与页尾的偏移量的关系。当然这种区别介绍是为了更好的去理解它们之间的关系,PAGELATCH作用并不只是这点, 它还会维护系统页面如SGAM,PFS,GAM页面等。

  3. HotPage现象

  当我们为一个表创建主键自增ID时, 那么sql server将按照ID字段的值顺序进行存储,在大并发下,为了保证ID值按顺序存放在数据页中,这时PAGELATCH就会latch锁住数据页面里的存储结构, 使ID值排队保持先后顺序 。测试Hotpage现象可以是程序后端并发插入或使用 SQLIOSim工具来并发测试。

下面来看一个简单的图:当前表里有一个page 100的页面, 该页中已有二行数据(rid1和rid2) 分别对应着页尾的偏移量1和2。 这时有二个插入任务,同时插入到page100页,假设第一个任务申请到了ex_latch锁,第二个任务就会等待,使数据行和偏移量对一 一对应。

  

  由于数据页的改动都是在内存中完成的,所以每次修改时间都应该非常短,几乎可以忽略。如果该资源成为了sql server等待的瓶颈有以下几种情况:

  (1) sql server 没有的明显的内存和磁盘瓶颈。

(2) 大量的并发集中在表里的一个数据页上叫hotpage

(3) tempdb 临时表也可以会成为瓶颈,通常可以通过增加tempdb文件来缓解。 具体查看Tempdb怎么会成为性能瓶颈?。

4. 查看PAGELATCH现象

4.1 通过sys.dm_exec_query_stats来查看实例级别的等待

select wait_type,
waiting_tasks_count,
wait_time_ms ,
max_wait_time_ms,
signal_wait_time_ms
from sys.dm_os_wait_stats
where wait_type like 'pagelatch%'
order by wait_time_ms desc

  

在实例级别中等待次数最多的是PAGELATCH_EX的latch 排它锁, 平均每次耗时90毫秒,这个平均值应该是不会有性能问题。

4.2 能过sys.dm_exec_requests 来实时查看sql语句级, 可以采用不定时监听能过session_id来获取sql 语句所对应的表,以及等待的数据页类型 。

SELECT * FROM sys.dm_exec_requests  WHERE wait_type LIKE 'pagelatch%'

5.  解决思路

  (1)  通过设计表结构,使hotpage现象由单面的并发访问,分散到多个页面。

  (2)  如果是在identity字段上有瓶颈, 可以创建多个分区,因为每个分区都有自己的存储单位,这样hot 单页现象就分散了。

sql server 性能调优之 资源等待PAGELATCH的更多相关文章

  1. sql server 性能调优之 资源等待 LCk

    一.  概述 这次介绍实例级别资源等待LCK类型锁的等待时间,关于LCK锁的介绍可参考 “sql server 锁与事务拨云见日”.下面还是使用sys.dm_os_wait_stats 来查看,并找出 ...

  2. sql server 性能调优之 资源等待 CXPACKET

    一.概述  CXPACKET是指:线程正在等待彼此完成并行处理.什么意思呢? 当sql server发现一条指令复杂时,会决定用多个线程并行来执行,由于某些并行线程已完成工作,在等待其它并行线程来同步 ...

  3. sql server 性能调优之 资源等待SOS_SCHEDULER_YIELD

    一.概念 SOS_SCHEDULER_YIELD等待类型是一个任务自愿放弃当前的资源占用,让给其他任务使用.   这个等待类型与CPU有直接关系,与内存与也有间接关系,与CPU有关系是因为在sql s ...

  4. sql server 性能调优之 资源等待PAGEIOLATCH

    一.概念 在介绍资源等待PAGEIOLATCH之前,先来了解下从实例级别来分析的各种资源等待的dmv视图sys.dm_os_wait_stats.它是返回执行的线程所遇到的所有等待的相关信息,该视图是 ...

  5. sql server 性能调优之 资源等待之网络I/O

    一.概述 与网络I/O相关的等待的主要是ASYNC_NETWORK_IO,是指当sql server返回数据结果集给客户端的时候,会先将结果集填充到输出缓存里(ouput cache),同时网络层会开 ...

  6. sql server 性能调优之 资源等待内存瓶颈的三种等待类型

    一.概述 这篇介绍Stolen内存相关的主要三种等待类型以及对应的waittype编号,CMEMTHREAD(0x00B9),SOS_RESERVEDMEMBLOCKLIST(0x007B),RESO ...

  7. 【目录】sql server 性能调优

    随笔分类 - sql server 性能调优 sql server 性能调优之 资源等待之网络I/O 摘要: 一.概述 与网络I/O相关的等待的主要是ASYNC_NETWORK_IO,是指当sql s ...

  8. sql server 性能调优 资源等待之网络I/O

    原文:sql server 性能调优 资源等待之网络I/O 一.概述 与网络I/O相关的等待的主要是ASYNC_NETWORK_IO,是指当sql server返回数据结果集给客户端的时候,会先将结果 ...

  9. sql server 性能调优 资源等待之内存瓶颈的三种等待类型

    原文:sql server 性能调优 资源等待之内存瓶颈的三种等待类型 一.概述 这篇介绍Stolen内存相关的主要三种等待类型以及对应的waittype编号,CMEMTHREAD(0x00B9),S ...

随机推荐

  1. 检查SQL Server被哪个进程占用,且杀进程。

    -----检查DB的名字---------------------------------------DECLARE @dbName varchar(50)SET @dbName='RegisterO ...

  2. C#中一些关联名词的含义归纳

    形参/实参:定义一个方法,方法中需要传输的参数为形参,实际调用方法时候传入的参数为实参. 方法/函数:两个没有本质上的区别,都是指类中的一些操作. 委托/事件:委托(delegate)是存有对某个方法 ...

  3. C#中get和set属性的作用

    c#在定义类时,通常要把类中声明的对象封装起来,使得外界不能访问这个属性.上述代码中如果去掉set部分,则外界只能读取name的值,如果去掉get部分,则只能给name赋值.这样就可以控制外界对私有属 ...

  4. kali自定义分辨率(1920*1080)

    运行一下两行代码: xrandr --newmode -hsync +vsync xrandr --addmode Virtual1 "1920x1080_60.00"

  5. selenium批量执行脚本操作

    import unittest import os from HTMLTestRunner import HTMLTestRunner # 待执行用例的目录 def allcase(): #引入执行用 ...

  6. Educational Codeforces Round 58 (Rated for Div. 2) F dp + 优化(新坑) + 离线处理

    https://codeforces.com/contest/1101/problem/F 题意 有n个城市,m辆卡车,每辆卡车有起点\(s_i\),终点\(f_i\),每公里油耗\(c_i\),可加 ...

  7. input type='file'文件上传自定义样式

    使用场景: 在未使用UI库时免不了会用到各种上传文件,那么默认的上传文件样式无法达到项目的要求,因此重写(修改)上传文件样式是必然的,下面的效果是最近项目中自己写的一个效果,写出来做个记录方便以后使用 ...

  8. Postman SMTP 存在跨站脚本(XSS)漏洞,请换用Post SMTP Mailer/Email Log

    Postman SMTP 是一个安装量超过10W的WordPress插件,但是已经2年多没有更新,2017年6月29日,被发现存在跨站脚本(XSS)漏洞(查看详情),并且作者一直没有更新,所以被从Wo ...

  9. vb越界

    想起来一个项目当中,遇到了一个问题,就是老是显示数据溢出. 后来查查查,发现是由于vb的特性造成的.例如cbyte()函数.此函数()里面的数据运算也不能超过cbyte的范围,不然就回发生溢出问题.

  10. why microsoft named their cloud service Azure?

    best guess I can personally make is that because Azure literally means “bright blue color of the clo ...