// 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 เมื่อต้องการบังคับ orderThread Pool
MariaDB มี Thread Pool ฟรี (MySQL Enterprise เท่านั้น) — ลด overhead สำหรับ high-concurrency environments