การกำหนดค่าไดรฟ์ที่เหมาะสมที่สุดสำหรับ SQL Server 2008R2


19

ฉันมีเซิร์ฟเวอร์ฐานข้อมูลค่อนข้างยุ่งใช้ SQL Server 2008 R2 ที่มีการตั้งค่าต่อไปนี้:

  • SATA RAID 1 (2 ไดรฟ์) - ระบบปฏิบัติการ / โปรแกรม
  • SAS RAID 10 (4 ไดรฟ์) - ไฟล์ฐานข้อมูล Sql (ข้อมูลและบันทึก)
  • SAS RAID 1 (2 ไดรฟ์) - TempDB (ข้อมูลและบันทึก)

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

ปรับปรุง:

สำหรับผู้ที่ขอรายละเอียดฮาร์ดแวร์เพิ่มเติม:

  • ไดรฟ์ SATA (ใช้สำหรับพาร์ติชัน OS / Program) คือ: WD 7200 RPM 3 Gb / s 3.5 นิ้ว SATA
  • ไดรฟ์ SAS ที่ใช้ในอาร์เรย์อื่นคือ: Seagate 15K RPM 6 Gb / s 3.5 นิ้ว SAS
  • ตัวควบคุม RAID ที่ใช้คือ: พอร์ต LSI 9260-8i SAS / SATA 6 Gb 8

อัปเดต 2:

จากความคิดเห็นที่ฉันได้รับดูเหมือนว่าฉันมีตัวเลือกที่ทำงานได้ดังต่อไปนี้ให้เลือก - ฉันจะมอบรางวัลให้กับใครบางคนที่สามารถบอกฉันได้ว่าสิ่งใดน่าจะดีที่สุดในสภาพแวดล้อมที่ฉันได้ระบุไว้:

  1. ทิ้งทุกอย่างไว้ - ฉันอาจไม่ทำดีกว่านี้อีก
  2. ย้าย 2 SAS RAID 1 ไดรฟ์ของฉันไปยังอาร์เรย์ RAID 10 ที่มีอยู่ของฉันเพื่อให้ประกอบด้วยดิสก์ทั้งหมด 6 แผ่น
  3. ย้ายไฟล์บันทึกของฉันไปที่ SAS RAID 1 และ / หรือย้าย TempDB (ข้อมูลหรือบันทึก) กลับไปที่ RAID 10

การอัปเดตครั้งที่ 2 ของคุณกำลังถามคำถามตรงกับคำถามเดิมของคุณดังนั้นคำตอบเดิมจึงมีผล "... ซึ่งน่าจะเป็นสิ่งที่ดีที่สุดในสภาพแวดล้อมที่ฉันได้ระบุไว้" ... คุณไม่ได้แสดงการวิเคราะห์ภาระงานใด ๆ ให้เราเห็นว่ามันเป็น "ค่อนข้างยุ่ง" ดังนั้นคำตอบเดียวกันนี้จึงนำมาใช้อีกครั้ง .
Mark Storey-Smith

ด้วย NVMe ประสิทธิภาพสูงและดิสก์ SSD อื่น ๆ ในตลาด RAID ไม่ได้มีความสำคัญอีกต่อไปจากมุมมองวิธีปฏิบัติที่ดีที่สุดสำหรับการกำหนดค่าดิสก์เซิร์ฟเวอร์ SQL Disk Pools (Storage Spaces) เป็นวิธีที่จะก้าวไปข้างหน้า อย่างไรก็ตามคุณจำเป็นต้องแยกโวลุ่มเพื่อเหตุผลในการแก้ไขปัญหาประสิทธิภาพการทำงานที่เกี่ยวข้องกับดิสก์ได้ดีขึ้น
ใบหน้าของมัน

คำตอบ:


14

ตัวแปรของคำถามนี้เกิดขึ้นแบบกึ่งประจำ:

นอกจากนี้ยังมีมวยต่อสู้เป็นครั้งคราวเกี่ยวกับการแยกข้อมูล / บันทึก "แนวปฏิบัติที่ดีที่สุด"

