การแบ่งพาร์ติชันบนกลุ่มไฟล์เดียว


10

ฉันมีตารางที่มีขนาดใหญ่มากในฐานข้อมูลของฉัน แต่ข้อมูลจำนวนมากนี้เป็น "เก่า"

เนื่องจากสถานการณ์ที่อยู่นอกเหนือการควบคุมของฉันฉันไม่ได้รับอนุญาตให้ลบข้อมูล "เก่า" นี้ ข้อ จำกัด อื่น ๆ คือฉันไม่สามารถแก้ไขฐานข้อมูลหมายถึงเพิ่มกลุ่มไฟล์ลงในนั้น ทุกอย่างอยู่ในPRIMARYกลุ่มไฟล์

ฉันคิดว่าจะแบ่งพาร์ติชันตารางเหล่านี้ออกเป็นพาร์ติชั่นบางตัวเช่น "ใหม่", "เก่า", "เก็บถาวร" และที่คล้ายกัน ฉันมีคอลัมน์ "สถานะ" ที่ฉันต้องการใช้เพื่อจุดประสงค์นี้

จากสถานการณ์และข้อ จำกัด ที่อธิบายไว้ฉันสงสัยว่าการแบ่งพาร์ติชันเหมาะสมหรือไม่ กล่าวอีกนัยหนึ่งถ้าตารางของฉันถูกแบ่งพาร์ติชั่นด้วยวิธีนี้ แต่ทุกพาร์ติชั่นอยู่ในกลุ่มไฟล์เดียวกัน SQL Server จะฉลาดพอที่จะหาพื้นที่พิเศษในไฟล์ต้นแบบที่ข้อมูล "ใหม่" ของฉันอยู่และไม่ได้สัมผัส พื้นที่ที่มีข้อมูล "เก่า" หรือไม่

ถ้าจะให้แตกต่างกันถ้าสมมุติว่า 80% ของข้อมูลของฉันคือ "เก่า" SQL Server มีกลไกในการหลีกเลี่ยงการเข้าถึงไฟล์ต้นแบบ 100% หรือไม่และเข้าถึงได้เพียง 20% ซึ่งมีข้อมูล "ใหม่" (ซึ่งแน่นอนว่าฉันระบุคอลัมน์การแบ่งพาร์ติชันในส่วนWHEREคำสั่ง)

ฉันเดาว่าจะตอบคำถามนี้ใครจะต้องเข้าใจว่าการแบ่งพาร์ติชั่นนั้นดำเนินการภายในอย่างไร ฉันขอขอบคุณพอยน์เตอร์ใด ๆ

คำตอบ:


6

มีข้อดีสองข้อในการแบ่งพาร์ติชันตารางในกลุ่มไฟล์เดียวกัน:

  1. การอนุญาตให้บางส่วนของดัชนีขนาดใหญ่ถูกสร้างใหม่แบบเพิ่มหน่วยทำให้การบำรุงรักษามีประสิทธิภาพมากขึ้น ตรวจสอบALTER INDEX [foo] REBUILD PARTITION=nรายละเอียดเพิ่มเติม
  2. การใช้ประโยชน์จากการกำจัดพาร์ติชันและการล็อกระดับพาร์ติชัน (อาจ) เพื่อปรับปรุงการบำรุงรักษาแบบสอบถาม ผมปรึกษาเรื่องนี้ในบล็อกของฉัน

มีหลายสิ่งที่ต้องคำนึงถึงหากคุณกำลังแบ่งพาร์ติชัน

  • หากตารางของคุณมีดัชนีคลัสเตอร์ (และควรจริง ๆ ) คีย์การแบ่งพาร์ติชันของคุณต้องเป็นส่วนหนึ่งของดัชนีคลัสเตอร์
  • เพื่อหลีกเลี่ยงปัญหาเรื่องประสิทธิภาพคุณควรจัดพาร์ติชั่นของคุณ ซึ่งหมายความว่าดัชนีทั้งหมดของคุณควรมีคีย์พาร์ติชันของคุณไม่ว่าจะเป็นการรวมหรือเป็นส่วนหนึ่งของดัชนี
  • การสร้างดัชนีใหม่สำหรับพาร์ติชันออฟไลน์ใน SQL Server รุ่นปัจจุบัน (2005-2012) หากพาร์ติชันของคุณมีขนาดใหญ่และการสร้างใหม่โดยพาร์ติชันอาจทำให้เกิดปัญหาในการบล็อก

ฉันขอแนะนำให้ทำการวิจัยอย่างละเอียดเกี่ยวกับการแบ่งพาร์ติชันก่อนนำไปใช้ Kendra Little มีรายการทรัพยากรที่ยอดเยี่ยมที่คุณสามารถเริ่มต้นได้


หากฉันมีดัชนีที่แบ่งพาร์ติชันแล้วดัชนีที่ไม่ได้ทำคลัสเตอร์ทั้งหมดจะไม่มีคอลัมน์การแบ่งพาร์ติชันเป็นตัวระบุแถวหรือไม่?
Zikato

0

คำตอบคือ "ใช่" มันมีกลไกในการสืบค้นใด ๆ ที่กรองอินพุตตามตรรกะที่ใช้เพื่อกำหนดพาร์ติชัน

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

วิธีหนึ่งในการบังคับใช้สิ่งนี้คือการมีมุมมองที่เข้าถึงพาร์ติชันเดียวเท่านั้นโดยใช้ตรรกะที่ถูกต้องในมุมมอง


ฉันสงสัยว่าได้รับประสิทธิภาพจะให้แบ่งไปยังดิสก์ทางกายภาพเดียวกัน ..
sotn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.