คุณปรับแต่ง MySQL สำหรับภาระงาน InnoDB จำนวนมากได้อย่างไร


39

สมมติว่าระบบ OLTP ที่ใช้งานจริงนั้นมีตาราง InnoDB เป็นส่วนใหญ่

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

เกร็ดเล็กเกร็ดน้อยที่มีรายละเอียดเกี่ยวกับstatusตัวแปรเฉพาะและการวินิจฉัยจะได้รับการชื่นชม


2
คำถามนี้กว้างมาก คุณแบ่งคำถามเป็น 4 ข้อได้ไหม (และแม้กระทั่งคำถามสัญลักษณ์แสดงหัวข้อย่อยของคุณอย่างกว้างขวางอย่างไม่น่าเชื่อคุณสามารถยกตัวอย่างพวกเขาด้วยปัญหาเฉพาะของคุณได้อย่างไร)
ไบรอัน Ballsun-Stanton

คำตอบ:


16

นี่เป็นบทความที่ดีเกี่ยวกับการปรับ InnoDB จาก Jenny Chen ของ Sun เธอบล็อกมากเกี่ยวกับ MySQL บางส่วนเป็นเฉพาะ Solaris (เช่นใช้DTrace ) แต่บล็อกทั้งหมดเต็มไปด้วยเกร็ดน่ารู้ที่น่าสนใจ


4
เจนนี่เฉินคือใคร?
Pacerier

19

ที่น่าสนใจใน MySQL 5.5 คุณสามารถมีพูลบัฟเฟอร์ Innodb หลาย ๆ ตัว

พารามิเตอร์ที่คุณใส่ใจคือ

ในเวลาประมาณหนึ่งเดือนฉันมีกำหนดที่จะใช้พูลบัฟเฟอร์ 112 innodb สำหรับลูกค้า ฉันจะให้คุณรู้ว่ามันไปอย่างไร

อัพเดท 2011-02-27 21:57 EDT

ฉันพบว่าค่าสูงสุดสำหรับ innodb_buffer_pool_instances เป็น 64 ฉันตัดสินใจที่จะกำหนดค่า 144 GB ดังนั้นฉันจึงตั้งค่า innodb_buffer_pool_instances เป็น 18 และ innodb_buffer_pool_size เป็น 8 ฉันกำลังโหลดเซิร์ฟเวอร์ที่มี 450GB

อัพเดท 2011-04-28 13:44 EDT

ฉันลองใช้ InnoDB Buffer Pool หลายตัว มีการล็อกเธรดและการโต้แย้งมากเกินไป ฉันเปลี่ยนเป็นบัฟเฟอร์ 162GB เดียว + การตั้งค่า read_io_threads และ write_io_threads เป็น 64 (ค่าสูงสุด) วิธีนี้ใช้ได้ผลดีกว่า

อัพเดท 2012-07-03 17:27 EDT

ฉันเรียนรู้สิ่งที่น่าอัศจรรย์เกี่ยวกับ MySQL หากคุณจัดสรร InnoDB Buffer แบบ monolithic เดียวที่ใหญ่กว่านั้นTotal ที่ถูกติดตั้งหารด้วยจำนวน CPU ทางกายภาพคุณจะปลุกระดมระบบปฏิบัติการให้แลกเปลี่ยนหน่วยความจำในช่วงเวลาปกติเนื่องจาก InnoDB Buffer Pool เต็ม ตัวเลือกของ MySQL 5.5 ที่รู้จักกันในชื่อinnodb_buffer_pool_instancesสามารถใช้แบ่งพูลบัฟเฟอร์ได้ เมื่อวานนี้ฉันใช้สิ่งนี้อย่างถูกต้องกับลูกค้าที่ฉันพูดถึงในคำตอบของฉันเมื่อปีที่แล้ว ฉันยังมี 162GB สำหรับบัฟเฟอร์พูลของลูกค้า ฉันได้ตั้งค่าตัวเลือก innodb_buffer_pool_instances ของเซิร์ฟเวอร์เป็น 2 เพราะเซิร์ฟเวอร์ DB แต่ละตัวเป็น hexacore คู่ ฉันกำลังคิดที่จะตั้งค่าเป็น 12 แต่จากนั้นเพื่อนร่วมงานแสดงบล็อกให้ฉันจาก Jeremy Cole เกี่ยวกับ MySQL และ Swappiness. หลังจากอ่านเสร็จฉันก็นำไปปฏิบัติใช้ทันทีสำหรับลูกค้า ฉันรันคำสั่งนี้

numactl --hardware

ฉันเห็นการแมปขนาด 192GB ของเซิร์ฟเวอร์ RAM เป็น 96GB กับแต่ละแกนหลัก ดังนั้นฉันจึงตั้งค่า innodb_buffer_pool_instances เป็น 2 ตอนนี้ทุกอย่างดูดี ฉันจะอัปเดตคำตอบของฉันเพื่อดูว่าสิ่งนี้มีผลต่อการเปลี่ยนหน่วยความจำสำหรับ 2 montns ต่อไปอย่างไร


สวัสดี @RolandoMySQLDBA จากบล็อกของ jeremy ฉันไม่สามารถหาการเชื่อมต่อหรือข้อสรุปใด ๆ ที่ตั้งอินสแตนซ์ของ Innodb เท่ากับจำนวนฟิสิคัลซีพียูที่จะช่วยแก้ปัญหาการสลับ อินสแตนซ์ของ Innodb หลายอันจะสร้างความสมดุลระหว่างโหนดหน่วยความจำโดยอัตโนมัติโดยไม่ต้องตั้งค่า numactl --interleave = all ล้างแคชบัฟเฟอร์ของ Linux หรือบังคับให้ระบบปฏิบัติการจัดสรรพูลบัฟเฟอร์ของ InnoDB หรือไม่
Wen Ren

@Rolando, Nice 2x 100 GB ram ลูกค้าคนไหน
Pacerier

ฉันคิดว่ามีการใช้งาน "อินสแตนซ์": (หมายเลขบล็อก) MOD (อินสแตนซ์จำนวน) -> (อินสแตนซ์ใดที่จะวางบล็อก) นั่นไม่เกี่ยวข้องกับ NUMA
Rick James

7

คุณอาจต้องการสำรวจแหล่งข้อมูลต่อไปนี้:


4

ก่อนอื่นให้เพิ่มค่าเริ่มต้น InnoDB ขนาดบัฟเฟอร์ใน my.cnf (ฉันเชื่อว่าค่าเริ่มต้นเป็น 8MB)

คุณควรตั้งค่านี้เป็น 75% ของขนาด RAM (โดยทั่วไป)


-1

พารามิเตอร์การกำหนดค่าใดที่คุณมักเปลี่ยนจากค่าเริ่มต้น

การกำหนดค่าหน่วยความจำ


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

การกำหนดค่า mysql นอกกรอบนั้นจัดทำขึ้นสำหรับการตั้งค่าตาราง myisam อย่างรวดเร็ว (เนื่องจากผู้ใช้ส่วนใหญ่ใช้วิธีนั้น) นอกจากนั้นเพื่อให้เซิร์ฟเวอร์ที่ได้รับการปรับให้เหมาะสมที่สุดคุณควรเลือกเอ็นจิ้น "หลัก" เพื่อใช้งาน (innodb หรือ mysql) ยากที่จะกำหนดค่าฐานข้อมูลเพื่อประสิทธิภาพที่ยอดเยี่ยมสำหรับตู้เครื่องยนต์, mysql มีบัฟเฟอร์แยกต่างหากสำหรับเครื่องยนต์ myisam และ innodb
sbczk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.