Wordpress Database Slow - ฉันควรเปลี่ยนมาใช้ InnoDB หรือไม่


12

ฉันมีเว็บไซต์ WordPress ที่มีโพสต์มากกว่า 10k และสิ่งต่างๆเริ่มช้าลงทุกครั้งที่ฉันเพิ่มและแก้ไขโพสต์ หน้าโหลดดีและรวดเร็วสำหรับผู้ใช้พร้อมกับรายการโพสต์ของผู้ดูแลระบบ แต่เมื่อมีการเขียนหรืออัปเดตเซิร์ฟเวอร์จะไปที่ CPU 100% และใช้เวลานาน (บางครั้งอาจนานกว่า 60 วินาทีของ PHP)

ฉันคิดว่านี่น่าจะเกี่ยวข้องกับการล็อกระดับตารางของ MyISAM และฉันคิดว่าจะเปลี่ยนเป็น InnoDB ความหมายของการทำเช่นนี้มีอะไรบ้าง

สถิติบางอย่าง:

select  - per hour ~22k
update  - per hour ~7.6k
set option  - per hour ~7k

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

ขอบคุณ

แก้ไข : ฉันได้พบหนึ่งในปัญหาสำคัญที่ทำให้เกิดความเชื่องช้ามันคือ YARPP (ยังมีปลั๊กอินโพสต์อื่นที่เกี่ยวข้อง) ที่สร้าง "ความสัมพันธ์" ใหม่ทุกครั้งและดูเหมือนว่าจะเกิดจากแท็ก 2k + ที่เรามี ฉันปิดตัวเลือก "พิจารณาแท็ก" และมันเร่งความเร็วขึ้นอย่างมาก

นอกจากนี้ปลั๊กอินอื่น ๆ ที่สร้างสิ่งใหม่อาจทำให้เกิดปัญหาประเภทนี้เช่นปลั๊กอิน XML sitemap บางตัว

ดังนั้นปัญหาทันทีของฉันได้รับการแก้ไขแม้ว่าฉันจะยังคงชอบที่จะได้ยินคำตอบที่ดีกับ InnoDB vs MyISAM สำหรับ Wordpress!

คำตอบ:


11

ฉันจะเปลี่ยนมาใช้ InnoDB แน่นอน ล็อคตาราง / แถวล็อคได้รับการกล่าวถึงมานานแล้วโดยหลาย ฉันจะเลือก InnoDB เสมอ อย่างไรก็ตามมีอีกเหตุผลที่ลึกซึ้งในการเลือก InnoDB

ในขณะที่คนส่วนใหญ่โม้ว่า MyISAM เร็วกว่าสำหรับการอ่านคนส่วนใหญ่ลืมว่าแคชจำนวนมากสำหรับ MyISAM ซึ่งเรียกว่าแคชคีย์ (กำหนดโดย key_buffer_size) เพียงแคชหน้าดัชนีจากไฟล์. MII มันไม่เคยแคชหน้าข้อมูล มีสูงสุด 4GB อย่างเป็นทางการในระบบ 32 บิต 8GB นั้นดีที่สุดสูงสุดสำหรับ 64- บิต

InnoDB Buffer Pool แคชข้อมูลและหน้าดัชนี คุณสามารถแคชได้ถึงชุดข้อมูลทั้งหมดใน RAM ทั้งนี้ขึ้นอยู่กับเซิร์ฟเวอร์ที่คุณมี คุณสามารถปรับ InnoDB สำหรับ RAM สูงสุด 80% และ 10% สำหรับ DB Conenctions และปล่อยให้ 10% สำหรับระบบปฏิบัติการ นี้เป็นจริงแม้สำหรับระบบปฏิบัติการที่แตกต่างกัน

ฉันได้แนะนำสิ่งเหล่านี้ให้กับลูกค้าของ Drupalด้วยความสำเร็จที่ยิ่งใหญ่ มันใช้กับ Wordpressเช่นกัน ฉันได้ให้การสนับสนุนฐานข้อมูลสำหรับลูกค้าด้วย WordPress การปรับปรุงเหมือนกัน

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


6

InnoDB อาจไม่ช่วยคุณ - การล็อกระดับหน้า / แถวช่วยลดความขัดแย้ง แต่ก็ไม่รู้สึกว่าเป็นปัญหาของคุณ

มีหลายสิ่งที่แนะนำ MyISAM นั้นช้ากว่า InnoDB ในสถานการณ์บล็อกเฉลี่ย (อ่านอีกกว่าการเขียน)

ก่อนทำการเปลี่ยนคุณควรทำสิ่งต่อไปนี้อย่างน้อยที่สุด

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

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

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