ปัญหา Query หนักใน plugin post-views ของ WordPress

วันก่อนเซิร์ฟเวอร์เครื่องหนึ่งเกิดปัญหาโหลดขึ้นสูงอย่างหนัก จึงได้เข้าไปตรวจสอบ

พบว่าสาเหตุเกิดจาก เว็บไซต์ลูกค้ารายหนึ่ง ใช้ WordPress และมีคนเข้าจำนวนมาก เค้าได้ติดตั้ง plugin ที่มีชื่อ post-views เข้าใจว่ามันจะทำการนับ stats และแสดงรายการ posts ที่มีคนเข้าชมเยอะ ไรประมาณนั้น

ใน Query ที่ plugin มันเขียน มันใช้ SELECT ใหม่ทุก โดยใช้ WHERE ระบุเป็นเงื่อนไขเวลาที่ละเอียดเป็นวินาทีเลย.  ผมเลยลองเข้าไปแก้ให้ Query มัน WHERE โดยใช้เวลาเป็น floor ที่ interval=20 minutes  เพราะตอนแรกเดาว่ามันน่าจะได้ประโยชน์จาก MySQL query cache  แต่ปรากฎว่าไม่ช่วยแฮะ ไม่รู้ว่า result มันขนาดเกิน cache limit หรือเปล่า

ผมเลยแก้ให้มันเขียน result ลงไฟล์แทน โดยใช้ serialize

ต้องสร้างโฟลเดอร์ /wp-content/plugins/post-views/cache/ และเปิดสิทธิ์ให้ php เขียนไฟล์ในโฟลเดอร์นี้ได้ด้วย

อันนี้เป็นไฟล์ที่ผมแก้แล้ว  แก้ 2 จุดครับ ประมาณบรรทัดที่ 2243 และ 2412 ครับ (ดาวน์โหลด post-views.php)