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)

相关推荐

  • java中如何实现生成器和迭代器

    技术java中如何实现生成器和迭代器小编给大家分享一下java中如何实现生成器和迭代器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!print

    攻略 2021年11月23日
  • 关于安全的手抄报,四年级关于安全手抄报的内容

    技术关于安全的手抄报,四年级关于安全手抄报的内容安全”这根弦时刻都不能放松。每个人都渴望有一个幸福、温馨的家庭,每个人都希望有一个健康的身体,每个人都希望快乐地生活,然而,各种安全事故却时有发生,给许多人带来了极大的痛苦

    生活 2021年10月25日
  • 抖音刷赞平台推广软件,抖音刷赞软件是真是假

    技术抖音刷赞平台推广软件,抖音刷赞软件是真是假抖音刷粉丝分三个步骤:1.选择抖音刷粉丝通道,2.准备刷粉丝账号,3.选择需要的套餐下订单刷粉,4.解释刷粉原理和方法。
    抖音粉丝最重要的就是选择一个可靠可靠的渠道,一家好的

    测评 2021年11月9日
  • javameta-info里边放的是什么(meta标签name属性有哪些参数)

    技术Java的meta标签有什么作用这篇文章主要介绍“Java的meta标签有什么作用”,在日常操作中,相信很多人在Java的meta标签有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家

    攻略 2021年12月22日
  • 如何连接Flex数据库行

    技术如何连接Flex数据库行这篇文章主要介绍如何连接Flex数据库行,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Flex应用程序并不直接与一个Flex数据库进行连接,所以你需要使用某种类型的服务

    攻略 2021年12月9日
  • IE8下DIV嵌套出现错误怎么办

    技术IE8下DIV嵌套出现错误怎么办这篇文章给大家分享的是有关IE8下DIV嵌套出现错误怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。IE8下DIV嵌套出现错误解决方案最近用DIV写了几

    攻略 2021年11月6日