1,数据的IO操作

SQL Server访问的任何一个Page必须存在于内存中,如果不存在于内存中,那么SQL Server发出 Disk IO请求,将数据页从Disk读取到内存中,然后SQL Server从内存中读取该Page的内容。在访问任何一个内存page之前,必须申请和获取该Page上的Latch。

在数据读取的过程中,SQL Server先在内存中预留一个Page的空间,并设置该Page的位BUF_IO=1,并发出Disk IO请求,此时,在该Page上加的Latch是PageIOLatch_EX,表示正在将数据页从Disk读取到内存。

在数据页加载的过程中,任何一个读取该Page的Thread,在该Page上加的Latch是PAGEIOLATCH_SH,表示在SQL Server Engine从Disk读取数据页,写入内存时,Thread试图读取该Page,由于PAGEIOLATCH_SH和PageIOLatch_EX不兼容,读取该Page的Thread会被Block,直到Page被读取到内存中。

一旦数据页被写入到内存中,PageIOLatch_EX会立即释放,并设置该Page的位BUF_IO=0。由于数据页存在于内存中,对该Page申请的Latch是PageLatch。

如果发生PAGEIOLATCH类型的等待,那么SQL Server一定是在等待Disk I/O操作的完成。如果经常出现这类等待,说明磁盘速度不能满足要求,已经成为SQL Server的瓶颈。PAGEIOLATCH_XX主要分为两大类:PAGEIOLATCH_SH和PAGEIOLATCH_EX。

PAGEIOLATCH_SH 发生在用户访问一个数据页,同时SQL Server正在将数据页从磁盘写入内存,经常发生PAGEIOLATCH_SH等待,说明内存不够大,导致SQL Server需要做很多页面读取的操作,磁盘IO是内存压力的副作用。

PAGEIOLATCH_EX:发生在从Disk page读取到内存buffer中,经常发生PAGEIOLATCH_EX等待,说明Disk读取速度慢,这和内存没直接关系。

2,数据页成为HotPage

当一个Task要修改页面时,它必须先申请一个EX的Latch,即PageLatch_EX。只有获取到Latch,才能修改页面的内容。由于数据页的修改都是在内存中完成,所以时间应该非常短,可以忽略不计。而PAGELATCH_EX只是在修改过程中才出现,所以生存周期应该很短,如果出现了,说明:1、SQL Server没有明显的内存和磁盘瓶颈。2、应用程序发出大量的并发语句修改同一张表,而修改操作集中在同一个页面,或者数量不多的几个页面上,成为Hot Page。3、这种瓶颈无法通过提高硬件配置解决,只能修改 Table的存储,使修改分散在更多的Page上,提高并发修改的能力。

Hot page的缓解方法:

(1)、换一个数据列建聚集索引,而不要在Identity字段上,同一时间插入有机会分散到不同的页面上。

(2)、如果一定要在Identity的字段上建聚集索引,建议在其他某个列上创建若干个分区。

(3)、为FileGroup增加File,尽量将Files分布在不同的Physical Disk上。

3,在tempdb中,系统Page成为Hot Page

SQL Server不仅在数据页面上加Latch,而且在数据文件的系统页面上,例如SGAM、PFS和GAM页面等,也会加Latch。系统Page有时候也会成为系统瓶颈。

在创建新表时,SQL Server 需要分配空间。分配存储空间需要同时修改SGAM、PFS和GAM页面,设置标识位,由于一个系统Page的标志位管理很多数据页,当频繁的创建和删除表结构时,而这些数据页都发生在同一个系统Page,或者数量不多的几个系统Page上,会使该系统Page过热,成为Hot Page。在tempdb中,创建和删除table结构的操作会并发、反复发生,容易使系统页过热,产生hot Page。系统page过热,可以通过调整表设计来缓解。对此的解决方法:

  • 建立与cpu数量相同的tempdb文件,保持File Size相同,使得每个File承担的IO压力相对平均
  • 禁止 tempdb 文件自动增长,避免单个文件不平均增长