หากไม่มีการวิเคราะห์รายละเอียดเพิ่มเติมว่าเซิร์ฟเวอร์นี้ทำอะไรอยู่

  • RAID 1 สำหรับระบบปฏิบัติการ
  • RAID 10 (6 ดิสก์) สำหรับ data / logs / tempdb

ไม่ค่อยมีจุดใด ๆ ในการแยกที่มีแกนที่มีอยู่น้อยมาก อาร์เรย์เดียวที่มีความจุของ IOPs ที่สูงขึ้นโดยทั่วไปจะดูดซับก้อนและแรงกระแทกของภาระงานของคุณได้ดีกว่า 2 อาร์เรย์ขนาดเล็ก

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

ระบุว่าไดรฟ์ระบบปฏิบัติการของคุณคือจานรองแก้ว 7200RPM ฉันจะประหลาดใจถ้า tempdb บนไดรฟ์ OS กำหนดค่าประโยชน์ใด ๆ


7

ทุกอย่างขึ้นอยู่กับปริมาณงานของคุณ แต่มีเพียง 6 ไดรฟ์เท่านั้นที่จะ จำกัด ตัวเลือกของคุณ หากปริมาณงานของคุณไม่ได้ขึ้นอยู่กับ tempdb อย่างมากเช่นการเรียงลำดับตารางแฮชและการแยกสแน๊ปช็อตคุณอาจจะดีกว่าด้วยการใช้ไดรฟ์ 6 SAS ร่วมกันใน RAID 10 อย่างไรก็ตามถ้าคุณรู้หรือมีเมตริกเพื่อพิสูจน์ว่า tempdb มีการใช้งานอย่างหนักจากนั้นคุณควรแยกเก็บไว้ตามที่คุณมี


ขอบคุณสำหรับคำตอบการเปลี่ยนการกำหนดค่าของช่วงคือ (น่าเสียดาย) ไม่ใช่ตัวเลือกเนื่องจากเซิร์ฟเวอร์นี้กำลังใช้งานอยู่ ฉันอยากรู้เกี่ยวกับการเปลี่ยน tempdb กลับไปเป็น RAID 10 และวางไฟล์บันทึกทั้งหมดบน RAID 1 - นี่เป็นตัวเลือกที่ชาญฉลาดหรือไม่?
DanP

2
โปรดจำไว้ว่า SQL Server จำเป็นต้องเขียนธุรกรรมทั้งหมดลงในบันทึกเป็นส่วนหนึ่งของการกระทำดังนั้นคุณจึงต้องการประสิทธิภาพการเขียนที่เร็วที่สุดในการกำหนดค่าของคุณ RAID 10 มีประสิทธิภาพการเขียนที่ดีกว่า RAID 1 ดังนั้นฉันจะปล่อยให้บันทึกบนไดรฟ์ข้อมูลที่เร็วขึ้น
Patrick Keisler

2

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

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

โดยไม่ต้องอ้างอิงถึงภาระงานของคุณ (และสเป็คของไดรฟ์เหล่านั้นและตัวควบคุมใด ๆ ที่อยู่ระหว่างพวกเขาและเครื่อง) ฉันอยากจะไปสามไดรฟ์: หนึ่งสำหรับโปรแกรม OS + และ tempdb (ข้อมูล) หนึ่งสำหรับ DB หลัก data และรายการที่สามสำหรับบันทึก (ทั้ง tempdb และฐานข้อมูลหลัก)

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


แน่นอนฉันจะอธิบายสภาพแวดล้อมของเราเป็นหนึ่ง "หนักเขียน" - ฉันจะปรับปรุงคำถามของฉันด้วยรายละเอียดฮาร์ดแวร์รายละเอียดเพิ่มเติมในวันจันทร์
DanP

