SQL Server 2005/2008 - หลายไฟล์ / กลุ่มไฟล์ - เท่าไหร่? ทำไม?


11

ฉันเป็นนักพัฒนาที่สำคัญ - แต่ทุกเวลาลูกค้าจะไม่มี DBA ที่เหมาะสมในการจัดการกับปัญหาเหล่านี้ดังนั้นฉันจึงถูกเรียกให้ตัดสินใจ

กลยุทธ์ / แนวปฏิบัติที่ดีที่สุดของคุณคืออะไรเมื่อต้องจัดการกับฐานข้อมูล SQL Server ที่มีขนาดพอสมควร (อะไรที่ใหญ่กว่า Northwind หรือ AdventureWorks ประมาณ 2-4GB ของข้อมูลและดัชนี ฯลฯ ) - คุณใช้หลายไฟล์ / กลุ่มไฟล์หรือไม่?

ถ้าเป็นเช่นนั้น และทำไม?

คุณมีเกณฑ์อะไรบ้างในการตัดสินใจว่าจะย้ายออกจากแนวทาง "หนึ่งกลุ่มไฟล์สำหรับทุกอย่าง" เมื่อไหร่:

* database size?
* database complexity?
* availability / reliability requirements?
* what else?

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

ขอบคุณสำหรับคำแนะนำตัวชี้ความคิด!

ไชโยมาร์ค

คำตอบ:


16

กฎพื้นฐานง่ายๆคือการแยกไฟล์ลงในไดรฟ์ข้อมูลที่แตกต่างกันเพื่อหลีกเลี่ยงความขัดแย้งอย่างไรก็ตามจำนวนของประสิทธิภาพที่คุณได้รับจะแตกต่างกันไปตามระบบย่อยและเวิร์กโหลดของ I / O ยกตัวอย่างเช่นไฟล์หลาย ๆ ไฟล์บนแกนหมุนทางกายภาพเดียวจะดูดเท่าที่ประสิทธิภาพจะดำเนินไป แต่การจัดเรียงเดียวกันกับปริมาณที่อยู่ใน SAN LUN ที่มีไดรฟ์หลายร้อยตัวจาก RAID 10 อาร์เรย์อาจไม่เป็นไร ตัวนับความยาวคิวของดิสก์เป็นเพื่อนของคุณเป็นวิธีที่ง่ายที่สุดในการบอกว่าคุณมีคอขวด I / O หรือไม่

คุณกำลังดูรูปแบบ I / O บนฐานข้อมูลไม่ว่าจะเป็นแบบอ่านอย่างเดียวอ่านส่วนใหญ่อ่านเขียนเขียนเป็นส่วนใหญ่เขียนอย่างเดียวและอ้างอิงจากสิ่งนั้น คุณต้องเลือกระดับ RAID ที่ถูกต้องและตรวจสอบให้แน่ใจว่าออฟเซ็ตพาร์ติชันดิสก์ของคุณขนาดสตริป RAID และขนาดหน่วยการจัดสรร NTFS ถูกตั้งค่าอย่างถูกต้อง บางคนชอบที่จะแยกดัชนีที่ไม่เป็นคลัสเตอร์ออกเป็นกลุ่มไฟล์แยกกัน แต่การเพิ่มประสิทธิภาพที่นี่แตกต่างกันไปตามที่ฉันได้อธิบายไว้ข้างต้น

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

Tempdb เป็นกรณีพิเศษทั้งหมดและฉันจะนำคุณไปยังบล็อกโพสต์ของฉันที่อธิบายเกี่ยวกับสาเหตุและวิธีการแบ่ง tempdb - มีความเข้าใจผิดมากมายอยู่ที่นั่น

โดยไม่ต้องให้คำแนะนำ 'กวาดทั่วไป' ที่นี่ฉันจะนำคุณไปที่เอกสารสีขาวและโพสต์บล็อกเพื่อให้คุณอ่าน:

หวังว่านี่จะช่วยคุณได้!


+1 ขอบคุณมาก Paul - โพสต์ที่ยอดเยี่ยมลิงก์ที่ยอดเยี่ยม
marc_s

คำตอบที่ดี Paul -> ฉันพยายามค้นหาบางคำถามที่ถามก่อนหน้านี้เกี่ยวกับ SqlServer และการออกแบบฮาร์ดดิสก์ (เช่น TempDB บน ​​Bus1_Disk1, My_DB บน ​​Bus2_Disk1, ฯลฯ .. ) .. เวลาอ่าน ...
Pure.Krome

4

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

