日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

聚集索引和填充因子fill factor的设置,减少死锁

發(fā)布時(shí)間:2023/12/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 聚集索引和填充因子fill factor的设置,减少死锁 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我的數(shù)據(jù)庫(kù)很容易死鎖,我后來(lái)發(fā)現(xiàn)是聚集索引引起的,我的索引填充因子是90,后來(lái)我把聚集索引去掉,問(wèn)題就解決了,但是我不明白聚集索引為什么會(huì)引起死鎖??

你的填充因子設(shè)置得不對(duì) ?
? ?
? 聚集索引代表了表中記錄的存儲(chǔ)順序,所以每次數(shù)據(jù)的變化,都可能導(dǎo)致表中的數(shù)據(jù)按照聚集索引重新調(diào)整順序 ?
? ?
? 而填充因子設(shè)置為90,這是偏向于減少索引空間占用的做法,這樣的做法導(dǎo)致為了減少索引的空間占用,使數(shù)據(jù)頁(yè)的空閑空間很小 ?
? 在向一個(gè)已滿的索引頁(yè)添加某個(gè)新行時(shí),SQL ? Server ? 把大約一半的行移到新頁(yè)中以便為新行騰出空間。這種重組稱為頁(yè)拆分。頁(yè)拆分會(huì)降低性能并使表中的數(shù)據(jù)存儲(chǔ)產(chǎn)生碎片 ?
? 因?yàn)槟氵@樣的填充因子設(shè)置,導(dǎo)致數(shù)據(jù)頁(yè)空閑空間很小,所以頁(yè)拆分經(jīng)常發(fā)生,這樣數(shù)據(jù)處理性能低,當(dāng)然就很容易鎖表了? ;

有關(guān)填充因子的一些說(shuō)明,參考SQL聯(lián)機(jī)幫助: ? ??
? ?
? 填充因子 ?
? 在創(chuàng)建聚集索引時(shí),表中的數(shù)據(jù)按照索引列中的值的順序存儲(chǔ)在數(shù)據(jù)庫(kù)的數(shù)據(jù)頁(yè)中。在表中插入新的數(shù)據(jù)行或更改索引列中的值 時(shí),可能必須重新組織表中的數(shù)據(jù)存儲(chǔ),以便為新行騰出空間,保持?jǐn)?shù)據(jù)的有序存儲(chǔ)。這同樣適用于非聚集索引。添加或更改數(shù)據(jù)時(shí),SQL ? Server ? 可能不得不重新組織非聚集索引頁(yè)中的數(shù)據(jù)存儲(chǔ)。向一個(gè)已滿的索引頁(yè)添加某個(gè)新行時(shí),SQL ? Server ? 把大約一半的行移到新頁(yè)中以便為新行騰出空間。這種重組稱為頁(yè)拆分。頁(yè)拆分會(huì)降低性能并使表中的數(shù)據(jù)存儲(chǔ)產(chǎn)生碎片。有關(guān)更多信息,請(qǐng)參見(jiàn)表和索引構(gòu)架。 ?
? ?
? 創(chuàng)建索引時(shí),可以指定一個(gè)填充因子,以便在索引的每個(gè)葉級(jí)頁(yè)上留出額外的間隙和保留一定百分比的空間,供將來(lái)表的數(shù)據(jù)存儲(chǔ)容量進(jìn)行擴(kuò)充和減少頁(yè)拆分的可能 性。填充因子的值是從 ? 0 ? 到 ? 100 ? 的百分比數(shù)值,指定在創(chuàng)建索引后對(duì)數(shù)據(jù)頁(yè)的填充比例。值為 ? 100 ? 時(shí)表示頁(yè)將填滿,所留出的存儲(chǔ)空間量最小。只有當(dāng)不會(huì)對(duì)數(shù)據(jù)進(jìn)行更改時(shí)(例如,在只讀表中)才會(huì)使用此設(shè)置。值越小則數(shù)據(jù)頁(yè)上的空閑空間越大,這樣可以減 少在索引增長(zhǎng)過(guò)程中對(duì)數(shù)據(jù)頁(yè)進(jìn)行拆分的需要,但需要更多的存儲(chǔ)空間。當(dāng)表中數(shù)據(jù)會(huì)發(fā)生更改時(shí),這種設(shè)置更為適當(dāng)。 ?
? ?
? 提供填充因子選項(xiàng)是為了對(duì)性能進(jìn)行微調(diào)。但是,使用 ? sp_configure ? 系統(tǒng)存儲(chǔ)過(guò)程指定的服務(wù)器范圍的默認(rèn)填充因子,在大多數(shù)情況下都是最佳的選擇。 ? ?
? ? ? ?? ?
? 說(shuō)明 ? ? 即使對(duì)于一個(gè)面向許多插入和更新操作的應(yīng)用程序來(lái)說(shuō),數(shù)據(jù)庫(kù)讀取次數(shù)一般也超過(guò)數(shù)據(jù)庫(kù)寫入次數(shù)的 ? 5 ? 到 ? 10 ? 倍。因此,指定一個(gè)不同于默認(rèn)設(shè)置的填充因子會(huì)降低數(shù)據(jù)庫(kù)的讀取性能,而降低量與填充因子設(shè)置值成反比。例如,當(dāng)填充因子的值為 ? 50% ? 時(shí),數(shù)據(jù)庫(kù)的讀取性能會(huì)降低兩倍。 ?
? ? ? ?
? 只有當(dāng)在表中根據(jù)現(xiàn)有數(shù)據(jù)創(chuàng)建新索引,并且可以精確預(yù)見(jiàn)將來(lái)會(huì)對(duì)這些數(shù)據(jù)進(jìn)行哪些更改時(shí),將填充因子選項(xiàng)設(shè)置為另一個(gè)值才有用。 ?
? ?
? 填充因子只在創(chuàng)建索引時(shí)執(zhí)行;索引創(chuàng)建后,當(dāng)表中進(jìn)行數(shù)據(jù)的添加、刪除或更新時(shí),不會(huì)保持填充因子。如果試圖在數(shù)據(jù)頁(yè)上保持額外的空間,則將有背于使用填 充因子的本意,因?yàn)殡S著數(shù)據(jù)的輸入,SQL ? Server ? 必須在每個(gè)頁(yè)上進(jìn)行頁(yè)拆分,以保持填充因子指定的空閑空間百分比。因此,如果表中的數(shù)據(jù)進(jìn)行了較大的變動(dòng),添加了新數(shù)據(jù),可以填充數(shù)據(jù)頁(yè)的空閑空間。在這 種情況下,可以重新創(chuàng)建索引,重新指定填充因子,以重新分布數(shù)據(jù)。?

  fill ? factor ? 選項(xiàng) ?
