Saya menjalankan SQL Server 2008 R2 SP1, pada kotak Windows Server 2008. Saya memiliki skrip .NET yang berjalan dari Visual Studio 2010 yang melakukan hal berikut:
- Mencapai ke dalam basis data
- Melakukan perubahan
- Iterasi
Jumlah total yang akan diulangnya adalah 150, namun berhenti pada 100 koneksi dan saya tidak tahu mengapa. Saya dapat menyesuaikan skrip untuk hanya menggunakan utas tunggal, tetapi saya lebih suka untuk mengetahui di mana saya kehilangan pengaturan koneksi maks karena akan lebih berguna untuk mengetahui referensi di masa mendatang.
Di sinilah saya telah memeriksa sejauh ini:
- String Koneksi SQL di Visual Studio 2010 (diatur ke 1000)
- Properti koneksi instance SSMS Database (diatur ke 0 koneksi pengguna [infinity])
- Menelusuri beberapa informasi di Server 2008, sepertinya ia dapat menangani lebih dari 100 koneksi
- Melangkahi kode saya di samping
SP_WHO2
yang memberikan lebih banyak informasi tentang koneksi logis, melihat bahwa # koneksi dimulai pada 52 dan kesalahan skrip dengan kesalahan "Max Pooled Connections tercapai" kesalahan di 152 koneksi logis. - Mengubah string koneksi untuk digunakan
Data Source=PerfSQL02;Initial Catalog=Masked;Integrated Security=True;Max Pool Size=1000
Saya tidak yakin di mana lagi untuk memeriksa, saya tahu saya memiliki banyak bagian yang bergerak di sini tapi saya merasa saya hanya melewatkan pengaturan max pool di suatu tempat.
sql-server
Sean Long
sumber
sumber
System.Data.SqlClient
Default ke 100, itulah sebabnya Anda melihat kelelahan dari kumpulan koneksi).Jawaban:
SQL Server memungkinkan maksimum 32.767 koneksi secara default. Itu bisa diubah menggunakan
sp_configure
. Untuk melihat konfigurasi Anda saat ini untuk pengaturan ini, gunakan kueri berikut:Secara default, Anda akan melihat maksimum 32767,
value_in_use
sama dengan 0 (gunakan pengaturan default). Jika ini telah diubah, Anda dapat mengkonfigurasi ulang SQL Server untuk menggunakan nilai-nilai lain seperti yang dijelaskan dalam tautan.Anda juga harus meninjau berapa banyak koneksi yang sebenarnya dibuat, karena mungkin ada lebih banyak aktivitas di luar aplikasi Anda (atau aplikasi Anda membuat lebih banyak koneksi daripada yang Anda pikirkan). Anda akan ingin melihat Statistik Umum -> Koneksi Logikal di perfmon atau kueri nilai di
sys.dm_os_performance_counters
(cntr_value akan menampilkan nilai saat ini dalam nilai waktu):sumber
Di string koneksi Anda, tentukan
max pool size=<your desired max pool size>
. Jadi dengan kata lain, jika Anda ingin mengubah ukuran max pool ke nilai 500, string koneksi Anda bisa menyerupai ini:Jelas saya mengasumsikan begitu banyak dengan parameter Anda yang lain, tetapi ini akan memberi Anda ide yang baik untuk melanjutkan. Penggabungan koneksi adalah penegakan penyedia sisi klien. Klienlah yang perlu menentukan pengaturan ukuran kumpulan maks ini, melalui string koneksi.
Juga, pastikan Anda menutup atau membuang koneksi Anda dengan benar, jika tidak, Anda akan mengikat koneksi. Sesuatu seperti ini (C #):
The
using
blok (dalam C #) panggilanIDisposable.Dispose()
setelah selesai. Anda juga bisa menerapkanSqlConnection.Dispose()
atauSqlConnection.Close()
difinally
bloktry/catch/finally
blok.Referensi: Dokumentasi MSDN pada properti SqlConnection.ConnectionString
sumber
Data Source=PerfSQL02;Initial Catalog=Masked;Integrated Security=True;Max Pool Size=1000
SqlConnection.ConnectionString
untuk operasi tertentu. Itu akan menjadi cara termudah. Jikamax pool size
tidak ada, maka 100 lalu.