Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menjelaskan cara kerja mssql-django pengumpulan koneksi dan cara mengonfigurasinya untuk aplikasi Django Anda.
Cara kerja pengumpulan koneksi
Secara default, mssql-django menggunakan kumpulan koneksi bawaan pyodbc. Ketika koneksi ditutup oleh Django, pyodbc mengembalikannya ke kumpulan alih-alih menutup koneksi ODBC yang mendasarinya. Permintaan koneksi berikutnya menggunakan kembali koneksi yang dikumpulkan, yang mengurangi overhead pembuatan koneksi database baru.
Mengonfigurasi pengumpulan koneksi
Pooling koneksi dikontrol oleh pengaturan DATABASE_CONNECTION_POOLING, yang ditempatkan pada level modul di settings.py (di luar kamus DATABASES):
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
| Nilai | Behavior |
|---|---|
True (standar) |
Kumpulan koneksi diaktifkan. Koneksi yang ditutup dikembalikan ke pool. |
False |
Pengumpulan koneksi dinonaktifkan. Setiap koneksi ditutup sepenuhnya saat dilepaskan. |
Kapan harus menonaktifkan pengumpulan koneksi
Pertimbangkan untuk menonaktifkan pengumpulan koneksi dalam skenario ini:
- Autentikasi berbasis token: Saat menggunakan token akses yang kedaluwarsa, koneksi yang dikumpulkan mungkin menyimpan token kedaluwarsa.
- Menangani masalah koneksi: Menonaktifkan pooling koneksi menyederhanakan pemecahan masalah dengan memastikan setiap permintaan membuat koneksi baru.
- Proses yang berjalan singkat: Untuk skrip atau perintah manajemen yang menjalankan beberapa kueri lalu selesai, pooling tidak memberikan manfaat.
Pengaturan percobaan ulang koneksi
Terlepas dari pengaturan pooling, Anda dapat mengonfigurasi perilaku percobaan ulang untuk upaya koneksi yang gagal. Untuk daftar lengkap opsi coba lagi dan waktu habis, lihat Referensi konfigurasi.
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,
},
},
}
CONN_MAX_AGE milik Django
Django juga menyediakan CONN_MAX_AGE pengaturan yang mengontrol berapa lama Django menjaga koneksi database terbuka sebelum menutupnya. Pengaturan ini berfungsi bersama pengumpulan koneksi pyodbc:
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",
},
},
}
Untuk informasi selengkapnya tentang CONN_MAX_AGE, lihat dokumentasi pengaturan database Django.
Titik awal praktis:
-
CONN_MAX_AGE=0: paling aman untuk penelusuran kesalahan dan tugas berumur singkat. -
CONN_MAX_AGE=600: default yang baik untuk banyak aplikasi web. -
CONN_MAX_AGE=3600: wajar untuk layanan dengan throughput tinggi yang konsisten setelah pengujian beban.
Note
Saat menggunakan server ASGI (seperti Daphne atau Uvicorn) atau deployment berbasis thread, koneksi persisten dapat bocor lintas konteks asinkron. Jika Anda menggunakan CONN_MAX_AGE dengan server ASGI, atur CONN_HEALTH_CHECKS = True (Django 4.1 dan yang lebih baru) dan uji di bawah konkurensi realistis. Untuk informasi selengkapnya, lihat dokumentasi Django tentang manajemen koneksi.
CONN_HEALTH_CHECKS memvalidasi koneksi terkumpul sebelum digunakan kembali. Jika Django mendeteksi koneksi kedaluwarsa, Django secara transparan membuka koneksi baru. Ini menambahkan biaya pemeriksaan per permintaan kecil dan biasanya layak diaktifkan untuk proses berumur panjang.