มีความคิดเกี่ยวกับจำนวนไดรฟ์ที่ OP มีหรือไม่ ฉันกำลังคิดเกี่ยวกับ Raid 1 มากกว่าที่เขามีสำหรับไฟล์บันทึก นั่นไม่ได้ฟังเหมือนตัวเลือกที่ยอดเยี่ยมสำหรับวัตถุประสงค์ในการเขียนและไฟล์บันทึกของ AFAIK ไม่ได้ถูกอ่านอย่าง จำกัด แต่เขียน ..
Marian

ฉันได้เพิ่มรายละเอียดเพิ่มเติมเกี่ยวกับฮาร์ดแวร์ของเครื่อง
DanP

1
ความเข้าใจผิดนี้อาจเป็นต้นเหตุของการแยกข้อมูล / บันทึกเสียงหลายอย่างดังนั้นต้องขอโทษด้วย แต่ฉันจะโทรออก "... เนื่องจากการเขียนแต่ละครั้งเกี่ยวข้องกับการอัพเดตทั้งไฟล์บันทึกและไฟล์ข้อมูล" - ไม่มันไม่ได้ การเขียนไปยังหน้าข้อมูลเกิดขึ้นที่จุดตรวจสอบไม่ใช่ในทุกการแก้ไข
Mark Storey-Smith

1
@DavidSpillett True จะมีหลายกรณีที่การแบ่งมีประโยชน์เสมอ กุญแจสำคัญคือคุณทดสอบและตรวจสอบว่าการกำหนดค่ามีประโยชน์สำหรับเวิร์กโหลดเฉพาะนั้น
Mark Storey-Smith

2

คำตอบที่แท้จริงขึ้นอยู่กับความต้องการของคุณ แต่โดยทั่วไป "ใส่ข้อมูลและเข้าสู่ระบบอาร์เรย์ที่แตกต่าง" มีความสำคัญสูงกว่า "ใส่ tempdb ในอาร์เรย์ของตัวเอง"

จากจำนวนไดรฟ์ที่คุณมีอยู่จุดเริ่มต้นของฉันจะเป็น:

  1. สองไดรฟ์, RAID 1 - ระบบปฏิบัติการ, ไฟล์เรียกทำงาน, เพจไฟล์
  2. สี่ไดรฟ์ RAID 5 - ไฟล์ข้อมูลทั้งหมด (อีกทางหนึ่งคือ RAID 1 + 0)
  3. สองไดรฟ์ RAID 1 - ไฟล์บันทึกทั้งหมด

สิ่งที่ควรทำคือใช้SQLIOเพื่อทดสอบประสิทธิภาพของการกำหนดค่าไดรฟ์ที่แตกต่างกัน


นี่แสดงให้เห็นถึง "ด้านอื่น ๆ " ของคำแนะนำที่ฉันอ่าน ฉันหวังว่าจะมีวิธีการที่ชัดเจนในการพิจารณาว่าตัวเลือกใดจะดีกว่าโดยไม่ต้องหันไปลองใช้มันในสภาพแวดล้อมการผลิต
DanP

2
@DanP ฉันเองจะได้รับคำแนะนำจาก Mark และเลือก RAID10 ที่มีไดรฟ์ส่วนที่เหลือ (ยกเว้น OS) ไฟล์บันทึกนั้นมีความเข้มข้นในการเขียนและต้องการประสิทธิภาพที่ดีกว่า RAID 1 ที่มีให้เท่าที่ฉันคิด แต่ฉันไม่ใช่ผู้เชี่ยวชาญด้านฮาร์ดแวร์ แค่ 2 เซ็นต์ของฉัน
Marian

2
ฉันควรพูดถึงว่าความคิดเห็นของฉันมาจากประสบการณ์ของอดีต (ชนิด) ล้มเหลวในการโยกย้ายไปยังเซิร์ฟเวอร์ที่ดีกว่า แต่มีประสิทธิภาพที่แย่ลง เราไม่เคยทดสอบการโหลดจริงบนเซิร์ฟเวอร์ใหม่นี้เราไม่เคยมีโอกาสเซิร์ฟเวอร์ไม่พร้อมตรงเวลา ปรากฎว่าการทดสอบเซิร์ฟเวอร์ก่อนที่จะย้ายไปยังการผลิตควรเป็น MANDATORY ขออภัยสำหรับความสำคัญ ดังนั้นมนต์ของฉันสำหรับการโยกย้าย / อัพเกรดทั้งหมดคือ: ทดสอบ, ทดสอบ, ทดสอบ, ... ทดสอบเลวมากที่สุด
Marian

