Saya memiliki basis data paket log, yang hampir tidak pernah dipertanyakan. Itu hanya perlu cepat pada sisipan. Saya menggunakan InnoDB karena saya ingin mempertahankan kepatuhan ACID, karena kehilangan satu paket saja dapat merusak pelanggan kami. Dalam skenario penyempurnaan kinerja, saya mengirim 1.000.000 paket ke server melalui beberapa koneksi DB. Tetapi apa pun pengaturan yang saya gunakan di my.cnf, saya tidak bisa mendapatkan proses mysqld untuk menggunakan lebih dari 900% CPU pada sistem dengan 12 core. (Tidak ada yang berjalan di kotak.)
Saya sudah mengatur yang berikut ini
innodb_file_per_table = 1
innodb_write_io_threads = 64
innodb_read_io_threads = 64
innodb_thread_concurrency = 0
Jika saya menggunakan MyISAM, saya bisa mendapatkan semua paket yang ditulis dalam waktu sekitar 6 detik. Tapi InnoDB membutuhkan waktu sekitar 25. Bisakah saya membuat MySQL menggunakan sisa sumber daya sistem dan memasukkan lebih cepat?
Sunting: Berikut skema untuk tabel:
+-------+----------------------+------+-----+---------+-------+
| 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 | |
+-------+----------------------+------+-----+---------+-------+
sunting2: Saya telah mengumpulkan lebih banyak sisipan bersama sehingga satu permintaan mendekati panjang maksimum (sekitar 16.000.000 karakter). Basis data sekarang melonjak menjadi 1100% selama dua detik, kemudian turun menjadi 100% untuk sisa waktu. Total waktu sekarang 21 detik, atau sekitar 16% lebih cepat daripada ketika saya mulai.