热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

SQLSERVER解决HOTPAGE问题的其中一个思路使用表分区

SQLSERVER解决HOTPAGE问题的其中一个思路使用表分区什么叫HOTPAGE?应用程序发来大量的并发语句在修改或者插入同一张表格里的记录,而表格架构设计以及用户业务逻辑使得这些修改跟插入都集中在同一个数据页面,或者数量不多的几个数据页面上。这些页面有

SQLSERVER解决HOT PAGE问题的其中一个思路使用表分区 什么叫HOT PAGE? 应用程序发来大量的并发语句在修改或者插入同一张表格里的记录,而表格架构设计以及用户业务逻辑使得这些修改跟插入都集中在同一个数据页面, 或者数量不多的几个数据页面上。这些页面有

SQLSERVER解决HOT PAGE问题的其中一个思路使用表分区

什么叫HOT PAGE?

应用程序发来大量的并发语句在修改或者插入同一张表格里的记录,而表格架构设计以及用户业务逻辑使得这些修改跟插入都集中在同一个数据页面,

或者数量不多的几个数据页面上。这些页面有时候也被称为 hot page 热力页。这样的瓶颈通常只会发生在并发用户比较多的、典型的OLTP系统上。

介绍一下PAGELATCH:

简单来讲,当SQLSERVER把数据读取到内存之后,数据以“页”为单位存放的,假如有两个用户同时修改或者插入的数据都在同一个页面,那么,

SQLSERVER会在页面上放一个PAGELATCH(轻量级的)锁,这些锁跟意向共享锁、排他锁、行锁、键锁不同,这些LATCH锁只存在于内存里

当A用户要修改数据页编号为100这个页面时,SQLSERVER就会在100这个页面加上一个PAGELATCH锁,以防止其他用户同时修改这个页面

以得到一个修改的先后顺序,当A用户修改完毕以后,PAGELATCH就会释放,以供B用户修改。

一般使用下面的SQL语句的wait_type列就可以看到当前哪个会话需要等待获得PAGELATCH锁

1 SELECT * FROM sys.[dm_exec_requests]

HOTPAGE介绍完了,PAGELATCH介绍完了,那么这个HOTPAGE带来的瓶颈以及危害大家应该知道了吧?

不知道?好吧,跟大家说一下:

如果大量并发用户同时访问同一个数据页面,那么SQLSERVER就要对这个数据页面的PAGELATCH进行申请释放,

不断申请和释放,如果SQLSERVER处理用户的插入或者修改请求比较慢的话,那么就会造成“阻塞”。

一般HOTPAGE会在以下情况发生:

例如:有一个股票交易系统,每一笔交易都会有一个流水号是递增而且不可重复的而客户发过来的交易请求,

都要存储在同一张交易表里。每一个新的交易,都要插入一条新记录。如果设计者选择在流水号上建聚集索引(这也是很自然的)

就容易遇到HOT PAGE的PAGE LATCH资源瓶颈。在同一时间,只能有一个用户插入一笔交易

怎样才能缓解这种瓶颈呢?

(1)最简单的方法:换一个数据列建聚集索引,而不要建立在IDENTITY字段(例如上面的交易流水号)上。

这样表格里的数据就按照其他方式排序,同一时间的插入就有机会分散在不同的页面上

(2)如果实在是一定要在IDENTITY的字段上建立聚集索引,建议根据其他某个数据列在表格上建立若干个分区(Partition)表分区,

把一个表格分成若干个分区,可以使得接受新数据的页面数目增加

例如:

以上面的那个股票交易系统为例子。不同的股票属于不同的行业。开发者可以根据股票的行业属性,将一张交易表分成若干个分区。

在SQLSERVER里,已分区表(Partition Table) 的每个分区都是一个独立的存储单位。分属不同分区的数据行是严格分开存储的。

所以,同一个时间发生的交易记录,因其他行业不同,也会分别保存在不同的分区里。这样,在同一个时间点,可以插入不同行业的

交易记录。每个分区上的HOT PAGE(接受新数据插入的PAGE)就不那么HOT了

所以,在自增列上建立聚集索引要看情况,不然会很容易遇到HOTPAGE噢 o(∩_∩)o

2012-12-27补充

