ทำไมไม่แบ่งพาร์ติชัน?


10

เมื่อใดที่ไม่ต้องการแบ่งพาร์ติชันฐานข้อมูล (คิดMySQL แบ่ง )

ในกรณีของฉัน

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

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

อัปเดต - ฉันเลือกคำตอบของ zgguy แต่ทราบว่าฉันได้เพิ่มคำตอบของตัวเองพร้อมกับผลการวิจัยของตัวเองรวมถึงลิงค์ไปยังคำตอบที่ดีจริงๆสำหรับคำถามที่คล้ายกันซึ่งเป็นประโยชน์อย่างมากสำหรับฉัน

คำตอบ:


5

ไม่มี bullet เงินสำหรับปัญหาประสิทธิภาพการทำงานและการแบ่งพาร์ติชันไม่ใช่หนึ่งเดียวกัน

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

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

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


ดังนั้นการค้นหาคีย์หลักที่ไม่ซ้ำกัน / จะไม่เห็นการปรับปรุงมาก (ถ้ามี?) เพราะดัชนี PK เร็วขึ้น? สิ่งนี้ทั่วกระดานหรือไม่ - มีบางครั้งที่ดัชนี PK ช้ากว่าหรือไม่? จะเกิดอะไรขึ้นถ้าการค้นหาถูกเบี่ยงเบนไปสู่ ​​PKs ที่เพิ่งเพิ่มเข้าไป พาร์ติชันจะยึดตาม PK (ฉันคิดว่าคีย์พาร์ติชัน algo จะต้องเป็นโมดูลัสหรือคล้ายกันและไม่แฮชใช่ไหม?) ที่ทำให้กิจกรรมส่วนใหญ่ตีเพียงพาร์ติชันเดียวจะมีประโยชน์หรือไม่
chell

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

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

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

ขออภัยไม่สามารถไปที่การแลกเปลี่ยนสแต็กเมื่อเร็ว ๆ นี้ คำตอบที่คุณเชื่อมโยงนั้นยอดเยี่ยม ฉันเชื่อว่ามันตอบคำถามของคุณทั้งสอง
zgguy

2

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

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

ฉันยังเห็นพูดถึงว่า MySQL ไม่เคยทำสิ่งใดขนาน (จะดีที่จะเห็นลิงก์หรือคำอธิบายเพิ่มเติมเกี่ยวกับที่)

ไม่เคยเห็นใครพูดหรือไม่เขียนกิจกรรมเพิ่มข้อควรพิจารณาที่แตกต่างกัน


ฉันไม่คิดว่าการเขียนเปลี่ยนคำตอบของคุณ คุณพูดถึงกรณีการใช้ 2 จาก 4 ที่ฉันพบ ยังคงไม่มีการขนานกันแม้ใน 8.0
Rick James

1

สิ่งแรกที่มาคิดเป็นพาร์ทิชันการตัดแต่งกิ่ง ; หากนั่นไม่ใช่สิ่งที่แบบสอบถามของคุณสามารถใช้ได้

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

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


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