? 使用 ? fill ? factor ? 選項(xiàng)指定當(dāng)使用現(xiàn)有數(shù)據(jù)創(chuàng)建新索引時(shí),Microsoft® ? SQL ? Server™ ? 應(yīng)使每一頁(yè)填滿的程度。由于 ? SQL ? Server ? 必須在填充時(shí)花費(fèi)時(shí)間分割這些頁(yè)面,所以 ? fill ? factor ? 百分比會(huì)影響系統(tǒng)性能。 ?
? ?
? fill ? factor ? 百分比僅在創(chuàng)建索引時(shí)使用。這些頁(yè)面都不可能被維護(hù)在任何特定的飽滿水平上。 ?
? ?
? fill ? factor ? 的默認(rèn)值為 ? 0;其有效值是從 ? 0 ? 到 ? 100。fill ? factor ? 的值為 ? 0 ? 并不表示頁(yè)面的填滿程度為 ? 0%。類似于 ? fill ? factor ? 設(shè)置為 ? 100 ? 的情況,SQL ? Server ? 在 ? fill ? factor ? 值為 ? 0 ? 時(shí),會(huì)用頁(yè)面全部為數(shù)據(jù)的頁(yè)來(lái)創(chuàng)建聚集索引,用頁(yè)面全部為數(shù)據(jù)的葉子頁(yè)來(lái)創(chuàng)建非聚集索引。與 ? fill ? factor ? 設(shè)置為 ? 100 ? 的情況不同的是,SQL ? Server ? 在索引樹(shù)的高層級(jí)別上預(yù)留空間。很少有理由去改變 ? fill ? factor ? 的默認(rèn)值,因?yàn)榭梢允褂?? CREATE ? INDEX ? 命令來(lái)覆蓋它。 ?
? ?
? 較小的 ? fill ? factor ? 值將導(dǎo)致 ? SQL ? Server ? 以不飽滿的頁(yè)面創(chuàng)建新索引。例如,將 ? fill ? factor ? 值設(shè)置為10 ? 對(duì)于想在一個(gè)最終將保持較少數(shù)據(jù)的表上創(chuàng)建索引是合適的。越小的 ? fill ? factor ? 值將導(dǎo)致每一個(gè)索引占用更多的存儲(chǔ)空間,但同時(shí)也允許以后可不進(jìn)行頁(yè)面拆分進(jìn)行插入操作。 ?
? ?
? 如果設(shè)置 ? fill ? factor ? 值為 ? 100,SQL ? Server ? 以100% ? 的飽滿度創(chuàng)建聚集和非聚集索引。設(shè)置 ? fill ? factor ? 的值為 ? 100 ? 僅對(duì)只讀表是合適的,因?yàn)閿?shù)據(jù)從來(lái)不被添加到此類表中。 ?
? ?
? fill ? factor ? 是一個(gè)高級(jí)選項(xiàng)。如果要用 ? sp_configure ? 系統(tǒng)存儲(chǔ)過(guò)程改變?cè)撛O(shè)置,必須把當(dāng) ? show ? advanced ? options ? 設(shè)置為 ? 1 ? 時(shí)僅能更改 ? fill ? factor,該選項(xiàng)在停止并重新啟動(dòng)服務(wù)器后生效。

  一般的填充因子設(shè)置策略: ?
? 數(shù)據(jù)變化越頻繁,填充因子越小 ?
? 數(shù)據(jù)越少變化,填充因子越大,對(duì)于數(shù)據(jù)不變化的表,填充因子設(shè)置為100

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的聚集索引和填充因子fill factor的设置,减少死锁的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。