Saya seorang siswa sekolah menengah yang meneliti OLAP dengan Mondrian OLAP. Jadi saya ingin memasukkan data ke InnoDB (MySQL 5.5) lebih cepat pada pemuatan awal. Dalam lingkungan ini, satu-satunya pengguna adalah saya, jadi saya pikir dapat memungkinkan pengaturan yang lebih longgar untuk kecepatan penyisipan. Saat ini, saya menggunakan teknik berikut.
- nonaktifkan
log_bin
- memungkinkan
skip-innodb-doublewrite
- setel
transaction_isolation
keREAD-COMMITTED
atauREAD-UNCOMMITTED
(sebenarnyaREAD-COMMITED
) - setel
innodb_flush_log_at_trx_commit
ke0
atau2
(sebenarnya0
) - diatur
innodb_buffer_pool_size
ke 5GB (sistem memiliki 6GB RAM)
Apakah ada teknik lain untuk penyisipan yang lebih cepat di InnoDB? Dan apakah saya harus memodifikasi innodb_io_read_thread
dan innodb_io_write_thread
? Jika Anda membutuhkan informasi lebih lanjut, tolong beri tahu saya.
innodb_read_io_threads
,innodb_write_io_threads
dan `innodb_io_capacity'.Ada seluruh dokumen yang didedikasikan untuk memuat data secara massal ke InnoDB. Poin utama:
SET autocommit=0;...sql import;COMMIT;
nonaktifkan cek asing dan unik (Anda tidak dapat sepenuhnya menonaktifkan semua indeks):
Yang ketiga mungkin atau mungkin tidak membantu Anda, jadi saya sarankan membaca tautan itu untuk melihat bagaimana Anda pertama kali memuat data. Misalnya, jika Anda memecah beban menjadi beberapa sisipan untuk dijalankan secara bersamaan, itu pasti akan membantu Anda mengatur nilainya menjadi 2. Jika Anda melakukan satu penyisipan multi-garis besar, itu tidak akan berbuat banyak (jika ada) untuk Tolong.
Karena Anda memutar log biner untuk penyisipan awal ini, Anda seharusnya tidak peduli dengan kesenjangan dalam angka kenaikan otomatis (jika melakukan penyisipan bersamaan).
sumber
Anda dapat menggunakan metode berikut untuk mempercepat pemasangan:
INSERT
pernyataan dengan banyakVALUES
daftar untuk memasukkan beberapa baris sekaligus. Ini jauh lebih cepat (beberapa kali lebih cepat dalam beberapa kasus) daripada menggunakanINSERT
pernyataan baris tunggal yang terpisah . Jika Anda menambahkan data ke tabel kosong, Anda bisa menyetel variabel bulk_insert_buffer_size untuk membuat penyisipan data lebih cepat.LOAD DATA INFILE
. Ini biasanya 20 kali lebih cepat daripada menggunakanINSERT
pernyataan. Lihatsumber
Paket A: "Batch" INSERT - beberapa baris per pernyataan INSERT. Sarankan sekitar 1000 baris per pernyataan. autocommit = aktif, tidak ada BEGIN eksplisit ... KOMIT
Paket B: LOAD DATA
Jika Anda memasukkan terlalu banyak baris sekaligus, InnoDB harus melakukan lebih banyak pekerjaan untuk dapat mengembalikan sisipan jika ada kerusakan. Untuk alasan ini, saya tidak setuju dengan autocommit = off, yang akan membuat seluruh set menjadi satu transaksi.
LOAD DATA dari seluruh rangkaian baris mungkin memiliki masalah yang sama, tetapi cukup cepat.
buffer_pool = 5G dari 6G berada di ambang terlalu besar. Jika ada swapping, kinerja akan anjlok.
PARTISIONing mungkin akan membuatnya lebih lambat.
SHOW CREATE TABLE - Kunci sekunder dapat menjadi kendala serius.
Apakah Anda menggunakan InnoDB? atau XtraDB?
sumber
LOAD DATA
terlihat begitu cepat, tetapi kita perlu menulis data ke teks sekaligus sebagai CSV, lalu gunakanLOAD DATA
kan? / Saya akan mengaturbuffer_pool_size
ke 4GB.