Tối ưu MySQL trên VPS
Tuần vừa rồi nhận 1 dự án tối ưu và nâng cấp code cho 1 đơn vị. Tiện chia sẻ 1 vài kinh nghiệm cũng như lưu lại sau này dùng...
Case study như sau
Tối ưu dựa trên MySQLtuner
Đây là phần mềm khá nổi tiếng nó giúp ta có những đề xuất và phương án tối ưu thích hợp cho file config của mysql.
Cách cài cũng khá đơn giản.
Ví dụ đây là file config của VPS ram 1gb mà mình cấu hình.
Kết quả: Hệ thống chạy bon, nhờ tối ưu hóa cache SQL mà tốc độ được tăng lên đáng kể.
Case study như sau
Sau khi cố gắng thực hiện nhét mysql_free_result và mysql_close vào code nhưng không khả quan lắm. Mình bắt đầu tính đến chuyện tối ưu câu lệnh MySQL.
- VPS Nhật, RAM 1gb.
- Data nặng >200mb với gần 1 triệu records.
- Lượt truy cập realtime thường xuyên theo google analytics là >200 connect.
- Cá biệt có lúc lên đến gần 500
- Code khá cũ kĩ và chưa tối ưu lắm.
Tối ưu dựa trên MySQLtuner
Đây là phần mềm khá nổi tiếng nó giúp ta có những đề xuất và phương án tối ưu thích hợp cho file config của mysql.
Cách cài cũng khá đơn giản.
cd /usr/local/binKhi chạy, chỉ cần vào thư mục và chạy với cú pháp
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
chmod +x mysqltuner.pl
./mysqltuner.pl
/usr/local/bin/mysqltuner.plSau đó nhập username và password mysql vào, hệ thông sẽ tự động phân tích và đưa ra những chỉ dẫn phù hợp cho hệ thống.
Ví dụ đây là file config của VPS ram 1gb mà mình cấu hình.
[mysqld]Sau khi hoàn thành các bước trên, có thể serivce mysqld restart để hệ thống tiếp nhận cấu hình.
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
local-infile=0
long_query_time=1
log-slow-queries=/var/log/slow
#ignore_builtin_innodb
skip-innodb
default_storage_engine=MyISAM
skip-external-locking
query_cache_limit=1M
query_cache_size=32M ## 32MB for every 1GB of RAM
max_connections=500
max_user_connections=200
thread_stack=128K
thread_cache_size=16
key_buffer_size=8M # 128MB for every 1GB of RAM
sort_buffer_size=256K # 1MB for every 1GB of RAM
read_buffer_size=256K # 1MB for every 1GB of RAM
join_buffer_size = 256K
read_rnd_buffer_size = 256K
join_buffer=512K
net_buffer_length = 8K
myisam_sort_buffer_size=1M
max_connect_error=20
max_allowed_packet=8M
table_open_cache=256
thread_concurrency=2 ## Number of CPUs x 2
collation-server=utf8_unicode_ci
character_set_server=utf8
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
open_files_limit=8192
[mysqldump]
quick
max_allowed_packet=16M
[mysql]
no-auto-rehash
[mysqlhotcopy]
interactive-timeout
[client]
default-character-set=utf8
Kết quả: Hệ thống chạy bon, nhờ tối ưu hóa cache SQL mà tốc độ được tăng lên đáng kể.