// Performance Tuning

MariaDB Performance Tuning

เทคนิคและการตั้งค่าเพื่อเพิ่มประสิทธิภาพ MariaDB — ตั้งแต่ configuration ไปจนถึง Query Optimization

// Key Parameters

InnoDB Configuration สำคัญ

💡 ตัวแปรที่สำคัญที่สุด

innodb_buffer_pool_size — ตั้งเป็น 70–80% ของ RAM ที่มี นี่คือ tuning ที่ส่งผลมากที่สุดสำหรับ MariaDB InnoDB

# /etc/mysql/mariadb.conf.d/50-server.cnf # InnoDB Buffer Pool — 70-80% of RAM innodb_buffer_pool_size = 4G innodb_buffer_pool_instances = 4 # 1 per GB # Log settings innodb_log_file_size = 512M innodb_log_buffer_size = 64M innodb_flush_log_at_trx_commit = 1 # ACID full # I/O innodb_io_capacity = 2000 # SSD: 2000-5000 innodb_io_capacity_max = 4000 # Thread pool (unique MariaDB feature!) thread_handling = pool-of-threads thread_pool_size = 16 # = CPU cores # Query Cache (disabled in MariaDB 10.6+) query_cache_type = 0 query_cache_size = 0
// Index Strategy

Index Optimization

-- ดู Slow Queries SET GLOBAL slow_query_log = ON; SET GLOBAL long_query_time = 1; -- EXPLAIN query EXPLAIN SELECT * FROM orders WHERE customer_id = 100 AND status = 'paid'; -- EXPLAIN ANALYZE (MariaDB 10.9+) EXPLAIN ANALYZE SELECT * FROM orders WHERE created_at > '2024-01-01';
-- Composite Index สำหรับ multi-column WHERE CREATE INDEX idx_cust_status ON orders(customer_id, status); -- Covering Index CREATE INDEX idx_covering ON orders(customer_id, status, total); -- Prefix Index สำหรับ long VARCHAR CREATE INDEX idx_email ON users(email(50)); -- ดู unused indexes SELECT * FROM information_schema.INDEX_STATISTICS;
// Query Optimization

Query Optimization Tips

📊
ใช้ SELECT column ที่จำเป็น
หลีกเลี่ยง SELECT * — ระบุ columns ที่ต้องการเพื่อลด I/O และทำให้ covering index ทำงานได้
🔗
JOIN Order ที่ถูกต้อง
MariaDB optimizer เลือก join order ได้เอง แต่ใช้ STRAIGHT_JOIN เมื่อต้องการบังคับ order
⏱️
Thread Pool
MariaDB มี Thread Pool ฟรี (MySQL Enterprise เท่านั้น) — ลด overhead สำหรับ high-concurrency environments