PHP kodlarken veritabanı sorgularında kolaylık sağlasın diye SQL cümlemizi alıp sorgu sonucunu döndüren execSQL, execQuery vs gibi fonksiyonlar tanımlayıp kullanırız. Böylece her seferinde sunucu bağlantısı ve veritabanı seçimi ile uğraşmaktan kurtulmuş oluruz. Tabi kurallara uyan tertipli her programcı gibi fonksiyonun sonunda da mysql_close ile açtığımız bağlantıyı sonlandırmayı unutmayız. Aslında bazen unutmalıyız. Peki neden?
Benim kullandığım kod şuna benziyor:
function execSQL($sql) {
include(‘config.php’);
$conn = mysql_connect($DB_HOST, $DB_USERNAME, $DB_PASSWORD);
$db_selected = mysql_select_db($DB_DATABASE_NAME, $conn);
$result = mysql_query($sql, $conn);
mysql_close($conn);
return $result;
}
Bunun gibi bir fonksiyonun kullanıldığı ve SQL sorgularının yoğun olarak çalıştırıldığı bir proje üzerinde çalışıyorsanız şöyle bir hata mesajıyla karşılaşmanız fazla uzun sürmez:
User kullanici_adi has already more than ‘max_user_connections’ active connections
Bu mesajda veritananına PHP’nin ‘max_user_connections‘ ayarı ile belirlenenden daha fazla sayıda bağlantı açıldığı belirtiliyor.
Benim örneğimde bazı yoğun sayfalar 100’ün üzerinde farklı sorgu çalıştırdığından kısa süreler içinde veritabanı sunucusuna onbillerce bağlantı açılıp kapatılıyordu. Sorun aslında PHP’nin ve mysql_connect fonksiyonunun yeni bağlantı açma davranışını bilmemekten geçiyor.
PHP‘nin sayfasında da belirtildiği üzere mysql_connect daha önceden aynı argümanlarla (hostname, username) açılmış bir bağlantı varsa yeni bir bağlantı oluşturmayarak mevcut olanı kullanıyor. Ancak siz özellikle mysql_close ile bağlantıyı kapatmışsanız mutlaka sunucuya yeni bir bağlantı kuruyor.
Bağlantıları kapatmamak ilk bakışta iyi bir davranış olarak gözükmese de PHP’de bunun dez avantaj oluşturacağı durumlar pek fazla değil. Burada yazdığına göre bir PHP script’inin çalışması bittiğinde tüm açılmış bağlantılar zaten otomatik olarak kapatılıp yok ediliyor.
Sorgu çalıştırmanın dışında icra süresi uzun olan kodlarınız varsa mysql_close ile kapatmak iyi bir fikir. Ama bunun dışında mysql_close kullanmayı pek önermiyorum.
mysql_close kullanıp kullanmamayı anlık ortalama sayfa isteği ve kodlarda kullandığınız sorgu cümleleri ile max_user_connections arasında kuracağınız bir ilişkiyle belirleyebilirsiniz.
Yazan: Tankado
