Apakah penting untuk menutup koneksi mysql secara efisien, atau apakah secara otomatis menutup setelah file php berjalan?
Apakah penting untuk menutup koneksi mysql secara efisien, atau apakah secara otomatis menutup setelah file php berjalan?
Jawaban:
Dari dokumentasi :
Catatan: Tautan ke server akan ditutup segera setelah eksekusi skrip berakhir, kecuali jika ditutup sebelumnya dengan secara eksplisit memanggil mysql_close ().
Jika skrip Anda memiliki cukup banyak pemrosesan yang harus dilakukan setelah mengambil hasil dan telah mengambil rangkaian hasil lengkap, Anda pasti harus menutup koneksi. Jika tidak, ada kemungkinan server MySQL akan mencapai batas koneksinya saat server web sedang dalam penggunaan berat. Jika Anda tidak dapat menutup koneksi MySQL hingga mendekati akhir skrip, itu lebih bersih meskipun tidak perlu dilakukan secara eksplisit.
Saya tidak yakin bagaimana fastcgi mempengaruhi banyak hal. Satu halaman mengklaim bahwa build PHP yang mendukung fastcgi akan membuat koneksi persisten, bahkan untuk mysql_connect. Ini bertentangan dengan dokumentasi di mana koneksi ditutup saat proses, bukan skrip, berakhir. Daripada mengujinya, saya akan merekomendasikan menggunakan mysql_close (). Sebenarnya saya merekomendasikan menggunakan PDO , jika tersedia.
"The link to the server will be closed as soon as the execution of the script ends."
Ketika pengguna menutup halaman lebih awal, itu tidak masalah untuk server PHP. Ini menjalankan skrip seperti biasa dan mengakhiri skrip seperti biasa. Hanya pengguna yang tidak akan melihat hasil.
Apakah itu penting? Tidak terlalu banyak
Apakah ini dianggap praktik yang baik untuk diikuti? Iya.
Saya tidak mengerti mengapa Anda tidak ingin menutupnya.
mysql_close
mengatakan "Menggunakan mysql_close () biasanya tidak diperlukan, karena tautan terbuka non-persisten secara otomatis ditutup pada akhir eksekusi skrip." Saya tidak akan menganggapnya sebagai praktik yang buruk untuk tidak menutup koneksi.
Saat menggunakan sesuatu seperti cgi, sama sekali tidak perlu menutup koneksi mysql Anda karena mereka menutup secara otomatis pada akhir eksekusi skrip. Saat menggunakan teknologi persisten seperti mod_perl dan lainnya, yang menjaga koneksi Anda di antara permintaan, penting untuk melacak koneksi, variabel global, dll ..
Pada dasarnya, untuk data persisten, bersihkan sendiri. Untuk data yang sepele dan tidak persisten, semuanya akan hilang saat permintaan selesai. Bagaimanapun, praktik terbaik adalah selalu menutup koneksi Anda.
Akan ditutup segera setelah skrip selesai dieksekusi. Kecuali Anda telah membuka koneksi persisten. Idealnya Anda harus merilis sumber daya (koneksi di sini) segera setelah Anda selesai menggunakannya. Kecuali jika ada kemungkinan besar Anda akan membutuhkannya lagi segera dalam eksekusi.
Penggabungan koneksi atau menggunakan koneksi persisten (jika itu yang Anda maksudkan) adalah ide bagus jika Anda berada di belakang server database tunggal. Namun jika ada lebih banyak server dan Anda melakukan load balancing, hal itu dapat mengganggu distribusi pekerjaan. Biasanya beberapa klien menjalankan kueri berat sementara yang lain menjalankan kueri yang lebih ringan. Jadi jika koneksi yang sama digunakan selama n over, beberapa server akan mengalami beban berat sementara yang lain kurang dimanfaatkan. Pertimbangkan untuk menggunakan ttls yang lebih kecil dan ukuran kumpulan koneksi variabel.
Kebanyakan CMS menutup koneksi MySQL di akhir permintaan, yang sebenarnya tidak ada artinya, karena PHP akan tetap melakukannya.
Namun, jika Anda memiliki skrip di mana koneksi tidak lagi diperlukan, katakan di tengah-tengah skrip, dan kemudian aktivitas berat lainnya terjadi, maka ada baiknya untuk menutup koneksi secara eksplisit. Ini akan membebaskan beberapa sumber daya.
Sekarang, banyak yang telah dikatakan tentang manfaat menutup koneksi, tetapi hampir tidak ada yang dikatakan tentang manfaat tidak menutupnya. Pada dasarnya, jika Anda tidak menutup koneksi di akhir skrip, maka Anda benar-benar menghemat beberapa sumber daya. Bayangkan sebuah aplikasi web (atau aplikasi apapun) menerima 100 tampilan halaman / detik. Jadi, setiap detik, Anda perlu memanggil mysqli_close
100 kali - yang berarti dalam setiap detik, Anda memiliki 100 perjalanan pulang pergi yang tidak perlu ke server database untuk menutup koneksi yang terbuka. Dari perspektif kinerja, ini adalah overhead murni, karena PHP akan memeriksa koneksi terbuka ketika skrip selesai dan akan menutup koneksi tersebut, dan mungkin saja, karena semuanya terjadi begitu cepat, PHP tidak melihat bahwa Anda memilikinya menutup koneksi tersebut dan akan mencoba menutupnya lagi.
Catatan: jawaban di atas mengasumsikan bahwa Anda tidak menggunakan koneksi persisten (koneksi persisten tidak digunakan di CMS utama mana pun).