พฤติกรรมของข้อมูลในดัชนีตามปัจจัยการเติม


14

สมมติว่าคุณมีฐานข้อมูลที่ปัจจัยการเติมเริ่มต้นคือ 20 เมื่อใดก็ตามที่ข้อมูลถูกแทรกมันจะสร้างหน้าเว็บที่เต็มไปถึง 20% เท่านั้นหรือไม่?

จากความเข้าใจของฉันเมื่อข้อมูลถูกแทรกจะมีประมาณ 20% ของข้อมูลในหน้า อย่างไรก็ตามเมื่อมีการอัพเดทข้อมูลมันจะขยายไปเป็นดัชนีมากกว่า 20% เพื่อบรรจุและสร้างการแบ่งหน้าใช่ไหม?

คำตอบ:


16

เติมปัจจัยเข้ามาเล่นเมื่อดัชนีถูกสร้างหรือสร้างใหม่ เป็นปริมาณการใช้สำหรับดัชนีของหน้าระดับลีฟที่เต็มไปด้วยในระหว่างการดำเนินการเหล่านี้ ( ดูหมายเหตุด้านล่างสำหรับคำชี้แจงเพิ่มเติมเกี่ยวกับระดับหน้าเว็บที่ได้รับผลกระทบ )

เมื่อมีคำสั่ง DML ข้อมูล ( INSERT, UPDATEและ / หรือDELETE) ก็จะเกิดขึ้นกับดัชนีได้รับผลกระทบเหมือนกัน กล่าวอีกนัยหนึ่งถ้าคุณมีหน้าที่เติม 20% และคุณแทรกข้อมูลลงในหน้านั้นหน้านั้นจะมีข้อมูลมากกว่า 20% ของข้อมูล (สมมติว่า 35% เป็นเพียงตัวอย่างเท่านั้น) แทรกอีกอันตอนนี้หน้าเต็ม 64% สร้างดัชนีใหม่และหน้าระดับลีฟจะมีเปอร์เซ็นต์พื้นที่ที่คุณระบุ (หรือโดยปริยายค่าเริ่มต้นสำหรับเซิร์ฟเวอร์)

( หมายเหตุเมื่อคุณไม่ได้ระบุPAD_INDEXให้ONใส่ตัวประกอบจะใช้กับหน้าระดับลีฟเท่านั้น แต่เมื่อคุณตั้งค่าPAD_INDEX = ONตัวประกอบการเติมจะถูกนำมาพิจารณาสำหรับหน้าระดับกลางของดัชนี ค่าเริ่มต้นคือOFF )

เหตุผลในการปรับปัจจัยเติม (แทนการใช้ค่าเริ่มต้น 100/0) คือเพื่อให้คุณลดการแบ่งหน้าเมื่อแทรกหรืออัปเดตข้อมูล แต่โปรดจำไว้ว่าไม่มีอะไรให้ฟรี ยิ่งปัจจัยเติมน้อยเท่าไรข้อมูลอวกาศก็จะมากขึ้นตามปกติ หากคุณรักษาพื้นที่ว่างหน้า 80% สำหรับดัชนีของคุณพวกเขาจะใช้พื้นที่ดิสก์จำนวนมากขึ้นซึ่งอาจทำให้อ่านได้มากขึ้น

จากความเข้าใจของฉันเมื่อข้อมูลถูกแทรกจะมีประมาณ 20% ของข้อมูลในหน้า อย่างไรก็ตามเมื่อมีการอัพเดทข้อมูลมันจะขยายไปเป็นดัชนีมากกว่า 20% เพื่อบรรจุและสร้างการแบ่งหน้าใช่ไหม?

เมื่อข้อมูลถูกแทรกมันจะแทรกลงในดัชนีที่เหมาะสมในหน้าที่เหมาะสม สิ่งนี้อาจเป็นไปได้ว่าการบริโภคหน้าจะสูงกว่าปัจจัยการเติม

การแบ่งหน้าจะเกิดขึ้นเมื่อมีการเพิ่มข้อมูลใหม่ในหน้าดัชนีแบบเต็ม SQL Server จะแบ่งหน้าและประมาณครึ่งหนึ่งของข้อมูลจากหน้าเต็มเป็นหน้าใหม่ อีกครั้งปัจจัยเติมไม่ได้มาเล่นที่นี่

เหตุผลที่ถูกต้องในการเติมปัจจัยการลดลงคือการย่อส่วนของหน้าให้เล็กที่สุด


3
นอกจากนี้ยังลดการปฏิบัติการ IO ที่จำเป็นในการขยายหรือจัดสรรพื้นที่
JNK

ตกลงดังนั้นฉันผิดกับพฤติกรรมที่ทำงาน ขอบคุณสำหรับคำตอบอย่างละเอียด!
DForck42

1
@ DForck42 ไม่มีปัญหายินดีให้ความช่วยเหลือ
Thomas Stringer

เราสามารถสรุปสิ่งนี้เพื่อบอกว่าการตั้งค่าตัวประกอบการเติมต่ำจะมีแนวโน้มที่จะอ่านช้า (หน้ามากขึ้น) แต่แทรกความเร็ว (แยกน้อยลง)?
Jon of All Trades

2
@ จอน: ด้วยดัชนีส่วนเติมสารเติมสูงและอ่านช้าลง สำหรับดัชนีทุกรายการจะมีสารเติมเต็มที่ดีที่สุด - เหนือและด้านล่างจะเขียนและอ่านช้า ประสิทธิภาพสูงสุดขึ้นอยู่กับรูปแบบการใช้งาน (จำนวนเม็ดมีดต่อวัน) รูปแบบการบำรุงรักษา (ความถี่ที่สร้างขึ้นใหม่) ข้อมูล (คีย์มีความพิเศษเพียงใด) ดัชนีที่ไม่ซ้ำมีแนวโน้มที่จะต้องใช้พื้นที่ว่างมากขึ้น (สารตัวเติมที่ต่ำกว่า)
wqw
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.