Mysql bağlantısını kapatmak önemli mi?


Yanıtlar:


90

Gönderen belgeler :

Not: Açıkça mysql_close () çağrısıyla daha önce kapatılmadığı sürece, betiğin yürütülmesi biter bitmez sunucuya olan bağlantı kapatılacaktır.

Komut dosyanızın sonucu getirdikten sonra gerçekleştirmesi gereken makul miktarda işlem varsa ve tüm sonuç kümesini aldıysa, kesinlikle bağlantıyı kapatmalısınız. Bunu yapmazsanız, web sunucusu yoğun kullanımda olduğunda MySQL sunucusunun bağlantı sınırına ulaşma ihtimali vardır. MySQL bağlantısını betiğin sonuna kadar kapatamazsanız, bunu açıkça yapmak gereksiz olsa da daha temizdir.

Fastcgi'nin işleri ne kadar etkilediğinden emin değilim. Bir sayfa , fastcgi'yi destekleyen bir PHP yapısının mysql_connect için bile kalıcı bağlantılar oluşturacağını iddia ediyor. Bu, komut dosyası yerine işlem sona erdiğinde bağlantının kapatılması nedeniyle belgelerle çelişir. Test etmek yerine, mysql_close () kullanmanızı tavsiye edeceğim. Aslında, varsa PDO'yu kullanmanızı öneririm .


Sanırım aynısı ftp_close için de geçerli?
doc_id

4
Bu, kullanıcı sayfayı erken kapatırsa (örneğin) (veya bazı hatalar varsa) bağlantının açık kalabileceği anlamına mı geliyor?
Toni Michel Caubet

1
@Toni Michel Caubet "The link to the server will be closed as soon as the execution of the script ends."Kullanıcı bir sayfayı erken kapattığında, PHP sunucusunun önemi yoktur. Komut dosyasını her zaman olduğu gibi çalıştırır ve komut dosyasını her zaman olduğu gibi bitirir. Yalnızca kullanıcı sonucu görmez.
arrowman

10

Çok önemli mi? Çok değil

İzlenmesi iyi bir uygulama olarak kabul ediliyor mu? Evet.

Neden kapatmak istemediğini anlamıyorum.


6
Eh, mysql_close"mysql_close () kullanmak genellikle gerekli değildir, çünkü kalıcı olmayan açık bağlantılar komut dosyasının yürütülmesinin sonunda otomatik olarak kapatılır." Bağlantıyı kapatmamanın gerçekten kötü bir uygulama olduğunu düşünmüyorum.
nico

4
"Neden kapatmak istemediğini anlamıyorum." Tekrar ihtiyacınız olma ihtimaliniz varsa kapatmak istemezsiniz.
Frank Farmer

1
Eğer ajax kullanıyorsanız, o zaman bağlantı kapanırsa, her seferinde ajax kullanmaya çalıştığınızda bağlantı açılacak ve kapanacaktır ve bu, bağlantıyı sunucuya açık bırakmaktan daha değerli olacaktır ve müşteri bağlantının açık olup olmadığını umursamaz. web sitesinin hızlı olmasına dikkat edin
Robert

gerçekten çok önemli olabilir !!! eğer sunucu yükü yüksekse ve daha uzaktaki bir başkasının söylediği gibi, bunun yanıt vermeyen bir sunucuya yol açabileceğini söyleyen çok sayıda kapatılmamış bağlantınız varsa, bu yüzden buna oldukça önemli derim!
oliiix

Kapatmak daha iyi. Kolay ve problemsiz.
José Carlos PHP

5

Cgi gibi bir şey kullanırken, mysql bağlantılarınızı, komut dosyası yürütmenin sonunda otomatik olarak kapandıkları için kapatmak tamamen gereksizdir. Mod_perl ve diğerleri gibi istekler arasındaki bağlantılarınızı koruyan kalıcı teknolojileri kullanırken, bağlantıları, global değişkenleri vb. Takip etmek önemlidir.

Temel olarak, kalıcı veriler için kendinizden sonra temizleyin. Önemsiz, kalıcı olmayan veriler için, istek yine de bittiğinde hepsi kaybolur. Her iki durumda da, en iyi uygulama bağlantılarınızı her zaman kapatmaktır.


1
Kalıcı olmayan PHP'den bahsediyor, bu yüzden geçerli değil.
Sasha Chedygov

2

Komut dosyası yürütmeyi tamamlar tamamlamaz kapanır. Kalıcı bir bağlantı açmadıysanız. İdeal olarak, işiniz biter bitmez bir kaynağı (burada bir bağlantı) serbest bırakmalısınız. Yürütme sırasında çok yakında tekrar ihtiyaç duyma şansınız olmadıkça.

Tek bir veritabanı sunucusunun arkasındaysanız, bağlantı havuzu oluşturma veya kalıcı bağlantılar kullanma (kastettiğiniz buysa) iyi bir fikirdir. Bununla birlikte, daha fazla sunucu varsa ve yük dengeleme yapıyorsanız, iş dağıtımına zarar verebilir. Tipik olarak bazı istemciler ağır sorgular çalıştırırken diğerleri daha hafif sorgular çalıştırır. Bu nedenle, aynı bağlantı n üzerinde kullanılırsa, bazı sunucular ağır yüke maruz kalırken, diğerleri az kullanılır. Daha küçük ttls ve değişken bağlantı havuzu boyutu kullanmayı düşünün.


1

Çoğu CMS, isteğin sonunda MySQL bağlantısını kapatır, ki bu gerçekten anlamsız çünkü PHP bunu zaten yapacak.

Bununla birlikte, bağlantının artık gerekli olmadığı bir betiğiniz varsa, betiğin ortasına doğru söyleyin ve ardından başka ağır faaliyetler meydana gelirse, bağlantıyı açıkça kapatmak iyi bir fikirdir. Bu, bazı kaynakları serbest bırakacaktır.

Şimdi, bir bağlantıyı kapatmanın faydaları hakkında çok şey söylendi, ancak kapatmamanın faydaları hakkında neredeyse hiçbir şey söylenmedi. Esasen, bir komut dosyasının sonunda bağlantıyı kapatmazsanız, gerçekten bazı kaynaklardan tasarruf etmiş olursunuz. Saniyede 100 sayfa görüntüleme alan bir web uygulamasını (veya herhangi bir uygulamayı) hayal edin. Bu nedenle, her saniye, mysqli_close100 kez çağırmanız gerekecek - bu, her saniyede, açık bağlantıları kapatmak için veritabanı sunucusuna 100 gereksiz gidiş dönüş yapmanız gerektiği anlamına gelir. Performans açısından bakıldığında, bu tamamen ek yüktür, çünkü PHP yine de betik bittiğinde açık bağlantıları kontrol edecek ve bu bağlantıları kapatacaktır ve her şey o kadar hızlı gerçekleştiği için PHP sizin sahip olduğunuzu göremeyebilir. bu bağlantıları kapattı ve tekrar kapatmayı deneyecek.

Not: Yukarıdaki cevap, kalıcı bağlantılar kullanmadığınızı varsayar (kalıcı bağlantılar, ana CMS'lerin hiçbirinde kullanılmaz).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.