濮阳杆衣贸易有限公司

主頁 > 知識庫 > SQL Server中的Forwarded Record計數(shù)器影響IO性能的解決方法

SQL Server中的Forwarded Record計數(shù)器影響IO性能的解決方法

熱門標(biāo)簽:智能語音車載電話機(jī)器人 衛(wèi)星地圖標(biāo)注距離 競圣地圖標(biāo)注服務(wù) 安陽天音防封電銷卡 外呼系統(tǒng)的話術(shù) 貴州外呼回?fù)芟到y(tǒng)是什么 智能外呼系統(tǒng)需要多少錢 云南全自動外呼系統(tǒng)公司 陽光創(chuàng)信ai外呼獲客系統(tǒng)助力

一、簡介 

    最近在一個客戶那里注意到一個計數(shù)器很高(Forwarded Records/Sec),伴隨著間歇性的磁盤等待隊列的波動。本篇文章分享什么是forwarded record,并從原理上談一談為什么Forwarded record會造成額外的IO。

二、存放原理

    在SQL Server中,當(dāng)數(shù)據(jù)是以堆的形式存放時,數(shù)據(jù)是無序的,所有非聚集索引的指針存放指向物理地址的RID。當(dāng)數(shù)據(jù)行中的變長列增長使得原有頁無法容納下數(shù)據(jù)行時,數(shù)據(jù)將會移動到新的頁中,并在原位置留下一個指向新頁的指針,這么做的原因是由于使得當(dāng)出現(xiàn)對Record的更新時,所有非聚集索引的指針不用變動。如圖1所示。

圖1.Forwarded Record示意

這種由于數(shù)據(jù)更新,只在原有位置留下指針指向新數(shù)據(jù)頁存放位置行,就是所謂的Forwarded Record。

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

 那么Forwarded Record既然是為了提升性能存在的機(jī)制,為什么又會引起性能問題?Forwarded Record的初衷是為了對堆表進(jìn)行更新時,堆表上存儲位置的變化不會同時更新非聚集索引而產(chǎn)生開銷。但對于查找來說,無論是堆表上存在表掃描,還是用于書簽查找,都會成倍帶來額外的IO開銷,下面看一個例子。

BEGIN TRAN
WHILE @index  100000 
  BEGIN 
    INSERT INTO dbo.HeapTest
        ( id, col1 )
    VALUES ( @index, NULL )
    SET @index = @index + 1

  END
COMMIT

代碼清單1.新建堆表并插入10萬條數(shù)據(jù)

通過代碼清單1創(chuàng)建測試表,并循環(huán)插入10萬數(shù)據(jù)。此時我們來看該堆表所占用存儲的頁數(shù),如圖2所示。

圖2.堆表空間占用

此時對該表進(jìn)行更新,讓原有行增長,產(chǎn)生Forwarded Record,此時再來看該堆表的存儲。如圖3所示。

圖3.產(chǎn)生8W+的forwarded record

此時我們注意到,雖然數(shù)據(jù)僅僅占到590頁,但存在8W+的forwarded record,如果我們對該表進(jìn)行掃描,則會看到雖然僅僅只有590頁,但需要8W+的邏輯IO,大大提升了對IO的開銷壓力,此外由于forwarded record頁與原頁往往不物理連續(xù),因此對IOPS也存在挑戰(zhàn)。如圖4所示。

圖4.不該產(chǎn)生的額外IO開銷

而上面查詢反映到性能計數(shù)器中,則呈現(xiàn)為如圖5所示的結(jié)果。

圖5.Forwarded Record計數(shù)器增長

 四、如何解決

看到Forwarded Record計數(shù)器,就說明數(shù)據(jù)庫中存在堆表,在OLTP系統(tǒng)中,所有的表上都應(yīng)該有聚集索引。因此可以通過在表上增加聚集索引來解決該問題。

    通常來講,只有只寫不讀的表設(shè)置為堆表比較合適,但如果看到存在Forwarded Reocord,則說明堆表上存在讀操作,那么找到該堆表,找一個合適的維護(hù)窗口時間創(chuàng)建堆表則是比較理想的選擇。

    如果由于其他原因無法創(chuàng)建聚集索引,則可以對堆表進(jìn)行表重建。

您可能感興趣的文章:
  • SQLServer存儲過程中事務(wù)的使用方法
  • SQL SERVER調(diào)用存儲過程小結(jié)
  • SQL Server存儲過程中使用表值作為輸入?yún)?shù)示例
  • SQL Server 聚焦存儲過程性能優(yōu)化、數(shù)據(jù)壓縮和頁壓縮提高IO性能方法(一)

標(biāo)簽:寧夏 湘潭 營口 欽州 鄂爾多斯 預(yù)約服務(wù) 周口 河源

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQL Server中的Forwarded Record計數(shù)器影響IO性能的解決方法》,本文關(guān)鍵詞  SQL,Server,中的,Forwarded,Record,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQL Server中的Forwarded Record計數(shù)器影響IO性能的解決方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于SQL Server中的Forwarded Record計數(shù)器影響IO性能的解決方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    任丘市| 宁河县| 南投县| 宁阳县| 榆林市| 罗江县| 理塘县| 桃源县| 宁化县| 耿马| 永平县| 泾阳县| 韶关市| 永年县| 天等县| 白城市| 苗栗县| 云林县| 山东省| 博爱县| 阳西县| 钟祥市| 剑阁县| 泾阳县| 黄梅县| 绍兴市| 桐城市| 灵石县| 略阳县| 云浮市| 蒙阴县| 广水市| 北碚区| 从江县| 荆门市| 辽宁省| 中卫市| 枣阳市| 兴山县| 永善县| 碌曲县|