Tôi có một cơ sở dữ liệu nhật ký gói, gần như không bao giờ được truy vấn. Nó chỉ cần được nhanh chóng trên chèn. Tôi đang sử dụng InnoDB vì tôi muốn duy trì tuân thủ ACID, vì thậm chí mất một gói duy nhất có thể gây tổn hại cho khách hàng của chúng tôi. Trong kịch bản điều chỉnh hiệu suất, tôi gửi 1.000.000 gói đến máy chủ qua nhiều kết nối DB. Nhưng bất kể tôi sử dụng cài đặt nào trong my.cnf, tôi không thể có quy trình mysqld để sử dụng hơn 900% CPU trên hệ thống có 12 lõi. (Không có gì khác đang chạy trên hộp.)
Tôi đã thiết lập như sau
innodb_file_per_table = 1
innodb_write_io_threads = 64
innodb_read_io_threads = 64
innodb_thread_concurrency = 0
Nếu tôi sử dụng MyISAM, tôi có thể nhận được tất cả các gói được viết trong khoảng 6 giây. Nhưng InnoDB mất khoảng 25. Tôi có thể khiến MySQL sử dụng phần còn lại của tài nguyên hệ thống và chèn nhanh hơn không?
Chỉnh sửa: Đây là lược đồ cho bảng:
+-------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------------------+------+-----+---------+-------+
| t | bigint(20) unsigned | YES | | NULL | |
| a | char(1) | YES | | NULL | |
| sa | int(10) unsigned | YES | | NULL | |
| sb | int(10) unsigned | YES | | NULL | |
| sc | int(10) unsigned | YES | | NULL | |
| sd | int(10) unsigned | YES | | NULL | |
| sp | smallint(5) unsigned | YES | | NULL | |
| da | int(10) unsigned | YES | | NULL | |
| db | int(10) unsigned | YES | | NULL | |
| dc | int(10) unsigned | YES | | NULL | |
| dd | int(10) unsigned | YES | | NULL | |
| dp | smallint(5) unsigned | YES | | NULL | |
+-------+----------------------+------+-----+---------+-------+
chỉnh sửa2: Tôi đã gộp nhiều lần chèn lại với nhau để một truy vấn duy nhất gần độ dài tối đa (khoảng 16.000.000 ký tự). Cơ sở dữ liệu bây giờ tăng vọt lên 1100% trong hai giây, sau đó giảm xuống 100% trong thời gian còn lại. Tổng thời gian bây giờ là 21 giây, hoặc nhanh hơn khoảng 16% so với khi tôi bắt đầu.