ในระบบ PrestaShop + MySQL + Docker ปัญหา disk เต็มและ database crash มักไม่ได้เกิดจาก “ทราฟฟิกเยอะอย่างเดียว” แต่เกิดจาก ระบบเก็บสถิติ (Statistics Module) + Logging + MySQL binlog ทำงานพร้อมกันจนข้อมูลโตแบบควบคุมไม่ได้
🚨 จุดเริ่มต้นของปัญหา
อาการที่เกิดขึ้น:
- MySQL ขึ้น error Out of disk space
- InnoDB redo log เขียนไม่ได้
- ps_connections_source โตผิดปกติ
- binlog ขนาด ~1GB ต่อไฟล์
- DB crash ตอน startup
💣 สาเหตุหลัก (อัปเดตเพิ่ม)
1. 📊 PrestaShop Statistics Module (ตัวสำคัญมาก)
PrestaShop มีระบบเก็บสถิติหลายตัว เช่น:
- ps_metrics
- ps_statsdata
- ps_visitors
- ps_connections
- ps_connections_source
👉 ทุก module จะ:
- log ทุก page view
- track referrer
- เก็บ session + IP + URL
- เขียนลง database ตลอดเวลา
2. 📈 ปัญหาคือ “ทุก visit = หลาย DB writes”
ตัวอย่าง 1 page visit:
- insert connection
- insert source
- update visitor stats
- update dashboard metrics
👉 1 คน = หลาย query
👉 1,000 visitors = หลายหมื่น writes
3. 🤖 Bot traffic ทำให้หนักขึ้น
- Google bot
- SEO crawler
- spam bot
👉 ทำให้ stats โตเร็วมากแม้ไม่มีลูกค้าจริง
4. 💥 MySQL binlog + stats = exponential growth
ทุก write จะถูก:
- เขียน binlog
- เขียน redo log
- กระตุ้น temp table usage
👉 ส่งผลให้ disk เต็มเร็วมาก
🛠️ วิธีแก้ (สำคัญที่สุด: ปิด Stat Module)
🟢 1. ปิด Stats ผ่าน Back Office
ไปที่:
👉 Advanced Parameters → Administration
แล้วปิด:
❌ Save page views
❌ Save visitor origin
❌ Save visits
❌ Enable statistics (ถ้ามี)
🟢 2. Disable Statistics Modules (สำคัญมาก)
ไปที่:
👉 Modules → Module Manager
ค้นหาและปิด/ถอน:
- ps_metrics (PrestaShop Metrics)
- ps_googleanalytics
- statsdata
- sekeywords
- ps_statstracker
- dashactivity
- dashtrends
👉 แนะนำ:
- ถ้าไม่ใช้ → Uninstall เลยดีที่สุด
- ถ้าจำเป็น → Disable อย่างเดียว
🟢 3. ปิด Connections Tracking (ตัวหลักของ DB บวม)
รัน SQL:
TRUNCATE ps_connections;
TRUNCATE ps_connections_source;
👉 ตารางนี้คือ “ตัวกิน disk ตัวจริง”
🟢 4. ปิด Stats Cron Job (ถ้ามี)
เช็ค:
/modules/ps_metrics/cron/
/modules/statsdata/
👉 disable cron เช่น:
- refresh metrics
- analytics sync
- dashboard aggregation
🟢 5. ปิด Auto Stats ใน config (ระดับลึก)
ในบาง version:
define('_PS_STATS_', false);
หรือ disable module hooks:
- actionPageView
- actionCustomerAccountAdd
- actionCartSave
⚙️ ผลลัพธ์หลังปิด Stats Module
หลังปิดจะได้:
- ลด DB write 50–90%
- binlog โตช้าลงมาก
- ลด InnoDB load
- disk usage เสถียรขึ้น
- MySQL crash ลดลงอย่างชัดเจน
🧠 Engineer Insight
ปัญหานี้ไม่ใช่ “เว็บคนเข้าเยอะ”
แต่คือ:
❗ PrestaShop Stats = Real-time database logging system ที่ไม่มี throttling
👉 ถ้าไม่ปิด = ระบบจะโตจน disk เต็มเสมอ
🛡️ Best Practiceสำหรับ Production
❌ ห้ามใช้:
- internal stats module
- DB-based analytics
- connection tracking แบบ realtime
✔ ควรใช้:
- Google Analytics / Matomo
- CDN logs (Cloudflare)
- external monitoring
🎯 สรุปสุดท้าย
✔ ปัญหาหลักไม่ได้มาจากผู้ใช้
✔ มาจาก Statistics Module + Logging system
✔ ทุก visit = database explosion
✔ แก้ถาวรต้อง “ปิด stats + clean tables + limit MySQL logging”

฿1,278.57
