Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL mengoptimalkan kecepatan INSERT diperlambat karena indeks

Jika Anda ingin penyisipan cepat, hal pertama yang Anda butuhkan adalah perangkat keras yang tepat. Itu mengasumsikan jumlah RAM yang cukup, SSD, bukan drive mekanis, dan CPU yang cukup kuat.

Karena Anda menggunakan InnoDB, yang Anda inginkan adalah mengoptimalkannya karena konfigurasi default dirancang untuk mesin lama dan lambat.

Berikut ini bacaan bagus tentang mengonfigurasi InnoDB

Setelah itu, Anda perlu mengetahui satu hal - dan begitulah cara database melakukan pekerjaan mereka secara internal, cara kerja hard drive, dan sebagainya. Mekanismenya akan saya sederhanakan dalam uraian berikut:

Transaksi adalah MySQL menunggu hard drive untuk mengkonfirmasi bahwa itu menulis data. Itu sebabnya transaksi lambat pada drive mekanis, mereka dapat melakukan 200-400 operasi input-output per detik. Diterjemahkan, itu berarti Anda bisa mendapatkan kueri penyisipan 200ish per detik menggunakan InnoDB pada drive mekanis. Tentu saja, ini adalah penjelasan yang disederhanakan , hanya untuk menjelaskan apa yang terjadi, ini bukan mekanisme lengkap di balik transaksi .

Karena kueri, terutama yang sesuai dengan ukuran tabel Anda, relatif kecil dalam hal byte - Anda secara efektif membuang IOPS yang berharga untuk satu kueri.

Jika Anda menggabungkan beberapa kueri (100 atau 200 atau lebih, tidak ada angka pasti, Anda harus mengujinya) dalam satu transaksi dan kemudian mengkomitnya - Anda akan langsung mencapai lebih banyak penulisan per detik.

Orang-orang Percona mencapai 15k sisipan per detik pada perangkat keras yang relatif murah. Bahkan 5k menyisipkan satu detik tidak buruk. Tabel seperti milik Anda kecil, saya telah melakukan tes pada tabel yang sama (3 kolom lebih banyak) dan saya berhasil mendapatkan 1 miliar catatan tanpa masalah nyata, menggunakan mesin ram 16gb dengan SSD 240GB (1 drive, tanpa RAID, digunakan untuk tujuan pengujian).

TL;DR:- ikuti tautan di atas, konfigurasikan server Anda, dapatkan SSD, bungkus banyak sisipan dalam 1 transaksi dan untung. Dan jangan matikan pengindeksan lalu aktifkan, itu tidak selalu berlaku, karena pada titik tertentu Anda akan menghabiskan waktu pemrosesan dan IO untuk membuatnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menggunakan mysqldump untuk sebagian tabel?

  2. Masalah Batas Waktu Koneksi MySQL - Aplikasi Grails di Tomcat menggunakan Hibernate dan ORM

  3. Menghindari Pertanyaan Bersarang

  4. Kebuntuan di MySQL karena Dimasukkan oleh banyak utas

  5. Memblokir '0000-00-00' dari Kolom Tanggal MySQL