背景

客户业务系统升级后,高峰期运行缓慢,在SQL专家云上看到数据库出现严重等待,需要分析原因并紧急处理。

现象

登录到SQL专家云中,进入实时可视化页面,在活动会话里面看到有大量资源等待的会话。

点击一个时间点,进入到该时间点的活动会话原始数据。看到大量会话的等待类型为PAGELATCH_UP,等待资源为“2:1:xxxxxxx” ,SQL语句都和临时表有关。

分析

会话等待的资源“2:1:xxxxxxx” 代表ID为 2 的数据库(tempdb)的1号文件(tempdev)的xxxxxxx页。SQL语句创建一个临时表时,相当于在tempdb中创建一张表,SQL Server要为这张表分配存储页面,需要修改SGAM、PFS、GAM系统数据页,为了其他表不会分配到同一个数据页,在修改时使用闩锁,修改完成后释放闩锁。

这种机制对一般的用户数据库不会有问题,因为正常的应用不会折腾着不停地建表、删表。但是tempdb就不同了,经常会有高并发的SQL语句使用临时表。因此在同一个时间点会有很多线程要修改系统页,就会产生大量的PAGELATCH_UP闩锁等待。

解决

最直接的解决办法是增加tempdb数据文件的个数,这样多个线程修改系统页时就被分配到不同的数据文件上,从而降低了闩锁争用。在增加数据文件时有2点重要的注意事项:

  1. 文件个数一定要和CPU核数对齐,也就是能被CPU核数整除。例如是40个核,则可以创建4个、8个、10个、20个等。建议最少4个,最多可以和CPU的核数一样多,但一般的服务器CPU核数都在几十个,没有必要创建这么多。

  2. 每个数据文件的初始大小和增长大小的配置一定要一致,如果不一致,SQL Server将不会平均地使用每个数据文件,而是先使用容量最大的数据文件。

    tempdb的重要性

    临时表、表变量、查询语句(ORDER BY、GROUP BY、UNION等)、触发器、索引维护、快照事务隔离级别等很多功能都会用到tempdb,详细参考微软官方文档:https://docs.microsoft.com/zh-cn/sql/relational-databases/databases/tempdb-database?view=sql-server-ver15。

    最佳实践

    对tempdb依赖较高的实例,可以为tempdb单独规划一个快速的物理磁盘,例如SSD,让tempdb独享I/O资源,不和用户数据库文件争抢,从而加快tempdb的响应速度。如果服务器有基于磁盘镜像的容灾软件,为tempdb规划单独的磁盘的另一个好处是不用把temdp文件同步到备机。

tempdb大量闩锁等待问题分析相关推荐

  1. 常见latch闩锁等待

    常见latch闩锁等待 参考<oracle性能优化实务> 与共享池有关的latch闩锁等待(共享池不足或碎片化问题导致) shared pool library cache library ...

  2. 匪夷所思:罕见的 Oracle 全局事务锁等待事件分析

    数据技术嘉年华等你来 活动预告:11.16-17日,北京市东三环中路61号富力万丽酒店,相聚数据技术嘉年华,(99元票务)免费购票倒计时,点击查看大会详情. 杨长老带来主题"深入内核-Ora ...

  3. MySQL锁等待分析【2】

    MySQL锁等待分析[1]中对锁等待的分析是一步一步来的.虽然最后是分析出来了,可是用时是比较长的:理清各个表之间的关系后,得到如下SQL语句,方便以后使用 select block_trx.trx_ ...

  4. CMOS器件闩锁现象分析与讨论-Good

    CMOS器件的输入端电平如超出电源电压或地电平,将会闩锁 在目前的硬件电路设计中,CMOS器件大量使用,并且器件的速度越来越高,集成度越来越大,因此对器件的可靠性要求也不断提高.随着工艺和器件设计水平 ...

  5. SQL Serer闩锁 和 闩锁超时故障排除

    翻译自:https://mssqlwiki.com/2012/09/07/latch-timeout-and-sql-server-latch/ 在一个多线程的进程里,当一个线程在内存里更新一个数据或 ...

  6. SQL 各种锁等待类型 wait type--sys.dm_os_wait_stats 表

    返回执行的线程所遇到的所有等待的相关信息.可以使用该聚合视图来诊断 SQL Server 以及特定查询和批处理的性能问题. 列名 数据类型 说明 wait_type nvarchar(60) 等待类型 ...

  7. 闩锁和锁(Latches and Locks)

    日常的开发中,经常听到闩锁和锁.可能我们对锁的了解要多一些(如数据库锁.线程锁.分布式锁等),但是对闩锁可能了解不多.本文将从锁和闩锁的分类出发,介绍下闩锁和锁的相同与不同,以及各自的应用场景. 锁的 ...

  8. sql 闩锁 原因_关于SQL Server中的闩锁

    sql 闩锁 原因 SQL Server locks, discussed in the article All about locking in SQL Server, which is appli ...

  9. sql 闩锁 原因_如何识别和解决SQL Server中的热闩锁

    sql 闩锁 原因 描述 (Description) In SQL Server, internal latch architecture protects memory during SQL ope ...

最新文章

  1. Qt5.9 OpenCV3.2.0测试例程(Win10)
  2. 计算机内部使用什么方法技术,计算机内部使用什么技术
  3. serum血清序列号_图文教程 将serum血清预制导入你的serum
  4. Go语言(Golang)约瑟夫游戏(Joseph)
  5. 【bzoj1212】[HNOI2004]L语言 AC自动机
  6. 解决npm ERR! code ENOENT
  7. 技术分享 | 混合云模式下SaaS端前端最佳实践
  8. 如何使用Retrofit,OkHttp,Gson,Glide和Coroutines处理RESTful Web服务
  9. 你想知道的Spring框架配置使用流程和依赖注入!
  10. java mysql tomcat my_Java、Tomcat 及 MySQL 环境配置
  11. 上海市消保委:春节长假期间 共受理消费者投诉4600件
  12. 异步是javascript的精髓
  13. java接口 抽象类_关于JAVA接口和抽象类
  14. Cadence Allegro编辑元件属性图文教程及视频演示
  15. 概要设计和详细设计(软件)
  16. 来吧,我和你聊聊操作系统
  17. 最大公约数和最小公倍数(深入理解)
  18. html编辑器设置为publisher,Microsoft Publisher操作简介
  19. 求职必备||程序员的优秀简历都是这样来的
  20. play 应用商店_如何在Play商店中抢先使用新的Android应用和游戏

热门文章

  1. 334个地级市名单_334个地级市名单_334个地级市的“基层”演出,李志说“如果我死了,得留下点什么”......
  2. 【SQL语法基础】王者荣耀英雄数据表
  3. GAVH39,PM1132,供电220v转5v芯片,SOT23-3,AC-DC小功率应用方案
  4. 金立M7怎么升级鸿蒙系统,金立M7怎么样?金立M7真机评测:全面屏+双芯片
  5. 既约分数(c++版)
  6. BCI 常见问题解答
  7. corei7 64 poky linux,Core i7-4770K Linux之旅:有喜有忧
  8. 2021 十大收缩行业
  9. 【哈希】初识哈希算法
  10. 更新整理了一大波热门免费可用的API大全