SQL Server中的Forwarded Record计数器影响IO性能的解决方法

技术SQL Server中的Forwarded Record计数器影响IO性能的解决方法SQL Server中的Forwarded Record计数器影响IO性能的解决方法,针对这个问题,这篇文章详细介绍了相对应的分析和

SQL Server中的转发记录计数器会影响输入输出性能。针对这个问题,本文详细介绍了相应的分析和解决方法,希望能帮助更多想要解决这个问题的小伙伴找到一个更简单易行的方法。

一、简介

最近,一位客户注意到一个高计数器(转发记录/秒),伴随着磁盘等待队列的间歇性波动。本文分享了什么是转发记录,并从原理上讨论了为什么转发记录会导致额外的IO。

二、存放原理

在SQL Server中,当数据存储在堆中时,数据是无序的,所有非聚集索引的指针都存储指向物理地址的rid。当数据行中可变长度列的增长使旧页面无法容纳下一个数据行时,数据将被移动到新页面,在原始位置留下指向新页面的指针。这样做的原因是,当更新记录时,所有非聚集索引的指针都不需要更改。

这种数据更新只在原始位置留下一个指针,指向存储新数据页的行,称为转发记录。

三、Forwarded Record如何影响IO性能?

那么,既然转发记录是一种提高性能的机制,为什么会造成性能问题呢?Forwarded Record的初衷是在堆表上更新时,堆表上存储位置的改变不会同时更新非聚集索引,会造成开销。但是,对于搜索来说,无论是堆表上有表扫描还是用于书签搜索,都会使额外的IO开销翻倍。这里有一个例子。

begin inner while @ index 100000 begin insertingdb。堆测试(ID,col1)值(@ index,null)设置@ index=@ index1endcommit代码清单1。创建一个新的堆表并插入100,000条数据。

通过清单1创建一个测试表,循环插入100,000个数据。现在,让我们看看堆表占用的存储页面。

此时,更新表,使原始行增长,生成Forwarded Record,然后查看堆表的存储。

这时我们注意到,虽然数据只占590页,却有一条8W转发记录。如果我们扫描表,会看到虽然只有590页,但是我们需要8W的逻辑IO,这就大大增加了IO上的开销压力。此外,由于转发的记录页面与原始页面在物理上不连续,这也对IOPS提出了挑战。

而上述查询反映在性能计数器中。

四、如何解决

看到转发记录计数器意味着数据库中有堆表。在OLTP系统中,所有的表都应该有聚集索引。因此,这个问题可以通过向表中添加聚集索引来解决。

一般来说,只将只写不读的表设置为堆表是比较合适的,但是如果看到有一个Forwarded Reocord,就说明堆表上有一个读操作,所以找到堆表并找到合适的维护窗口时间来创建堆表是比较理想的选择。

如果由于其他原因无法创建聚集索引,则可以重建堆表。

SQL Server中的转发记录计数器影响IO性能的问题的解决方案将在这里分享。我希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/128593.html

(0)

相关推荐

  • 如何分析Python自动化运维开发中的变量

    技术如何分析Python自动化运维开发中的变量本篇文章给大家分享的是有关如何分析Python自动化运维开发中的变量,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看

    攻略 2021年12月4日
  • 抖音播放量怎么刷,怎么能让抖音粉丝暴涨?

    技术抖音播放量怎么刷,怎么能让抖音粉丝暴涨?最近关于到抖音的问题,小编被大家问的最多的就是抖音刷播放量有效果吗?因为目前大家都有所耳闻,就是关于抖音上视频要是想火起来,被上到推荐上的话,那么就需要进行刷播放量,所以抖音刷

    测评 2021年10月20日
  • python查询字典最快的方法(python字典查找算法)

    技术Python字典查找性能的示例分析这期内容当中小编将会给大家带来有关Python字典查找性能的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。timeit.repeattim

    攻略 2021年12月23日
  • 丽江到香格里拉要多久,丽江古城去香格里拉怎么坐车

    技术丽江到香格里拉要多久,丽江古城去香格里拉怎么坐车丽江古城到香格里拉大概有200公里左右丽江到香格里拉要多久,最方便的到达和游玩方式是乘坐旅游专线车,旅游专线车有只发香格里拉的,有中停游玩上虎跳峡,有中停游玩中虎跳峡的

    生活 2021年10月24日
  • 数学什么叫因数,小学数学什么是倍数,什么是因数

    技术数学什么叫因数,小学数学什么是倍数,什么是因数①一个整数能够被另一整数整除数学什么叫因数,这个整数就是另一整数的倍数。如15能够被3或5整除,因此15是3的倍数,也是5的倍数。②一个数除以另一数所得的商。如a÷b=c

    生活 2021年10月23日
  • IE7.JS怎样解决IE兼容性问题

    技术IE7.JS怎样解决IE兼容性问题这篇文章给大家介绍 IE7.JS怎样解决IE兼容性问题,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。和大家重点讨论一下如何使用IE7.JS解决IE兼容性问题,I

    攻略 2021年11月25日