Saya memiliki SQL dump, cukup besar (411 MB) dan butuh 10 menit untuk mengimpor di server A, impor yang sama pada workstation B saya memiliki perkiraan (peninjau pipa) 8 jam untuk mengimpor (impor 31 MB dalam 40 menit ) Jadi ini adalah faktor 53 lebih lambat.
Spesifikasi:
Server A:
MySQL Version: 5.5.30-1.1 (Debian)
2 GB RAM
1 core QEMU Virtual CPU version 1.0 - cpu MHz: 3400.020
Workstation B:
MySQL Version: 5.5.41-MariaDB-1ubuntu0.14.04.1
14 GB RAM
4 cores Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz - cpu MHz: 1600.000
Konfigurasi mysql / maria adalah konfigurasi stok.
Saya beralih kemarin ke MariaDB di workstation saya - tetapi sebelum MariaDB statistiknya bahkan lebih buruk.
Saya sudah menghapus semua database di workstation saya - tidak ada perbedaan.
Pertanyaan besarnya adalah: Bagaimana kinerja menjadi faktor yang lebih lambat?Saya tidak bisa bekerja seperti ini :-(
Perintah impor saya:
pv sql/master.sql | mysql -h'localhost' -u'root' -p'root' 'master'
iostat -xm 5
server A:
avg-cpu: %user %nice %system %iowait %steal %idle
17,43 0,00 30,28 51,85 0,00 0,44
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0,00 254,03 0,00 1305,45 0,00 6,09 9,56 0,78 0,60 0,00 0,60 0,57 74,25
workstation B:
avg-cpu: %user %nice %system %iowait %steal %idle
7,32 0,00 3,22 5,03 0,00 84,42
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0,00 1,40 0,80 172,40 0,00 0,56 6,72 1,17 6,75 12,00 6,72 5,40 93,52
dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc
server A:
1073741824 bytes (1,1 GB) copied, 18,6947 s, 57,4 MB/s
workstation B:
1073741824 bytes (1,1 GB) copied, 8,95646 s, 120 MB/s
sumber
innodb_buffer_pool_size
setiap mesin?Jawaban:
Jawaban ini mempercepat semuanya:
/programming//a/2167641/292408
Saya hanya
di awal, dan
pada akhirnya.
Sekarang butuh 3 menit.
(Courtesy of @andreasemer via twitter)
sumber
Melengkapi apa yang saya lihat di atas ... Saya punya file dump saya sudah secara otomatis dihasilkan oleh sesuatu seperti:
Saya ingin mengotomatiskan impor ini sehingga saya membuat dua file di komputer saya yang dipanggil
default-start-import.sql
dandefault-end-import.sql
isinya adalah default-start-import.sql :dan default-end-import.sql :
dan skrip yang saya jalankan adalah sesuatu seperti ini;
perintah yang sama tetapi lebih mudah dibaca:
Dalam hal
cat
ini digunakan untuk menggabungkan file-file tersebut sebelum mengirimnya ke pipa. Saya pikir penting bahwa semua file diakhiri dengan karakter baris baru (baris kosong di akhir file jika dilihat dari editor teks) sehinggacat
perintah tidak menggabungkan garis antara file.Impor berfungsi dengan baik, saya belum menguji apakah itu benar-benar lebih cepat karena peningkatan ini untuk hal mengaktifkan-dan-menonaktifkan-autocommit, tetapi jika itu membuat segalanya lebih cepat, maka langkah-langkah tambahan ini membuat semuanya lebih mudah.
sumber
Saya sudah mencoba
--compress
jugaSET autocommit=0;
dan mereka membantu sejumlah kecil namun ...Saya menemukan bahwa mengubah banyak
INSERT INTO ...
pernyataan menjadi satu pernyataan besar dengan banyakVALUES(...), (...)
peningkatan kecepatan jauh.saya menggunakan
mysql
lebih dari SSL melalui WAN. Database MySQL jarak jauh di-host di Amazon.Dengan 9 kolom dan 2.100 baris:
INSERT
pernyataan : 82sINSERT
laporan konsolidasi : <1sDengan 7 kolom dan 42.000 baris:
INSERT
pernyataan : 1.740-anINSERT
laporan konsolidasi : 105-anJadi tergantung pada alat yang menghasilkan dump database (atau lebih tepatnya format
INSERT
pernyataan), kecepatan dapat dipengaruhi.Catatan: Ini juga mengurangi
.sql
file dump lebih dari 60% dalam pengujian saya, sehingga akan menghemat i / o juga.Peringatan: Ada batasan fisik untuk teknik ini dengan
mysql
dan untuk mereka yang membutuhkan portabilitas ... SQL Server tampaknya dibatasi hanya 1.000 baris pada satu waktu.Namun, melakukan 1.000 baris sekaligus untuk 42.000 baris masih menghasilkan peningkatan 1,657%!
sumber