คุณทำการทดสอบโหลดและวางแผนกำลังการผลิตสำหรับฐานข้อมูลอย่างไร


34

นี่เป็นคำถามที่ยอมรับได้เกี่ยวกับการวางแผนกำลังการผลิตสำหรับฐานข้อมูล

ที่เกี่ยวข้อง:

ฉันต้องการสร้างคำถามเกี่ยวกับเครื่องมือและวิธีการวางแผนกำลังการผลิตสำหรับฐานข้อมูล นี่เป็นคำถามที่ยอมรับได้

เห็นได้ชัดว่าเวิร์กโฟลว์ทั่วไปคือ:

  • ใส่สถานการณ์ของคุณในสถานที่
  • เพิ่มการตรวจสอบ
  • เพิ่มทราฟฟิก
  • ประเมินผลลัพธ์
  • ให้อภัยตามผลลัพธ์
  • ล้างซ้ำจนกว่าจะมีความสุขพอสมควร

โปรดอธิบายเครื่องมือและเทคนิคที่แตกต่างกันสำหรับเว็บเซิร์ฟเวอร์เฟรมเวิร์กและอื่น ๆ รวมถึงแนวปฏิบัติที่ดีที่สุด


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

คำตอบ:


24

การวางแผนความจุดิสก์และ RAM

การวางแผนความจุของดิสก์และหน่วยความจำสำหรับเซิร์ฟเวอร์ฐานข้อมูลเป็นงานศิลปะสีดำ มากขึ้นดีกว่า เร็วกว่าดีกว่า

ตามแนวทางทั่วไปฉันขอเสนอสิ่งต่อไปนี้:

  • คุณต้องการพื้นที่ดิสก์มากขึ้นกว่าที่คุณจะเคยต้อง
    ใช้การประเมินพื้นที่ดิสก์ที่คุณต้องการในอีก 3-5 ปีข้างหน้าให้ดีที่สุดแล้วเพิ่มเป็นสองเท่า
  • คุณต้องการให้แรมเพียงพอที่จะเก็บดัชนีฐานข้อมูลของคุณในหน่วยความจำจัดการคิวรี่ที่ใหญ่ที่สุดของคุณอย่างน้อยสองครั้งและยังมีพื้นที่เหลือพอสำหรับแคชดิสก์ระบบปฏิบัติการที่ดี
    ขนาดดัชนีจะขึ้นอยู่กับฐานข้อมูลของคุณและทุกอย่างอื่นขึ้นอยู่กับชุดข้อมูลและโครงสร้างแบบสอบถาม / ฐานข้อมูลของคุณ ฉันจะเสนอ "ข้อเสนอแนะอย่างน้อย 2 เท่าของตารางที่ใหญ่ที่สุดของคุณ" แต่โปรดทราบว่าข้อเสนอแนะนี้แบ่งย่อยลงในการดำเนินการด้านคลังข้อมูลขนาดใหญ่จริง ๆ ซึ่งตารางที่ใหญ่ที่สุดสามารถมีได้หลายสิบหรือหลายกิกะไบต์

ผู้จำหน่ายฐานข้อมูลทุกรายมีคำแนะนำในการปรับประสิทธิภาพดิสก์ / หน่วยความจำ / เคอร์เนลระบบปฏิบัติการของคุณ - ใช้เวลากับเอกสารนี้ก่อนการปรับใช้ มันจะช่วย.


การเปรียบเทียบภาระงานและการวางแผนกำลังการผลิต

สมมติว่าคุณยังไม่ได้ปรับใช้ ...

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

ขณะนี้มีเกณฑ์มาตรฐานแบบดิบที่ABSOLUTELY MEANINGLESSให้เราพิจารณาวิธีการเปรียบเทียบที่สมจริงยิ่งขึ้น: โหลดสคีมาฐานข้อมูลของคุณและเขียนโปรแกรมที่เติมข้อมูลด้วยข้อมูลจำลองจากนั้นเรียกใช้คิวรีแอปพลิเคชันของคุณกับข้อมูลนั้น
เกณฑ์มาตรฐานนี้มีสามสิ่งสำคัญ: 1. เซิร์ฟเวอร์ฐานข้อมูล (ฮาร์ดแวร์) 2. เซิร์ฟเวอร์ฐานข้อมูล (ซอฟต์แวร์) 3. การออกแบบฐานข้อมูลของคุณและวิธีการโต้ตอบกับ (1) และ (2) ข้างต้น

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

