Kalıcı Bağlantılı Veritabanı Bağlantıları (Persitent Connections)

Transkript

Kalıcı Bağlantılı Veritabanı Bağlantıları (Persitent Connections)
Kalıcı Bağlantılı Veritabanı Bağlantıları (Persitent Connections)
Kalıcı Bağlantılı Veritabanı Bağlantıları (Persitent
Connections)
Kalıcı bağlantılar betiğinizin çalışması bittiğinde kapanmayan bağlantılardır.
Bir kalıcı bağlantı istendiğinde PHP evvelce açılmış eşdeğer bir kalıcı
bağlantı var mı diye bakar ve varsa onu kullanır. Yoksa yeni bir bağlantı
oluşturur. Bir 'eşdeğer' bağlantı, aynı konağa (uygulanabildiği takdirde) aynı
kullanıcı adı ve parola kullanılarak açılmış bağlantıdır.
HTTP sunucuları hakkında tam bilgi sahibi olmayan kişiler ne yaptıklarını bilmeden yükü yanlış kalıcı bağlantılara dağıtabilir ve bu
yanlış bağlantılarla çalışabilirler. Özellikle, size aynı bağlantı üzerinde 'kullanıcı oturumları' açma olanağını, verimli hareket işlemleri
kurulmasını ve başka birçok şeyi bir bütün halinde sağlamazlar. Aslında, son derece net olarak, kalıcı bağlantılar, kalıcı olmayan
bağlantılarla mümkün olmayan işlevselliği size sağlayamazlar.
Neden?
Bu HTTP sunucusunun işi nasıl yaptığı ile ilgilidir. PHP'nin HTML sayfalarını üretmek için HTTP sunucusunu üç şekilde kullanabilir.
İlk yöntem, PHP'yi bir CGI "sarmalayıcı" olarak kullanmaktır. Bu yolla, HTTP sunucusundan her PHP sayfası isteğinde PHP
yorumlayıcısının yeni bir örneği oluşturulup yok edilir. Yorumlayıcı her istekten sonra yok edildiğinden kazanılan özkaynaklar da (bir
SQL veritabanı bağlantısı gibi) kaybedilir. Bu durumda, kalıcı bağlantılar kullanarak da hiç bir şey kazanamazsınız; çünkü
özkaynaklar kalıcı olmayacaktır.
İkinci ve en çok kullanılan yöntem, PHP'yi çok süreçli bir sunucuda bir modül olarak çalıştırmaktır. Bu olanak şimdilik sadece Apache
HTTP sunucusu ile mümkündür. Çok süreçli bir sunucu, işleri sayfaları sunmak olan bir çok (alt) süreci denetimi altında tutan bir ana
sürece sahiptir. Bir istemciden bir istek geldiğinde, başka istemcilere hizmet sunmayan alt süreçlerden birini bu isteğe tahsis eder.
Eğer aynı istemci ikinci bir istek yaparsa bu isteğe başka bir alt süreç yanıt verebilir. Kalıcı bir bağlantı açıldığında SQL hizmeti
isteği yapılan her sayfa isteği SQL sunucuya tahsis edilen aynı bağlantıdan sunulur.
Son yöntem, PHP'yi çok evreli bir sunucuda bir eklenti olarak kullanmaktır. PHP4 şimdilik, PHP'nin bir eklenti olarak kullanımına izin
veren Netscape FastTrack (iPlanet), Microsoft's Internet Information Server (IIS) ve O'Reilly's WebSite Pro gibi çok evreli HTTP
sunucularında ISAPI, WSAPI ve (Windows üzerinde) NSAPI için destek vermektedir. Davranış esas olarak ikinci yöntemde açıklanan
çok süreçli yöntemle aynıdır.
www.dijitalders.com
Kalıcı Bağlantılı Veritabanı Bağlantıları
1
(Persitent Connections)
Kalıcı Bağlantılı Veritabanı Bağlantıları (Persitent Connections)
Kalıcı bağlantılar ek bir işlevselliğe sahip değilseler bunlar neden tercih ediliyorlar?
Yanıtı oldukça basittir: Verimlilik. SQL sunucunuza bağlantı açmak çok masraflıysa kalıcı bağlantılar kurmak daha iyidir. Bu bedel
gerçekte birçok sebebe bağlı olabileceği gibi olmayabilir de. Bu, veritabanının, HTTP sunucunun bulunduğu makinede olup
olmamasından SQL sunucusunun makineye ne kadar yük bindirdiğine kadar geniş bir yelpazede değerlendirilebilir. Son
değerlendirmede, eğer bu bedel yüksekse kalıcı bağlantıların büyük ölçüde yardımı olacaktır. SQL sunucuya yapılan her bağlantı
isteğinde alt süreç sadece o sayfayı işleyeceği yerde, kalıcı bağlantı durumunda her alt sürecin ömrü boyunca bir bağlantı krmasına
olanak tanınır. Yani, bir kalıcı bağlantı açmış her alt sürecin kendine ait bir kalıcı bağlantısı vardır. Örneğin, SQl sunucunuza kalıcı
bağlantı açan betiğiniz 20 ayrı alt süreç çalıştırıyorsa alt süreç başına bir tane olmak 20 ayrı bağlantı var demektir.
Ancak şuna dikkat edin, bağlantı sayısı sınırlı bir veritabanını bu sınırın üstünde kalıcı bağlantılarla kullanıyorsanız bunun bazı
götürüleri olabilir. Eğer veritabanınız aynı anda 16 bağlantılık bir sınıra sahipse ve çok meşgul bir sunucu oturumunda 17 alt evre
bağlantı açmaya çalışıyorsa biri bunu başaramayacaktır. Eğer betiğinizde (sonsuz döngü gibi durumlarda) bağlantıların
kapatılmasına izin vermeyen hatalar varsa, veritabanı sadece 16 bağlantı ile hızla batağa saplanacaktır. Terkedilmiş ve boştaki
bağlantıların devreye sokulması hakkında bilgi edinmek için veritabanınızın belgelerine bakınız.
Uyarı
Kalıcı bağlantıları kullanırken hesaba katmanız gereken bir çok yetersizlik vardır. Bunlardan biri, bir kalıcı bağlantı üzerinden tablo
kilitlemesi yapıyorsanız ve betiğiniz herhangi bir şekilde kilidi serbest bırakamazsa aynı bağlantıyı kullanan sonraki betikler sonsuza
kadar engellenebilir ve bunun sonucu olarak HTTP sunucunuzu veya veritabanı sunucunuzu yeniden başlatmak zorunda
kalabilirsiniz. Bir diğer durumda, hareketleri (transaction) kullanırken, bir hareket bloğu tamamlanmadan betiğiniz çalışmasını
bitirirse aynı bağlantıyı kullanan sonraki betiklerin işleri başlarından aşacaktır. Her durumda, tablolarınızın kilitlerini açmak ve
hareketleri başa sarmak için register_shutdown_function() işlevini kullanarak bir temizlik işlevi tanımlayabilirsiniz. Daha da iyisi,
tablo kilitleri veya hareket blokları kullanan betiklerde kalıcı bağlantıları kullanmayarak bu sorunlardan tamamiyle kurtulabilirsiniz.
Özetle, kalıcı bağlantılar normal bağlantılarla bire bir eşleşecek şekilde tasarlanmışlardır. Yani, betiğinizin davranışını değiştirmeden
kalıcı bağlantılar yerine her zaman kalıcı olmayan bağlantılar kullanabilirsiniz. Bu, muhtemelen betiğinizin verimliliğini etkileyecektir
ama davranışında bir değişikliğe yol açmayacaktır!
mysql_connect() ve mysql_pconnect() Analizi
1. mysql_pconnect() is deprecated as of PHP 5.5.0, and will be removed in the future because it has several disadvantage.
2. Major disadvantage is that mysql_close() didn't support connection created by mysql_pconnect(), connection remains open
for future use.
3. When we establish connection with mysql_pconnect() then it will search previous existing connection with same hostname,
username and password.If old active connection found then it will not recreate new connection.
4. In case of PHP most of the sites hosted with DB and PHP on same machine, so connection time is almost negligible, in that
way persistant connection is useless.
5. For Web-Request there is no need to make persistant connection, because HTTP is sateless protocol.
6. Connection will automatically close when we refresh page, because it assumes every request as new request.
7. Persistant connection need too much resource, that's why persistant connection is Highly Discouraged.
8. Normally Temp Tables dropped when connection close, but persistant connection do not close so Temp tables are no more
temporary.
Kaynak
http://php.net/manual/tr/features.persistent-connections.php
www.dijitalders.com
Kalıcı Bağlantılı Veritabanı Bağlantıları
(Persitent Connections)
2

Benzer belgeler

Graflarda Derece Bağlantılık İndeksi ve Temel İşlemlerde İncelenmesi

Graflarda Derece Bağlantılık İndeksi ve Temel İşlemlerde İncelenmesi In this paper, we present a new measurement, is called Degree Connection Index, for vulnerability. Degree connection index is associated vertex degrees with internally disjoint paths between vertex...

Detaylı