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

Memperbarui menggunakan `database/sql` di Go lambat

(Berbicara dari sudut pandang MySQL...)

Beberapa "Aturan Praktis":

  • Satu INSERT :10 md
  • 100 baris atau lebih disisipkan oleh satu INSERT :10 kali lebih cepat per baris.
  • BEGIN; INSERT...; INSERT...; ... COMMIT; :Juga 10x.
  • Di atas mengasumsikan HDD; SSD mungkin 10x lebih cepat lagi.
  • Jika beberapa koneksi masing-masing melakukan penyisipan, mereka mungkin dapat berjalan secara paralel. 10 utas mungkin dapat melakukan 5 kali pekerjaan dalam waktu yang sama. (Tentu saja, ini mungkin menambahkan kerumitan yang tidak diinginkan ke aplikasi.)

Angka serupa untuk UPDATE , meskipun tidak mudah untuk melakukan pembaruan yang berbeda pada baris yang berbeda dengan satu kueri.

Pengujian Anda menunjukkan 8,5 md per baris UPDATEd ketika melakukan satu baris pada suatu waktu. Mengelompokkan dengan BEGIN...COMMIT mungkin akan memakan waktu sekitar 85 md untuk semua 100 baris, bahkan pada HDD.

Beberapa aplikasi cocok untuk batching; beberapa tidak. Jika Anda ingin berbicara tentang meningkatkan kinerja MySQL, kami perlu membahas detail aplikasi Anda.

Penghitung "Suka" dan "Lihat" mungkin perlu dipindahkan ke tabel 'paralel' karena cenderung Diperbarui satu per satu, dengan beberapa gangguan dengan aktivitas lain. Mereka juga cenderung secara otomatis memungkinkan multi-threading, sehingga kurang dari 850 mdtk per 100. Dalam aktivitas yang sangat tinggi (lebih dari, katakanlah, 1K tampilan per detik), penghitung semacam itu dapat dibuat secara artifisial melalui kode aplikasi tambahan.

Silakan tulis ulang tolok ukur Anda untuk mencerminkan aktivitas yang akan terjadi di aplikasi nyata. (Saya menebak bahwa Pembaruan akan terjadi secara paralel, bukan serial. Dan mereka akan tersebar secara acak sepanjang waktu.)

Hal lain... Jika setiap "jumlah tampilan" datang ke server web, maka ada juga koneksi dan pemutusan; maka berlalu waktu cenderung lebih dari 8.5ms. Tapi "berlalu" bukanlah masalah kritis; masalah sebenarnya adalah "berapa banyak pembaruan yang dapat dilakukan per detik".)

Dan satu hal lagi... Jika Anda menguji 'paralel', jangan tekan baris yang sama untuk setiap permintaan. Itu mungkin akan jauh lebih lambat daripada jika Anda menekan baris yang berbeda. (Menekan baris acak akan lebih baik. Memiliki bias di baris mana yang harus dipukul akan lebih realistis.)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ulangi pemicu dengan nilai yang dipisahkan koma mysql

  2. Pengantar Sederhana untuk Menggunakan MySQL di Terminal Linux

  3. Nama tabel ditentukan dua kali sebagai target untuk pembaruan dan sumber terpisah untuk data

  4. PHPExcel:Kesalahan koordinat sel tidak valid

  5. Permintaan lambat MySQL dengan bergabung meskipun EXPLAIN menunjukkan rencana yang bagus