ผลลัพธ์ของการวัดประสิทธิภาพเหล่านี้เป็นมุมมองในอุดมคติของฐานข้อมูลของคุณ เพื่อความปลอดภัยสมมติว่าคุณจะได้รับ 50-70% ของประสิทธิภาพการทำงานนี้ในสภาพแวดล้อมการผลิตของคุณเท่านั้น (ที่เหลือเป็นเบาะที่จะช่วยให้คุณจัดการกับการเติบโตที่ไม่คาดคิดความล้มเหลวของฮาร์ดแวร์การเปลี่ยนแปลงปริมาณงาน ฯลฯ )


สายไปแล้ว! มันอยู่ในการผลิต!

เมื่อระบบของคุณใช้งานจริงมันก็สายเกินไปที่จะ "สร้างมาตรฐาน" - คุณสามารถเปิดการบันทึกแบบสอบถาม / กำหนดเวลาสั้น ๆ และดูว่าจะใช้เวลาดำเนินการนานเท่าใดและคุณสามารถเรียกใช้คำสั่ง "ทดสอบความเครียด" กับชุดข้อมูลขนาดใหญ่ได้ ชั่วโมง คุณยังสามารถดูการใช้งาน CPU, RAM และ I / O (แบนด์วิดท์ของดิสก์) ของระบบเพื่อรับทราบว่ามันมีการโหลดมากเพียงใด
น่าเสียดายที่สิ่งเหล่านี้จะทำให้คุณรู้ว่าระบบกำลังทำอะไรอยู่และแนวคิดที่คลุมเครือว่าใกล้ถึงความอิ่มตัวแล้ว
นั่นนำเราสู่ ...


การตรวจสอบอย่างต่อเนื่อง

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

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


หมายเหตุ: นี่เป็นคู่มือระดับสูงและทั่วไปมากเพื่อปรับขนาดฮาร์ดแวร์ฐานข้อมูลของคุณ หากคุณยังไม่แน่ใจเกี่ยวกับวิธีการตรวจสอบว่าระบบเฉพาะตรงกับความต้องการของคุณคุณควรพูดคุยกับผู้เชี่ยวชาญฐานข้อมูล
นอกจากนี้ยังมีเว็บไซต์ Stack แลกเปลี่ยนทุ่มเทมาโดยเฉพาะเพื่อการจัดการฐานข้อมูล: dba.stackexchange.com ค้นหาที่เก็บคำถามของพวกเขาหรือเรียกดูแท็กเฉพาะสำหรับกลไกจัดการฐานข้อมูลของคุณเพื่อรับคำแนะนำเพิ่มเติมเกี่ยวกับการปรับแต่งประสิทธิภาพ


1
นอกจากนั้นในปัจจุบันคุณสามารถใช้ SSD สำหรับการสลับ / การดำเนินการของดิสก์ได้ ที่จะเพิ่มความเร็วคิวรีที่ใช้ตารางชั่วคราวขนาดใหญ่บนดิสก์ ดังนั้นการเพิ่ม SSD มากขึ้นจึงเป็นความคิดที่ดีมาก
ปีเตอร์

2
@ ปีเตอร์ฉันไม่แนะนำให้ใช้ SSD สำหรับพื้นที่สว็อป (ถ้าคุณกำลังแลกเปลี่ยนอย่างจริงจังมีอัตราการปั่นสูงมาก) แม้ว่าจะมี SSD ที่ใหญ่พอและการสึกหรอที่ดีอาจทำให้อายุการใช้งานของเครื่องยาวนานขึ้น ฉันเคยเห็น SSD ที่ใช้สำหรับพื้นที่ตาราง temp ที่มีผลลัพธ์ที่ดี
voretaq7

โปรดทราบว่าคำแนะนำในความคิดเห็นเกี่ยวกับ SSD มีอายุ 7 ปีแล้ว ที่เก็บข้อมูลทุกแห่งที่มีฐานข้อมูลบนเซิร์ฟเวอร์ฐานข้อมูลของคุณควรเป็น SSD ในปี 2019 หรือใหม่กว่า
Mark Henderson

1

โดยทั่วไปคุณต้องใช้กรณีใช้จริงเพื่อทดสอบประสิทธิภาพ แนวทางปฏิบัติที่ดีที่สุดคือการเกี่ยวข้องกับผู้พัฒนาแอปพลิเคชันและผู้ใช้ปลายทาง

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

จากนั้นสร้างฝั่งไคลเอ็นต์ เครื่องทางกายภาพเดียวมักจะไม่เพียงพอที่จะสร้างภาระการผลิต

จากนั้นยิงมันขึ้นมาประเมินค่าเสริมและทดสอบอีกครั้ง

คุณจะประหลาดใจเมื่อคอขวดเกิดขึ้น

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