Bir sayfa üzerinden açık mysql bağlantısı bırakmak tamamen pervasız mı?

5 Cevap php

Db sorgularken son derece paranoyak hissetmek akla yatkın? Ben kadar açılış ve kapanış mysql bağlantısı gibi yeni bir sorgu yapılacak olan her zaman gitmek. Ben (özellikle ajax etkin sayfalara ile) bu büyük performans downgrading neden olacağı korkuyorum.

Ben bu yöntemi devam ya da en azından açık ve yakın bağlantıları bir kez everypage içinde olmalıdır (yerine sorgu başına)? (Ben btw php yazıyorum)

teşekkür ederim.

5 Cevap

Evet, her zaman bağlantı havai önemli olacaktır. Ben sadece size bittiğinde, sadece üzerinde çalışan sorgu olmadan açık bir bağlantısı olan güvenlik açıkları için size açılacaktır çok düşüktür kapatın öneririz.

PHP ile mümkün eğer ben bir bağlantı havuzu tavsiye ederim. Aynı anda performansını en üst düzeye çıkarmak ve bağlantı süresini en aza indirmek için bir yol var.

Hemen not yakın MySQL bağlantıları gerekir. Bu tüm PHP script için tek bir bağlantı kullanmak daha iyidir. Açıkça yoksa PHP bağlantıyı otomatik olarak kapanacak.

Yeni bir bağlantı açılması MySQL ağ üzerindeki başka bir sunucu üzerinde yaşıyor, özellikle bazı küçük zaman cezası doğurur. Yeni TCP bağlantıları three-way handshake gerektirir ve her TCP bağlantısı at least two minutes için çekirdek kaynaklarını tüketir.

PHP tam teşekküllü bağlantı havuzu desteklemiyor olsa da, usul MySQL API kalıcı bağlantıları desteklemiyor. mysql_pconnect() for more details. At my office we use pconnect TCP bizim yüksek trafik PHP sitesinde yığınlar çökmesini önlemek için bkz.

Sizin için kalıcı bir bağlantı tutabilir PHP Veri Nesneleri, düşünün. Gerçekten sadece bir kez kimlik bilgileri ile bağlanmak ve daha sonra bağlantıyı önbelleğe. Bu satırlar boyunca bir şey ile bir bağlantı oluşturun:

$dbh = new PDO('mysql:host=HOSTNAME;dbname=DBNAME', 'USER', 'PASSWORD', array(PDO::ATTR_PERSISTENT => true));

Daha fazla bilgi için, php kılavuzda this page bkz.

PHP için konuşuyoruz, ama Apache / Perl bu tür bir şey yazarken ben genellikle performansını artırmak için iki şey yapamaz:

a) allow MySQL handles to stay open as long as the Apache daemon does. b) keep cached statement handles around (using an LRU cache).

Üretim sunucularında, bu MySQL kolları bazıları oldukça karmaşık SQL sorguları binlerce hizmet, gün boyunca var olmuştur. Bu bir sorun değildir.