在这里再说一下,分区是把双刃剑,如果分区了的话,会带来扫描次数的增多
原本表没有分区的,那么扫描一次就可以了,现在比如分了2个区,那么就要
扫描2次,每个分区需要2次I/O,那么如果数据在分区2里面的话,就需要
4次I/O

这种情况只是latch争用情况的一种

诊断和解决SQL Server的Latch争用问题

推荐阅读
  • 数据库异常智能分析与诊断
    数据库,异常, ... [详细]
  • OpenEdge已经更名为Baetyl。OpenEdge是百度云发布的国内首个开源边缘计算产品,可将云计算能力拓展至用户现场,提供临时离线、低延时的计算 ... [详细]
  • 软件测试工程师,需要达到什么水平才能顺利拿到 20k+ 无压力?
    前言最近看到很多应届生晒offer,稍有名气点的公司给出的价格都是一年30多W或者月薪20几k,相比之下工作几年的自己薪资确实很寒酸.根据我自己找工作经历,二线城市一般小公司招聘 ... [详细]
  • Unit4博客&课程总结Unit4作业的架构设计本单元作业的设计我分为了三个模块处理:模型构建+预处理+任务函数,前两部分即为整个图的完整构建,第三部分即为实现题目要求的查询方法。 ... [详细]
  • 博客_2018年博客总结
    本文由编程笔记#小编为大家整理,主要介绍了2018年博客总结相关的知识,希望对你有一定的参考价值。前言     ... [详细]
  • Spring MVC 浅谈
    大学时写的的文章,当时文章水平略差,大家见谅。MVC这个词儿,最早的定义应该是作为一种软件架构设计模式出现在软工里面的,即使用model、view、controller来设计及定 ... [详细]
  • 技术研发团队管理计划方案书
    目录第一部分序目标第二部分团队建议一小组划分第三部分小组计划一小组任务管理二小组工作氛围1组员能力成长3组员幸福感提升三小组工作协同四小组建设规划第四部分20 ... [详细]
  • 物联网应用介绍
    •物联网的研究背景(概念|本质|特征|发展现状)       物联网是新一代信息技术的高度集成和综合运用,已成为全球新一轮科技革命与产业变革的核心驱动和经济社会绿色、智能、可持续发 ... [详细]
  • 出现_史上最大漏洞出现,你的安卓iPhone电脑都不安全了!
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了史上最大漏洞出现,你的安卓iPhone电脑都不安全了!相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 显卡750ti价格(750ti显卡发行价格)
    |责编:林光楠在当前这个B2BB2C逐步取代传统卖场占据主导地位的时代,通过电商、淘宝平台直接购买电脑相信已经成了不少对DIY认识不太深入的主流用户首选的配机方案。相比线下购买,网 ... [详细]
  • 【Java编码规范】《阿里巴巴Java开发手册(正式版)》发布!
    2019独角兽企业重金招聘Python工程师标准2017年开春之际,诚意献上重磅大礼:阿里巴巴Java开发手册,首次公开阿里官方Ja ... [详细]
  • 架构设计小心得
    项目开发流程:image-20220303112748431image-20220303113042065短链接设计:方案一:设计:id    BIGINT,自增主键url     ... [详细]
  • “自主设计与实施的故障注入微服务Sidecar,欢迎大佬批评指正!”
    “故障注入Sidecar“——为您的微服务注入故障以验证集群性能!由于导师和实验室师兄们的科研需要,本人专门以Sidecar的模式设计了一个用于错误注入的微服务模块。该模块可以与任 ... [详细]
  • 不愧是阿里内部“千亿级并发系统架构设计笔记”面面俱到,太全了
    写在前面金九银十招聘季来了,不知道大家有没有发现一件事,现在不管是互联网大厂,还是初创公司,那些面试官总喜欢拿高并发和你说 ... [详细]
  • 全局角度出发讨论敏捷
    JonKern对于是什么促成了敏捷的成功有着自己读到的见解。你可能会不同意他的观点。下面列出了一些建立在项目全局角度之上的关键实践,项目本身就是从此开始的。如果不能从系统角度来做项目,那它就不能达到预期的效果,甚至可能会失败。我很早以前就认为,开发软件就像是在完成一个很长的待办事项列表。我试了很多方法来运行项目,从记事贴到Jira(从Jira刚发布起我就开始使用)。我使用传统Scrum风格的Spr ... [详细]
author-avatar
936383130_54f13e
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有