Arkadaşlar merhaba, uzun süredir PHP ile proje geliştiriyorum ve PDO kullanımı konusunda bir takım sorunlar yaşıyorum. Özellikle hazırlıklı sorgularda (prepared statements) bir performans düşüklüğü hissediyorum. Normal sorgulara göre bariz bir şekilde daha yavaş çalışıyor. Örneğin aynı sorguyu doğrudan query() ile çalıştırdığımda 0.01 saniyede dönerken, PDO’nun prepare() ve execute() metodlarıyla 0.05-0.07 saniyeye çıkıyor. Tabii bu küçük bir fark gibi görünebilir ama yüksek trafikli bir sitede çok sayıda sorgu olduğu için ciddi bir yük oluşturuyor. Acaba siz de benzer bir durumla karşılaştınız mı? PDO’nun hazırlıklı sorguları gerçekten bu kadar mı yavaş, yoksa ben mi bir yerde hata yapıyorum?
Özellikle veritabanı bağlantısını her seferinde yeniden kuruyor olmamdan şüpheleniyorum. PDO bağlantısını bir kere kurup sınıf içinde saklıyorum, ama yine de hazırlıklı sorgularda her çağrıda ayrı bir hazırlık yapılıyor. Belki de bu hazırlık aşaması MySQL tarafında ekstra bir yük oluşturuyordur. Aynı sorguyu birden fazla kez çalıştırmak zorunda kaldığımda bile performans artışı göremiyorum. Hatta bazen aynı sorguyu döngü içinde tekrar tekrar çağırınca, işler daha da kötüleşiyor. Acaba PDO’nun emülasyon modu mu kapalı olmalı, yoksa tamponlama (buffering) ile ilgili bir ayar mı kaçırıyorum?
Bir de şöyle bir durum var: Ben genelde MySQL kullanıyorum ve InnoDB motoru ile çalışıyorum. Acaba tablo yapısı veya indeksleme ile ilgili bir sorun olabilir mi? Hazırlıklı sorguların plan önbellekleme (query cache) ile nasıl etkileşime girdiğini tam olarak çözebilmiş değilim. Sizlerin deneyimleri neler? PDO ile hazırlıklı sorgularda performansı artırmak için hangi ayarları yapıyorsunuz? Ya da belki de mysqli’ye geçmek daha mantıklı mı? Konu hakkında fikri olan varsa lütfen yazsın, tartışalım.
Özellikle veritabanı bağlantısını her seferinde yeniden kuruyor olmamdan şüpheleniyorum. PDO bağlantısını bir kere kurup sınıf içinde saklıyorum, ama yine de hazırlıklı sorgularda her çağrıda ayrı bir hazırlık yapılıyor. Belki de bu hazırlık aşaması MySQL tarafında ekstra bir yük oluşturuyordur. Aynı sorguyu birden fazla kez çalıştırmak zorunda kaldığımda bile performans artışı göremiyorum. Hatta bazen aynı sorguyu döngü içinde tekrar tekrar çağırınca, işler daha da kötüleşiyor. Acaba PDO’nun emülasyon modu mu kapalı olmalı, yoksa tamponlama (buffering) ile ilgili bir ayar mı kaçırıyorum?
Bir de şöyle bir durum var: Ben genelde MySQL kullanıyorum ve InnoDB motoru ile çalışıyorum. Acaba tablo yapısı veya indeksleme ile ilgili bir sorun olabilir mi? Hazırlıklı sorguların plan önbellekleme (query cache) ile nasıl etkileşime girdiğini tam olarak çözebilmiş değilim. Sizlerin deneyimleri neler? PDO ile hazırlıklı sorgularda performansı artırmak için hangi ayarları yapıyorsunuz? Ya da belki de mysqli’ye geçmek daha mantıklı mı? Konu hakkında fikri olan varsa lütfen yazsın, tartışalım.