ปรับแต่ง Database WordPress ให้เร็วขึ้นด้วย MySQL Tuning บน Cloud VPS

ทำไม MySQL Tuning ถึงสำคัญสำหรับ WordPress?

WordPress เก็บข้อมูลทุกอย่างไว้ใน MySQL Database ตั้งแต่บทความ ความเห็น ไปจนถึงการตั้งค่าต่างๆ เมื่อเว็บไซต์มีขนาดใหญ่ Database ที่ไม่ได้ปรับแต่งจะกลายเป็นคอขวดที่ทำให้เว็บช้าลงอย่างเห็นได้ชัด การทำ MySQL Tuning บน Cloud VPS จะช่วยให้ WordPress Query ข้อมูลได้เร็วขึ้น ลด Response Time และรองรับผู้ใช้งานได้มากขึ้น

ตรวจสอบสถานะ MySQL ปัจจุบัน

ก่อนเริ่มปรับแต่ง ควรตรวจสอบสถานะ MySQL ปัจจุบันก่อน เพื่อทราบว่าจุดไหนที่ต้องปรับแต่ง:

-- ตรวจสอบสถานะทั่วไป
SHOW GLOBAL STATUS;

-- ตรวจสอบตัวแปรการตั้งค่า
SHOW GLOBAL VARIABLES;

-- ตรวจสอบ Slow Query
SHOW VARIABLES LIKE 'slow_query%';
SHOW VARIABLES LIKE 'long_query_time';

หรือใช้เครื่องมือ MySQLTuner เพื่อวิเคราะห์การตั้งค่าอัตโนมัติ:

wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
perl mysqltuner.pl

ปรับแต่ง InnoDB Buffer Pool Size

InnoDB Buffer Pool เป็นพื้นที่ RAM ที่ MySQL ใช้เก็บ Cache ข้อมูลและ Index ยิ่งมีขนาดใหญ่ ยิ่ง Query ได้เร็ว เพราะไม่ต้องอ่านจาก Disk บ่อย:

# แก้ไขไฟล์ /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
# ตั้งค่าประมาณ 70-80% ของ RAM ที่มี (สำหรับ VPS 4GB RAM)
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 2
innodb_log_file_size = 512M
innodb_log_buffer_size = 64M

สำหรับ Cloud VPS ของ de.co.th ที่มี RAM 4GB แนะนำตั้งค่า Buffer Pool ที่ 2-3GB เพื่อเหลือ RAM สำหรับ PHP, Nginx และ OS

ปรับแต่ง Query Cache และ Thread Cache

สำหรับ MySQL 5.7 ยังสามารถใช้ Query Cache ได้ (MySQL 8.0 ยกเลิกแล้ว):

[mysqld]
# Query Cache (สำหรับ MySQL 5.7)
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 2M

# Thread Cache
thread_cache_size = 16
thread_stack = 256K

# Connection Settings
max_connections = 150
wait_timeout = 300
interactive_timeout = 300

เปิดใช้งาน Slow Query Log

Slow Query Log ช่วยให้คุณระบุ Query ที่ใช้เวลานาน เพื่อนำไป Optimize:

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 1
log_queries_not_using_indexes = 1

วิเคราะห์ Slow Query ด้วย mysqldumpslow:

mysqldumpslow -s t -t 10 /var/log/mysql/slow-query.log

Optimize WordPress Database Tables

WordPress สร้าง Overhead ใน Database เมื่อใช้งานไปนานๆ ควร Optimize เป็นประจำ:

# Optimize ทุก Table ใน Database
mysqlcheck -o wordpress_db -u root -p

# หรือ Optimize เฉพาะ Table ที่มี Overhead
mysql -u root -p -e "OPTIMIZE TABLE wordpress_db.wp_posts;"
mysql -u root -p -e "OPTIMIZE TABLE wordpress_db.wp_postmeta;"
mysql -u root -p -e "OPTIMIZE TABLE wordpress_db.wp_options;"

ลบ Transients และ Revisions ที่ไม่จำเป็น

WordPress เก็บ Transients (ข้อมูลชั่วคราว) และ Post Revisions จำนวนมาก ซึ่งทำให้ Database บวมโดยไม่จำเป็น:

-- ลบ Expired Transients
DELETE FROM wp_options WHERE option_name LIKE '%_transient_%' AND option_name LIKE '%_timeout_%' AND option_value < UNIX_TIMESTAMP();

-- จำกัดจำนวน Revisions ใน wp-config.php
define('WP_POST_REVISIONS', 5);

-- ลบ Revisions เก่า
DELETE FROM wp_posts WHERE post_type = 'revision';

เพิ่ม Index ใหม่สำหรับ WordPress Database

เพิ่ม Index ให้เคลัมน์ที่ WordPress ใช้ Query บ่อย เพื่อเพิ่มความเร็ว:

-- เพิ่ม Index สำหรับ wp_options
ALTER TABLE wp_options ADD INDEX autoload_idx (autoload);

-- เพิ่ม Index สำหรับ wp_postmeta
ALTER TABLE wp_postmeta ADD INDEX meta_value_idx (meta_value(50));

ตั้งค่า MySQL สำหรับ Cloud VPS ของ de.co.th

สำหรับ Cloud VPS จาก de.co.th ที่รัน WordPress ขอแนะนำการตั้งค่าที่เหมาะสมตาม RAM:

# สำหรับ VPS 2GB RAM
innodb_buffer_pool_size = 1G
max_connections = 100

# สำหรับ VPS 4GB RAM
innodb_buffer_pool_size = 2G
max_connections = 150

# สำหรับ VPS 8GB RAM
innodb_buffer_pool_size = 5G
max_connections = 200

หลังจากแก้ไขการตั้งค่า อย่าลืม Restart MySQL:

sudo systemctl restart mysql
sudo systemctl status mysql

สรุป

การทำ MySQL Tuning เป็นขั้นตอนสำคัญในการเพิ่มความเร็ว WordPress บน Cloud VPS โดยจุดสำคัญคือการปรับ InnoDB Buffer Pool Size ให้เหมาะกับ RAM ที่มี เปิดใช้งาน Slow Query Log เพื่อหา Query ที่ช้า และ Optimize Database Tables เป็นประจำ ด้วย Cloud VPS จาก de.co.th ที่ใช้ MySQL SSD NVMe และ RAM สูง คุณจะได้ประสิทธิภาพ MySQL ที่ดีที่สุดสำหรับ WordPress ของคุณ