Çok yavaş bir SQL sorgusuna bakıyordum (JBoss 5.1'de konuşlandırılan Hazırda Bekletme özelliğini kullanan bir Java uygulamasından kaynaklanan). Bu özel sorgu yaklaşık 10 bin kayıt döndürdü ancak yine de 40 veya daha fazla sürdü.Bir Java uygulamasından Oracle TNS verimsizlikleri (birçok gidiş geliş, gecikme) için herhangi bir çözüm var mı?
Veritabanındaki trafiği kokladım (wireshark TNS için bir disektöre sahip) ve beklenmedik bir şey buldu. Veriler sunucudan geldiğinde, her sonuç satırı kendi TNS paketindeydi. Ayrıca, her bir TNS paketi, bir diğeri veritabanından gönderilmeden önce istemci (yani uygulama sunucusu) tarafından onaylandı. 10K kayıtları için bir paket almak ve onaylamak için 10K gidiş dönüşler var. Performans üzerindeki etkisi çok büyük.
Bu çok verimsiz. TCP, daha büyük paketlere izin verir ve gecikmeyi azaltmak ve verimi artırmak için bir dizi mekanizmaya (kayan pencereler, gecikmeli ACK'ler) sahiptir. Ancak, bu durumda, kendi müzakeresini ekleyen TNS protokolüdür.
Aynı sorguyu Oracle'ın SQL Developer'ından çalıştırırsam, bu deseni göremiyorum. Sorgu, binlerce gidiş-dönüş olmadan yaklaşık 1/10'luk bir sürede tamamlanır.
kısa sürüm: Oracle tel protokolü (TNS) sorgu sonuç satıra bir TNS paket içinde veri iletmek için görünmektedir ve sunucu bir sonraki göndermeden önce müşteri tarafından kabul edilmesi için, her paket gerektirir.
Bu konuda bazı bilgiler buldum [here] [1] ('tnsnames.ora dosyasındaki' SDU ve TDU parametreleri 'bölümüne kadar ilerleyin).
Ve bu nedenle sorum şu: Oracle sürücüsünün davranışını kontrol etmek mümkün mü (10.2.0.4.0 kullanıyorum) TNS protokolü daha verimli? Yine, bu JBoss içinde konuşlandırılmış oldukça standart bir J2EE uygulaması.
Çok teşekkürler!
Hey, derinlik için teşekkürler Benzer durumlara sahip insanlar için bazı ipuçları ile .. Oy verdi .. – TonyP