มีบางสถานการณ์ที่น่าสนใจในบางสถานที่:

  • 2 กลุ่มไฟล์: ข้อมูลและดัชนี
  • 3 กลุ่มไฟล์: ตารางอ่านอย่างเดียว, อ่านเขียน, ดัชนี
  • หลายกลุ่มไฟล์: อ่านอย่างเดียว, อ่าน - เขียน, ดัชนี, ตารางคีย์ 1, ตารางคีย์ 2, ...

คุณต้องวิเคราะห์สภาพแวดล้อมของคุณเพื่อตัดสินใจว่ากลุ่มไฟล์จะช่วยให้ SQL Server ของคุณเติบโตการใช้งานและความต้องการด้านประสิทธิภาพหรือไม่

ตัวบ่งชี้สำคัญบางตัวเพื่อย้ายไปยังหลายกลุ่มไฟล์ (จากบทความนี้ ):

  • เมื่อการเข้าคิวดิสก์ทำให้แอปพลิเคชั่นและปัญหาผู้ใช้เกิดปัญหา
    • หากเป็นกรณีนี้ให้พิจารณาการใช้ประโยชน์จากดิสก์ไดรฟ์เพิ่มเติมด้วยกลุ่มไฟล์ใหม่ซึ่งมีตารางแบบเข้มข้นของ IO
  • เมื่อตารางเฉพาะ 10% หรือมากกว่าของฐานข้อมูล
    • หากเป็นกรณีนี้ให้พิจารณาย้ายตารางขนาดใหญ่เหล่านี้เพื่อแยกกลุ่มไฟล์ในดิสก์ไดรฟ์พื้นฐานที่แยกต่างหาก
    • ขึ้นอยู่กับขนาดของตารางตามสัดส่วนที่เหลือของตารางพิจารณาสร้างกลุ่มไฟล์สำหรับแต่ละตาราง
  • เมื่อดัชนีที่ไม่ใช่คลัสเตอร์และพื้นที่ข้อมูลมีค่าเท่ากันบนตารางขนาดใหญ่
    • หากเป็นกรณีนี้ให้พิจารณาแยกข้อมูลและดัชนีคลัสเตอร์ออกจากดัชนีที่ไม่ใช่คลัสเตอร์
  • เมื่อเปอร์เซ็นต์ที่เท่ากันของข้อมูลแบบอ่านอย่างเดียวและอ่านเขียนอยู่ในฐานข้อมูล
    • หากเป็นกรณีนี้ให้พิจารณาแยกข้อมูลอ่านอย่างเดียวในกลุ่มไฟล์แยกต่างหากเป็นข้อมูลอ่านเขียน
  • เมื่อเวลาไม่เพียงพอที่จะทำการบำรุงรักษาฐานข้อมูล
    • หากเป็นกรณีนี้ให้พิจารณาแบ่งตารางขนาดใหญ่ออกเป็นกลุ่มไฟล์แยกกันบนดิสก์ที่ต่างกันและทำการบำรุงรักษาแบบขนาน
  • เมื่อธุรกิจหรือแอปพลิเคชันจะเปลี่ยนแปลงอย่างมีนัยสำคัญและข้อมูลจะเติบโตในอัตราที่สูงขึ้นมาก
    • หากเป็นกรณีนี้ให้พิจารณาทำงานกับผู้ใช้เพื่อทำความเข้าใจกับการเติบโตที่อาจเกิดขึ้น
  • เมื่อข้อมูลที่เก็บถาวรอยู่ในฐานข้อมูลเดียวกันกับข้อมูลการผลิต
    • หากเป็นกรณีนี้ให้พิจารณาแยกกลุ่มไฟล์หรือหนึ่งในเทคนิคในคำแนะนำนี้ - การเก็บถาวรข้อมูลใน SQL Server

หากคุณพบว่ากลุ่มไฟล์สามารถปรับปรุงประสิทธิภาพของฐานข้อมูลของคุณให้เขียนโค้ดและทดสอบกระบวนการในสภาพแวดล้อมการจัดเตรียมก่อนที่คุณจะนำการเปลี่ยนแปลงไปใช้กับเซิร์ฟเวอร์ที่ใช้งานจริงของคุณ เตรียมการวัดบางส่วนก่อนที่คุณจะใช้การเปลี่ยนแปลงและเปรียบเทียบก่อนและหลัง เนื่องจากกระบวนการเหล่านี้อาจใช้ทรัพยากรมากและใช้เวลานานให้ทำตามขั้นตอนเหล่านี้ในช่วงเวลาการบำรุงรักษา

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


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