Luôn luôn có một sự đánh đổi giữa khả năng phục hồi và hiệu suất.
Với MySQL trên ext4, các rào cản = 1 mặc định thực sự gây ra sự chậm lại, tuy nhiên hành động đầu tiên không nên là vô hiệu hóa nhật ký hoặc bật dữ liệu = writBack.
Đầu tiên, nếu khả năng phục hồi có tầm quan trọng cao, RAID được hỗ trợ bằng pin chắc chắn rất đáng giá.
Các tùy chọn gắn kết mà tôi đã chọn, đặc biệt là trên RAID không có pin là:
/dev/mapper/vg-mysql--data /var/lib/mysql/data ext4 defaults,noatime,nodiratime,barrier=1,data=ordered 0 0
Đây là cố ý không sử dụng data = writBack vì tôi không muốn mạo hiểm tham nhũng hệ thống tệp dẫn đến "dữ liệu cũ xuất hiện trong tệp sau khi gặp sự cố và khôi phục tạp chí" (trích dẫn từ man mount
).
Cấu hình lý tưởng trong my.cnf cho khả năng phục hồi hoàn toàn xung quanh các cài đặt liên quan đến I / O là:
[mysqld]
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
Tôi đã chọn cho chuỗi các sự đánh đổi sau đây để tăng hiệu suất:
sync_binlog = 0
: đây là cấu hình MySQL đầu tiên mà tôi thay đổi khỏi khả năng phục hồi hoàn toàn. Lý do cho điều này là vì nó mang lại sự cải thiện hiệu suất đáng kể, đặc biệt là ở nơi binlog_format=row
(không may cần cho Jira). Tôi đang sử dụng đủ các bản sao MySQL trong cụm rằng nếu binlog bị hỏng do kịch bản mất điện, tôi sẽ thực hiện một bản sao nhị phân từ một bản sao khác.
innodb_flush_log_at_trx_commit = 2
: Mặc dù giá trị 1 là bắt buộc để tuân thủ ACID đầy đủ, với giá trị 2 ", bộ đệm nhật ký được ghi ra tệp tại mỗi cam kết, nhưng thao tác tuôn ra đĩa không được thực hiện trên đó. tệp nhật ký diễn ra một lần mỗi giây khi giá trị là 2. Lưu ý rằng việc xả một lần mỗi giây không được đảm bảo 100% xảy ra mỗi giây, do các vấn đề lập lịch xử lý. " (trích dẫn từ tài liệu MySQL)
- Cập nhật các tùy chọn gắn kết để sử dụng
data=writeback
. Lưu ý rằng nếu đây là hệ thống tệp gốc của bạn, bạn cũng sẽ cần phải vượt qua tùy chọn dòng lệnh kernel. Tôi tập hợp một vài bước trên đó tại coderwall .
- Kiểm tra các giá trị khác nhau của
innodb_flush_method
. O_DIRECT được hiển thị để cải thiện hiệu suất trong một số khối lượng công việc, nhưng không có nghĩa là điều này sẽ hoạt động trong môi trường của bạn.
- Nâng cấp lên ổ SSD, trong trường hợp này bạn cũng sẽ muốn tăng
innodb_io_capacity
, và điều chỉnh các thiết lập như innodb_adaptive_flushing
, innodb_read_io_threads
, innodb_write_io_threads
, innodb_purge_threads
, và các thiết lập khác có thể có.