เรากำลังใช้งาน LAMP stack ซึ่งรวมถึง MariaDB 10.5.15 บน Centos 7 ซึ่งเป็นเซิร์ฟเวอร์เฉพาะที่มี CPU 4 ตัวและ RAM 8GB
ไม่เคยมีปัญหาเลยจนกระทั่งสองสามสัปดาห์ที่ผ่านมา ซึ่งฉันสังเกตเห็นว่าข้อความค้นหาช้าโดยใช้เวลา 8-9 วินาทีในบันทึกข้อความค้นหาที่ช้า
ข้อความค้นหาเหล่านี้ขัดแย้งกับฐานข้อมูล INNODB หลายฐานข้อมูล แต่มักจะเป็นตารางขนาดใหญ่ (เช่น 10,000+ แถว) มักเกิดขึ้นระหว่างเวลา 6.00 น. ถึง 8.00 น.
ตารางที่มีปัญหามีดัชนี และคำสั่งเดียวกันจะดำเนินการในเวลาน้อยกว่าหนึ่งวินาที
ฉันพบว่าการเข้าสู่ระบบเซิร์ฟเวอร์เวลา 8.00 น. ของวันอาทิตย์และสอบถามตารางขนาดใหญ่เหล่านี้ด้วยคำสั่ง Select อย่างง่าย พวกเขาจะใช้เวลา 8-9 วินาทีในการดำเนินการ จากนั้น ในช่วงเวลาที่เหลือของวัน แม้จะเลยเที่ยงคืนไปแล้วก็ตาม คำถามใดๆ เกี่ยวกับโต๊ะนั้นก็จะดำเนินไปอย่างรวดเร็ว
06.00 - 08.00 น. จะเป็นช่วงเวลาที่สิ่งต่างๆ "ฟื้นคืนชีพ" หลังจากไม่ได้ใช้งานในช่วงหัวค่ำ
ดูเหมือนว่ามีแคชบางประเภทที่กำลังเย็นและจำเป็นต้องอุ่นเครื่อง แต่ฉันไม่แน่ใจว่าทำไมสิ่งนี้จึงเริ่มเกิดขึ้นทันทีหลังจากใช้งานโดยปราศจากปัญหาหลายปี ไม่มีกระบวนการขนาดใหญ่ที่ทำงานบนเซิร์ฟเวอร์ในชั่วข้ามคืนที่ฉันรู้ และเซิร์ฟเวอร์ไม่ได้อยู่ภายใต้การโหลดเมื่อสิ่งนี้เกิดขึ้น
เราตรวจสอบโหลดของ CPU ทุกวันตลอด 24 ชั่วโมง และตรวจสอบจำนวนการเชื่อมต่อกับ Apache และ MariaDB เป็นระยะ ซึ่งยังคงอยู่ในระดับต่ำตลอดทั้งวัน โดยทั่วไปจะมีหน่วยความจำว่างประมาณ 3GB ไม่รวมบัฟเฟอร์และแคช
แก้ไข
น่าอายที่ฉันค้นพบว่าการสืบค้นช้าที่เป็นปัญหานั้นไม่ได้ใช้ดัชนีและกำลังทำการสแกนตารางทั้งหมด การสอบถามเริ่มต้นอาจใช้เวลาหลายวินาที จากนั้นในช่วงที่เหลือของวัน แม้แต่การสแกนตารางแบบเต็มก็ใช้เวลาน้อยกว่าหนึ่งวินาที ฉันคิดว่านี่เป็นดิสก์แคชบางประเภทที่จะเย็นในชั่วข้ามคืน
แม้ว่าอาจดูเหมือนไม่ใช่เรื่องผิดปกติที่การสแกนตารางแบบเต็มจะมีปัญหาด้านประสิทธิภาพ แต่ก็ยังดูแปลกที่สิ่งนี้กลายเป็นปัญหาในทันที