SQLServer数据库之sql server 性能调优 资源等待之PAGELATCH
小标 2019-04-16 来源 : 阅读 1243 评论 0

摘要:本文主要向大家介绍了SQLServer数据库之sql server 性能调优 资源等待之PAGELATCH,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。

本文主要向大家介绍了SQLServer数据库之sql server 性能调优 资源等待之PAGELATCH,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。

SQLServer数据库之sql server 性能调优 资源等待之PAGELATCH

一.概述

  在前几章介绍过 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_msfrom sys.dm_os_wait_statswhere 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有所帮助,更多内容请关注职坐标数据库SQL Server数据库频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程