1
ไม่แน่ใจว่าจะเริ่มต้นด้วย RAID 5 หรือ SQLIOSIM ... ไปกันทีหลังว่าอดีตพูดถึงมันเอง SQLIOSIM เป็นเครื่องมือทดสอบความถูกต้องและความเครียดไม่ใช่เครื่องมือทดสอบประสิทธิภาพหรือโหลด ไม่มีที่ใดในการเปรียบเทียบประสิทธิภาพของ config-X กับ config-Y สำหรับ workload-Z ทั้งหมดที่จะบอกคุณได้ว่า config-X ทำงานได้ดีเพียงใดกับ config-Y ในการเรียกใช้ SQLIOSIM หากคุณต้องการเปรียบเทียบประสิทธิภาพสำหรับ workload-Z ให้ทดสอบ workload-Z
Mark Storey-Smith

1
@GreenstoneWalker "RAID1 เร็วกว่าสำหรับการเขียนกว่า RAID1 + 0" นั้นไร้สาระ ความคิดนี้มาจากไหน
Mark Storey-Smith

-1

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

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

สิ่งหนึ่งที่คุณไม่ได้พูดถึง แต่สามารถลอง (ถ้าคุณยังไม่ได้ทำ): Microsoft แนะนำให้แบ่ง TempDB ของคุณมากกว่าไฟล์หลาย ๆ ไฟล์ (หนึ่งตัวต่อซีพียู) แน่นอนว่าจะเป็นการดีที่สุดหากมีดิสก์แยกต่างหาก แต่การมีไฟล์แยกต่างหากช่วยได้ http://msdn.microsoft.com/en-us/library/ms175527(v=SQL.105).aspx


4
Tempdb ใช้สำหรับหลาย ๆ อย่าง แต่ไม่ถือว่าเป็นฐานข้อมูลแบบ throwaway และวางไว้ใน RAID 0 โปรดจำไว้ว่าโวลุ่ม RAID 0 นั้นล้มเหลว SQL Server จะไม่สามารถเริ่มต้นได้
Patrick Keisler

ผมได้สร้างแน่นอน DB อุณหภูมิต่อหนึ่งหลักเป็นปัญหา แต่ต้องขอบคุณสำหรับการเพิ่มจุดนั้นเช่นกัน :)
DanP

1
คำแนะนำเหล่านี้ไม่ดีมากและไม่เหมาะสมกับทุกสภาพแวดล้อม @PatrickKeisler ได้รับการกล่าวถึงครั้งแรก ข้อที่สองคือตำนานที่พอลแรนดัลเดบิวต์เมื่อไม่นานมานี้ บทความนี้เป็นหนึ่ง: ของ SQL Server DBA ตำนานวัน (12/30) tempdb ควรมีแฟ้มข้อมูลต่อหนึ่งหน่วยประมวลผลหลัก ดังนั้นเอกสารของ MS อาจไม่ถูกต้อง
Marian

2
"เนื่องจาก TempDB มีเพียงบัฟเฟอร์ข้อมูลคุณไม่สามารถประสบกับข้อมูลสูญหาย" ... และฉันมั่นใจว่าผู้ใช้ระบบจะยินดีที่ในช่วงเวลาหยุดทำงาน X ชั่วโมงที่พวกเขาประสบในขณะที่ a) ops ขุดรอบในห้องใต้ดินสำหรับ เปลี่ยนดิสก์หรือ b) DBA พยายามอธิบายวิธีใช้วิธีย้าย tempdb จากโทรศัพท์มือถือของเขา
Mark Storey-Smith
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.