Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, mssql-django içinde bağlantı havuzunun nasıl çalıştığı ve bunu Django uygulamanız için nasıl yapılandıracağınız açıklanmaktadır.
Bağlantı havuzu nasıl çalışır?
Varsayılan olarak, mssql-django pyodbc'nin yerleşik bağlantı havuzunu kullanır. Bir bağlantı Django tarafından kapatıldığında pyodbc, temel odbc bağlantısını kapatmak yerine bunu bir havuza döndürür. Sonraki bağlantı istekleri havuza alınan bağlantıları yeniden kullanır ve bu da yeni veritabanı bağlantıları kurma yükünü azaltır.
Bağlantı havuzunu yapılandırma
Bağlantı havuzlama, settings.py içinde modül düzeyine yerleştirilen DATABASE_CONNECTION_POOLING ayarı tarafından kontrol edilir (DATABASES sözlüğünün dışında):
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
},
}
# Set to False to disable pyodbc's connection pooling
DATABASE_CONNECTION_POOLING = False
| Değer | Behavior |
|---|---|
True (varsayılan) |
Bağlantı havuzu etkinleştirildi. Kapatılan bağlantılar havuzuna geri döndürülür. |
False |
Bağlantı havuzu devre dışı bırakıldı. Her bağlantı serbest bırakıldığında tamamen kapatılır. |
Bağlantı havuzu ne zaman devre dışı bırakılır?
Bu senaryolarda bağlantı havuzunu devre dışı bırakmayı göz önünde bulundurun:
- Belirteç tabanlı kimlik doğrulaması: Süresi dolan erişim belirteçlerini kullanırken havuza alınan bağlantılar eski belirteçleri barındırabilir.
- Bağlantı sorunlarında hata ayıklama: Bağlantı havuzunu devre dışı bırakmak, her isteğin yeni bir bağlantı oluşturmasını sağlayarak sorun gidermeyi basitleştirir.
- Kısa süreli işlemler: Birkaç sorgu oluşturup çıkan betikler veya yönetim komutları için havuza alma hiçbir avantaj sağlamaz.
Bağlantı yeniden deneme ayarları
Bağlantı havuzu ayarından bağımsız olarak, başarısız bağlantı girişimleri için yeniden deneme davranışını yapılandırabilirsiniz. Yeniden deneme ve zaman aşımı seçeneklerinin tam listesi için Yapılandırma referansı bölümüne bakın.
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"connection_retries": 3,
"connection_retry_backoff_time": 10,
"connection_timeout": 30,
},
},
}
Django'nun CONN_MAX_AGE
Django ayrıca Django'nun bir veritabanı bağlantısını kapatmadan önce ne kadar süre açık tuttuğunu denetleyan bir ayar sağlar CONN_MAX_AGE . Bu ayar pyodbc'nin bağlantı havuzuyla birlikte çalışır:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"CONN_MAX_AGE": 600, # Keep connections open for 10 minutes
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
},
}
hakkında CONN_MAX_AGEdaha fazla bilgi için Django veritabanı ayarları belgelerine bakın.
Pratik başlangıç noktaları:
-
CONN_MAX_AGE=0: hata ayıklama ve kısa süreli işler için en güvenli. -
CONN_MAX_AGE=600: birçok web uygulaması için iyi varsayılan. -
CONN_MAX_AGE=3600: yük testlerinden sonra sürekli yüksek aktarım hızına sahip hizmetler için makul.
Note
ASGI sunucuları (Daphne veya Uvicorn gibi) ya da iş parçacığı kullanan dağıtımlar kullanıldığında, kalıcı bağlantılar asenkron bağlamlar arasında sızabilir.
CONN_MAX_AGE öğesini bir ASGI sunucusuyla kullanıyorsanız, CONN_HEALTH_CHECKS = True ayarını yapın (Django 4.1 ve sonrası için) ve gerçekçi eşzamanlılık koşullarında test edin. Daha fazla bilgi için bağlantı yönetimiyle ilgili Django belgelerine bakın.
CONN_HEALTH_CHECKS yeniden kullanımdan önce bağlantı havuzundaki bağlantıları doğrular. Django eski bir bağlantı algılarsa, şeffaf bir şekilde yeni bir bağlantı açar. Bu, istek başına küçük bir denetim maliyeti ekler ve genellikle uzun süreli işlemler için etkinleştirmeye değer.