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

Berapa batas koneksi untuk Google Cloud SQL dari App Engine, dan cara terbaik untuk menggunakan kembali koneksi DB?

Jawaban singkat:Permintaan Anda mungkin terlalu lambat dan server mysql tidak memiliki cukup utas untuk memproses semua permintaan yang Anda coba kirimkan.

Jawaban Panjang:

Sebagai latar belakang, Cloud SQL memiliki dua batasan yang relevan di sini:

  • Koneksi:Ini sesuai dengan objek 'sambungan' dalam kode Anda. Ada struktur data yang sesuai di server. Setelah Anda memiliki terlalu banyak objek ini (saat ini dikonfigurasi ke 1000), yang paling terakhir digunakan akan ditutup secara otomatis. Saat koneksi ditutup di bawah Anda, Anda akan mendapatkan error koneksi yang tidak dikenal (ApplicationError:1007) saat mencoba menggunakan koneksi itu lagi.
  • Permintaan Bersamaan:Ini adalah kueri yang dijalankan di server. Setiap kueri yang dieksekusi mengikat utas di server, jadi ada batas 100. Jika ada terlalu banyak permintaan bersamaan, permintaan berikutnya akan ditolak dengan kesalahan yang Anda dapatkan (ApplicationError:1033)

Sepertinya batas koneksi tidak memengaruhi Anda, tetapi saya ingin menyebutkannya untuk berjaga-jaga.

Ketika datang ke Permintaan Bersamaan, meningkatkan batas mungkin membantu, tetapi biasanya memperburuk masalah. Ada dua kasus yang pernah kita lihat sebelumnya:

  • Deadlock:Kueri yang berjalan lama mengunci baris penting dari database. Semua kueri berikutnya diblokir pada kunci itu. Waktu aplikasi habis pada kueri tersebut, tetapi tetap berjalan di server, mengikat utas tersebut hingga batas waktu kebuntuan pemicu.
  • Kueri Lambat:Setiap kueri sangat lambat. Ini biasanya terjadi ketika kueri memerlukan pengurutan file sementara. Waktu aplikasi habis dan mencoba ulang kueri saat percobaan pertama kueri masih berjalan dan dihitung terhadap batas permintaan bersamaan. Jika Anda dapat menemukan waktu kueri rata-rata, Anda bisa mendapatkan perkiraan berapa banyak QPS yang dapat didukung oleh instans mysql Anda (mis. 5 ms per kueri berarti 200 QPS untuk setiap utas. Karena ada 100 utas, Anda dapat melakukan 20.000 QPS. 50 md per kueri berarti 2000 QPS.)

Anda harus menggunakan MENJELASKAN dan TAMPILKAN STATUS INNODB MESIN untuk melihat mana dari dua masalah yang sedang terjadi.

Tentu saja, mungkin juga Anda hanya mengarahkan banyak lalu lintas pada instans Anda dan tidak ada cukup utas. Dalam hal ini, Anda mungkin akan memaksimalkan cpu untuk instance, jadi menambahkan lebih banyak utas tidak akan membantu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bantuan PHP dan SQL Hashing:Apa yang saya lakukan salah?

  2. MySQL mengekspor KE OUTFILE --secure-file-priv error saat menggunakan set direktori

  3. Ekspor database MySQL menggunakan PHP

  4. Bagaimana cara mengurutkan hasil berdasarkan stempel waktu kecuali salah satunya?

  5. Mengubah folder tmp mysql