Dalam SQL Server 2012 edisi standar, saya tahu bahwa jumlah maksimum koneksi pengguna adalah 32.767. Apa yang harus saya lakukan sebagai DBA jika saya menuju ke nomor ini?
Saat ini ada 30.000 koneksi pengguna, dan jumlah ini diperkirakan akan meningkat.
Jawaban:
Jumlah maksimum koneksi di versi dan edisi SQL Server adalah 32.767.
Anda dapat menentukan berapa banyak koneksi yang dimiliki SQL Server saat ini dengan melihat:
Jika rasio antara koneksi yang digunakan dan yang tidak terpakai dari kueri di atas memprihatinkan, kemungkinan pooling koneksi diaktifkan oleh aplikasi klien yang terhubung ke server, dan koneksi tersebut tidak digunakan secara efisien. Anda mungkin ingin meminta pengembang memodifikasi string koneksi untuk aplikasi ini untuk membatasi ukuran kumpulan koneksi, dan memastikan mereka membuang koneksi dengan benar. Jika koneksi tidak dibuang dengan benar, mereka akan tetap terbuka selama aplikasi klien berjalan.
Jika Anda merasa sangat gila, dan perlu menyingkirkan semua koneksi yang belum melakukan apa-apa baru-baru ini (terlepas dari apakah mereka benar-benar sedang melakukan pekerjaan), Anda dapat menjalankan kode berikut, yang akan menghasilkan daftar sesi yang bisa terbunuh. Anda harus menyalin dan menempelkan perintah yang dihasilkan ke jendela SSMS baru untuk benar-benar menjalankan perintah. Saya juga merekomendasikan agar resume Anda diperbarui untuk berjaga-jaga .
Dimungkinkan untuk secara linear skala jumlah koneksi di luar 32.767 dengan membagikan data di beberapa node SQL Server. Namun, menurut saya, menggunakan sharding sebagai cara untuk mencapai batas jumlah koneksi sama dengan menggunakan bom atom untuk membunuh seekor laba-laba. Ini akan membunuh laba-laba, tetapi Anda mungkin memiliki masalah yang lebih besar di akhir hari. Belum lagi sangat sulit untuk membangun bom atom, belum lagi mengimplementasikan sharding dengan benar.
sumber
is_user_process
kualifikasi, dan tentu saja tidak ada salahnya untuk mengecualikan sesi yang memilikilast_request_start_time
yang agak baru. Bagaimana baru-baru ini? Pertanyaan bagus lainnya.Saya telah mengalami perilaku aneh dengan koneksi pool di masa lalu, dan skenario Anda selaras dengan salah satu situasi tersebut. Jika aplikasi Anda menggunakan kumpulan koneksi (dan itu masih spekulasi, pada titik ini, sampai Anda mengonfirmasi atau menyangkal hal itu) maka Anda akan memiliki banyak koneksi yang tetap terbuka. Ini dengan desain.
Koneksi pooling bertujuan untuk mengurangi overhead menciptakan koneksi database. Mari kita ambil, misalnya, kumpulan koneksi 3. Sejauh yang saya tahu siklus hidup seperti ini (dimulai dari cache pool koneksi dingin):
sp_reset_connection
di utas 1Ini adalah penyederhanaan yang berlebihan, tetapi poin-poin penting termasuk:
sp_reset_connection
itu disebut waktu .Inilah bahan referensi yang saya gunakan untuk sampai pada kesimpulan ini.
Pooling koneksi untuk SQL Server DBA
Kasus transaksi yatim
sumber