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
  1. VPS Nhật, RAM 1gb. 
  2. Data nặng >200mb với gần 1 triệu records.
  3. Lượt truy cập realtime thường xuyên theo google analytics là >200 connect.
  4. Cá biệt có lúc lên đến gần 500
  5. Code khá cũ kĩ và chưa tối ưu lắm.
Sau khi cố gắng thực hiện nhét mysql_free_resultmysql_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.

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/bin
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
chmod +x mysqltuner.pl
./mysqltuner.pl
Khi chạy, chỉ cần vào thư mục và chạy với cú pháp
 /usr/local/bin/mysqltuner.pl
 Sau đó 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]
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
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.

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ể.
post-edit

Không có nhận xét nào :

- Không bình luận các vấn đề to lớn như chính trị và tôn giáo
- Nội dung nên liên quan tới bài viết.
- Hãy đóng góp ý kiến của bạn để Blog hoàn thiện hơn.