Latch2:Latch和性能的更多相关文章

  1. Distribution2:Distribution Writer

    Distribution Writer 调用Statement Delivery 存储过程,将Publication的改变同步到Subscriber中.查看Publication Properties ...

  2. SQL Server PageIOLatch和PageLatch

    Latch是轻量级的锁,它是SQL Server内部用来同步资源访问的一个数据结构,使数据的访问同步有序,这意味着,当一个线程获得资源R的Latch的独占使用权时,如果其他的线程也想访问这个Latch ...

  3. PageIOLatch和PageLatch

    Latch是轻量级的锁,它是SQL Server内部用来同步资源访问的一个数据结构,使数据的访问同步有序,这意味着,当一个线程获得资源R的Latch的独占使用权时,如果其他的线程也想访问这个Latch ...

  4. SD卡WAV音乐播放器(quartus11.0)(FAT32)(DE2-115)

    准备工具:格式工厂,Windows录音机,SD卡(小于等于2G),音箱 首先,选一首MP3,用格式工场转化成WAV格式.可以看到转化后的文件变得很大,因为WAV就是AD采样值加个文件头,所以数据量巨大 ...

  5. 【转】cache buffer chain 第一篇

    文章转自:http://www.jydba.net/cache-buffer-chain/ buffer cache的管理有两个重要的数据结构: hash bucket和cache buffer ch ...

  6. oracle buffer cache的基本原理

    Buffer cache 的原理 一. 1·)当一个服务器进程需要读数据到buffer cache中时,首先必须判断该数据在buffer 中是否存在,如果存在且可用,则获取该数据,根据lru算法在lr ...

  7. BUFFER CACHE和SHARED POOL原理

    http://blog.csdn.net/wanghai__/article/details/4881492 Buffer Cache LRU与Dirty List 在Buffer Cache中,Or ...

  8. 学习动态性能表(11)v$latch$v$latch_children

    学习动态性能表 第十一篇-(1)-V$LATCH  2007.6.7 Oracle Rdbms应用了各种不同类型的锁定机制,latch即是其中的一种.Latch是用于保护SGA区中共享数据结构的一种串 ...

  9. SQL 性能调优中可参考的几类Lock Wait

    在我们的系统出现性能问题时,往往避不开调查各种类型 Lock Wait,如Row Lock Wait.Page Lock Wait.Page IO Latch Wait等.从中找出可能的异常等待,为性 ...

随机推荐

  1. 用户名 不在 sudoers文件中

    切换到root用户,然后加上某个账户 pzdn@CentOs$ su #输入root密码 root@CentOs cd /etc/ chmod 770 sudoers vim sudoers # 找到 ...

  2. $(document).ready,$(window).load,window.onload区别和联系

    $(document).ready是在dom结构加载完毕就执行. $(window).load 等价于window.onload,必须等到页面内包括图片的所有元素加载完毕后才能执行. $(docume ...

  3. 【BZOJ3943】[Usaco2015 Feb]SuperBull 最小生成树

    [BZOJ3943][Usaco2015 Feb]SuperBull Description Bessie and her friends are playing hoofball in the an ...

  4. CSS中各种各样居中方法的总结

    在开发前端页面的时候,元素的居中是一个永远都绕不开的问题.看似简单的居中二字,其实蕴含着许许多多的情况,对应着很多的处理方法,本文就试图对页面布局中的居中问题进行总结~~ 居中问题分为水平居中和竖直居 ...

  5. js 判断浏览器和ie版本号 收集

    function testB () { // body... var isOpera = !!window.opera ||!!window.opr|| navigator.userAgent.ind ...

  6. java中内存分配策略及堆和栈的比较

    Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间 ...

  7. 开启PHP的伪静态

    1.检测Apache是否支持mod_rewrite 通过php提供的phpinfo()函数查看环境配置,通过Ctrl+F查找到“Loaded Modules”,其中列出了所有 apache2handl ...

  8. 初学后台框架总结篇二——快速了解CI框架

    一.下载CI框架并安装,这里放置一张自己的项目目录结构图 目录框架搭建好之后开始将自己的项目与框架融合 二.更改相关配置 1.用任何文本编辑器打开 application/config/config. ...

  9. Android软件开发之ListView 详解【转】

    ListView的使用方法  ListView是Android软件开发中非常重要组件之一,基本上是个软件基本都会使用ListView ,今天我通过一个demo来教大家怎么样使用ListView组件 绘 ...

  10. POJ 2519

    又是一个水题?? 不过还是弄是很久... 在蒟蒻的路上越走越远 , 好了讲题 新生晚会 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: ...