Để cấu hình MariaDB 11 server để đáp ứng 10.000 học viên truy cập Moodle, bạn cần điều chỉnh một số thông số quan trọng trong file cấu hình MariaDB (my.cnf
hoặc my.ini
tùy thuộc vào hệ điều hành của bạn). Dưới đây là các bước và khuyến nghị cụ thể:
Lưu ý quan trọng trước khi bắt đầu:
mysqltuner
, pt-mysql-summary
, Percona Monitoring and Management - PMM
, hoặc các công cụ giám sát hệ thống) để theo dõi và điều chỉnh thêm nếu cần.Vị trí file cấu hình:
/etc/mysql/my.cnf
, /etc/my.cnf
, hoặc trong thư mục con của /etc/mysql/conf.d/
.C:\Program Files\MariaDB\MariaDB 11.x\data\my.ini
hoặc C:\Program Files\MariaDB\MariaDB 11.x\my.ini
.Các thông số cấu hình cần điều chỉnh:
Bạn sẽ tìm hoặc thêm các dòng sau vào phần [mysqld]
của file cấu hình.
max_connections
(Số lượng kết nối tối đa): Đây là thông số quan trọng nhất. 10.000 học viên đồng thời là một con số lớn. Mặc dù không phải tất cả 10.000 học viên đều truy cập cùng một lúc, nhưng bạn cần có đủ dung lượng để xử lý các kết nối đỉnh điểm.
1500
- 2000
ban đầu, và theo dõi. Moodle có thể sử dụng nhiều kết nối hơn một người dùng thực tế. Đối với 10000 học viên, bạn có thể cần xem xét cao hơn nữa, khoảng 2000
đến 4000
hoặc thậm chí 5000
tùy thuộc vào mức độ hoạt động đồng thời.
max_connections = 2000
Lưu ý: Giá trị này phụ thuộc nhiều vào tài nguyên máy chủ (RAM) và cách Moodle quản lý kết nối. Nếu bạn thấy lỗi "Too many connections", hãy tăng giá trị này.
innodb_buffer_pool_size
(Kích thước bộ đệm InnoDB): Đây là khu vực bộ nhớ chính nơi InnoDB lưu trữ dữ liệu và index thường xuyên được truy cập. Đây là một trong những thông số quan trọng nhất ảnh hưởng đến hiệu suất đọc/ghi.
innodb_buffer_pool_size = 24G
Lưu ý: Điều chỉnh giá trị này dựa trên RAM thực tế của bạn. Đừng đặt quá cao khiến hệ thống hết RAM và bắt đầu sử dụng swap.
innodb_log_file_size
(Kích thước file nhật ký InnoDB): Kích thước của các file nhật ký giao dịch InnoDB. Kích thước lớn hơn có thể cải thiện hiệu suất ghi (write performance) nhưng cũng có thể làm chậm quá trình phục hồi (recovery process) sau khi sập.
256M
đến 2G
.
innodb_log_file_size = 1G
innodb_flush_log_at_trx_commit
(Đồng bộ hóa nhật ký giao dịch): Kiểm soát tần suất các thay đổi trong nhật ký giao dịch được đẩy xuống đĩa.
1
(mặc định): Đảm bảo ACID, an toàn nhất nhưng có thể chậm hơn.0
: Nhanh nhất, nhưng có thể mất một số giao dịch trong trường hợp sập.2
: Thỏa hiệp giữa an toàn và hiệu suất. Nhật ký được ghi vào hệ điều hành mỗi giây, nhưng không nhất thiết phải được đẩy xuống đĩa ngay lập tức.2
là lựa chọn tốt. Nếu dữ liệu cực kỳ quan trọng và không thể mất, hãy giữ 1
.
innodb_flush_log_at_trx_commit = 2
query_cache_size
(Kích thước bộ đệm truy vấn): Bộ đệm này lưu trữ kết quả của các câu lệnh SELECT
để phục vụ các truy vấn lặp lại nhanh hơn. Tuy nhiên, nó có thể gây ra tranh chấp khóa (contention) trên hệ thống có tải cao, đặc biệt là khi có nhiều thao tác ghi.
Qcache_hits
thấp và Qcache_lowmem_prunes
cao, bạn nên tắt nó.
query_cache_type = 0
query_cache_size = 0
tmp_table_size
và max_heap_table_size
(Kích thước bảng tạm): Giới hạn kích thước của các bảng tạm trong bộ nhớ. Nếu bảng tạm vượt quá giới hạn này, nó sẽ được ghi ra đĩa, làm chậm hiệu suất.
tmp_table_size = 256M
max_heap_table_size = 256M
Lưu ý: Giá trị này phụ thuộc vào RAM và các truy vấn cụ thể của Moodle.
thread_cache_size
(Kích thước bộ đệm luồng): Số lượng luồng máy chủ có thể giữ lại trong bộ đệm để sử dụng lại mà không cần tạo mới. Giúp giảm chi phí tạo/hủy luồng.
100
đến 200
là một điểm khởi đầu tốt.
thread_cache_size = 200
join_buffer_size
(Kích thước bộ đệm join): Bộ đệm được sử dụng để tối ưu hóa các thao tác JOIN
không sử dụng index.
JOIN
phức tạp không được tối ưu hóa tốt, việc tăng giá trị này có thể giúp.
join_buffer_size = 2M
sort_buffer_size
(Kích thước bộ đệm sắp xếp): Bộ đệm được sử dụng khi MySQL cần thực hiện các thao tác sắp xếp (ORDER BY, GROUP BY).
sort_buffer_size = 2M
key_buffer_size
(Kích thước bộ đệm khóa MyISAM - nếu sử dụng): Nếu bạn không sử dụng các bảng MyISAM (InnoDB là mặc định và được khuyến nghị cho Moodle), giá trị này có thể để mặc định hoặc đặt nhỏ. Nếu có bảng MyISAM, nó tương tự như innodb_buffer_pool_size
nhưng dành cho MyISAM.
key_buffer_size = 32M
wait_timeout
và interactive_timeout
(Thời gian chờ kết nối): Thời gian (tính bằng giây) mà server sẽ đợi hoạt động trên một kết nối không tương tác (ví dụ: PHP-FPM) hoặc tương tác.
wait_timeout = 600
interactive_timeout = 600
character_set_server
và collation_server
: Đảm bảo bộ ký tự và đối chiếu phù hợp với Moodle, thường là UTF-8 hoặc UTF8MB4.
utf8mb4
.
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
Ví dụ cấu hình tổng hợp (tham khảo):
[mysqld]
# Cơ bản
port = 3306
datadir = /var/lib/mysql # hoặc đường dẫn của bạn
socket = /var/run/mysqld/mysqld.sock # hoặc đường dẫn của bạn
# Kết nối
max_connections = 2000
max_user_connections = 1000 # Giới hạn số kết nối cho mỗi người dùng, tùy chọn
thread_cache_size = 200
wait_timeout = 600
interactive_timeout = 600
# InnoDB
innodb_buffer_pool_size = 24G # Điều chỉnh theo RAM của bạn (70-80% tổng RAM)
innodb_log_file_size = 1G
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1 # Rất khuyến nghị cho hiệu suất và quản lý
innodb_open_files = 4000 # Có thể cần tăng nếu Moodle có rất nhiều bảng
innodb_autoextend_increment = 64 # Giúp tăng trưởng tệp dữ liệu hiệu quả
innodb_lru_scan_depth = 2048 # Tùy chỉnh nếu có vấn đề về hiệu suất I/O
# Cache và bộ đệm
query_cache_type = 0
query_cache_size = 0
tmp_table_size = 256M
max_heap_table_size = 256M
join_buffer_size = 2M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 1M
key_buffer_size = 32M # Chỉ cho MyISAM, giữ thấp nếu chỉ dùng InnoDB
# Nhật ký
log_error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow_queries.log
long_query_time = 1 # Ghi lại các truy vấn chậm hơn 1 giây
# Bộ ký tự
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
Các bước thực hiện:
my.cnf
(hoặc my.ini
).[mysqld]
và thêm/chỉnh sửa các thông số như trên.
sudo systemctl restart mariadb
hoặc sudo service mysql restart
SHOW STATUS;
trong MariaDB client để xem các biến trạng thái.mysqltuner
hoặc Percona Toolkit
để nhận các khuyến nghị cụ thể dựa trên tải công việc của bạn.top
, htop
, nmon
(Linux) hoặc Task Manager (Windows).Lời khuyên bổ sung:
Việc tối ưu hóa là một quá trình lặp đi lặp lại. Bắt đầu với các cấu hình cơ bản này, sau đó giám sát và điều chỉnh dựa trên dữ liệu hiệu suất thực tế của bạn.