Birden Çok Oracle Örneği - bu iyi bir uygulama mı?


9

Müşterilerimden biri, ürünümüzün db'sini halihazırda 3 Oracle örneğine sahip olan bir Solaris makinesine yerleştirdi. Yani, şu anda aynı makinede çalışan 4 Oracle örneği var. Ve şimdi performans sorunları yaşıyoruz.

Diğer örneklere veya makineye erişimim yok ve sahip olduğum tüm araçlar alert.log, AWR ve ADDM. Birden fazla örnekle ilgili bir şey olduğunu biliyorum, ama kanıtlayamıyorum.

Benim sorum şu: benzer bir durum yaşadınız mı? Bununla nasıl başa çıkmalıyım? Birden çok örnekle ilgili performans sorunlarının nedenini nasıl belirleyebilirim?

Yanıtlar:


8

Isaac, tercihen bir örneği bir sunucuda çalıştırırız ve farklı uygulamaları o tek veri veritabanında şema ve hizmetler olarak uygularız. Sunucunun yeterli belleği varsa, uygulamaların tümü iyi Oracle vatandaşları gibi davranırsa sorun olmaz. Bağlama değişkenlerini kullanmayan bir uygulama olur olmaz, konakçıda büyüyen bir ağrı olur. Mevcut bağlantıları yeniden kullanmak yerine, her birkaç saniyede bir yeni bağlantılar oluşturmaya devam eden uygulamalar için aynıdır. Otomatik taahhüt gibi şeyler de durumu iyileştirmeye yardımcı olmaz. Başvurunuzun normal davranışı nedir? Büyük güncellemeler yapıyor mu? Ne zaman bir taahhütte bulunur? Saat / saat ne kadar yineleme yapılır? Uygulamanız bağlama değişkenleri kullanıyor mu? Çoğu durumda, çevrimiçi yeniden dağıtım dosyalarının konumu kritiktir. Uygulama çok fazla yineleme üretiyorsa (veya bunu yapan başka bir uygulamayla rekabet ederse), oturum günlüğü yazma işleminin tamamlanmasını beklediği için logwriter yavaşlar ve büyük bir performans düşüşüne neden olur. Müşteriye, yinelemelerin özel raid-10 disklerinde bulunduğu bir disk düzeni verin ve bunun ne kadar yardımcı olduğunu görün. Ayrıca bellek ayırma durumunu da öğrenin. Kullanılabilir belleğin adil bir şekilde yeniden dağıtılması gerekebilir.

Umarım bu yardımcı olur


haklısın. Örneğimizi izliyor ve mümkün olan her yerde optimizasyon yapıyoruz. Ancak performans istikrarlı değil, bazen açıklanamayan bir sebep olmadan (bizim tarafımızdan) düşüyor
Isaac A. Nugroho

Isaac, veritabanı ne sıklıkta yeniden başlatılıyor, hangi sürümü var ve otomatik istatistikler işlemi tarafından oluşturulan sütunlarda histrogramlarınız var mı? Bağlama değişkenleri ve optimize edici ön izleme kullanıyor musunuz?
ik_zelf

2

Aynı sunucuda birden fazla örnek çalıştırmak mümkündür ve bazı durumlarda gereklidir. Oratab, birden fazla örneği yönetme özel olarak tasarlanmıştır. Birden fazla bağımsız uygulamanız olduğu durumlarda, her bir uygulama için bir örnek olması tercih edilebilir.

Yeterli belleğe sahip olmak çok önemlidir. Oracle, SGA'yı paylaşılan bellekte oluşturur. Yeterli belleğiniz yoksa SGA veya işlemler takas etmeye başlar. Bu daralma olarak bilinir ve önemli bir performans cezasına neden olur.

Örnekleri daha küçük bir SGA ile çalışacak şekilde ayarlamak mümkün olabilir. Oracle, SGA boyutunu ayarlamanıza yardımcı olacak araçlar sunar. Örneklerden herhangi birinin aşırı büyük bir SGA'sı varsa, tüm örnekleri cezalandırır.

Bellek için önemli olan bir diğer kullanım ise arabellek alanıdır. Bu ikincil önbellek görevi görür ve önemli okuma G / Ç'lerini ortadan kaldırabilir.

Çalıştırmak sar(Unix temelleri O / S olduğunu varsayarak) size sorunun nerede olduğu konusunda iyi teşhisler verebilir. Muhtemelen sorunlar ya takas ya da disk G / Ç doygunluğudur. RAM eklemek büyük olasılıkla bu sorunlardan birini çözecektir.

Disk G / Ç doygunluğu, bazı tablo alanlarını diğer disklere taşıyarak da çözülebilir. Genelde Oracle'ı, G / Ç'nin mümkün olduğunca çok diske dağıtılacak şekilde yapılandırıyorum.

EDIT: Bunlar ayrı örnekler gerektirebilecek birkaç durumdur.

  • Aynı sunucuda farklı Oracle sürümleri çalıştırmanız her zaman gereklidir. Uygulamalar her zaman sertifikalı değildir veya en son sürümle çalışabilir.
  • Zaman içinde bir noktaya otomatik olarak geri döndürülebilen bir örnek isteyebilirsiniz. (Cesaretimi kırmama rağmen, bunu otomatik bir test ortamı için kullandım.)
  • Uygulamalarda sabit kodlu şema başvurunuz varsa, ad alanı çarpışmalarıyla başa çıkmak için farklı örneklere ihtiyacınız olabilir.
  • Güvenlik gereksinimlerinin ayrı örneklerin kullanılmasıyla başa çıkması daha kolay olabilir. Bu durumda farklı sunucular kullanmak uygun olabilir.
  • Aynı veritabanının farklı sürümlerinin (geliştirme, test, kullanıcı kabulü, eğitim ve üretim) aynı sunucuda çalıştırılması ayrı örneklerle daha güvenlidir. Tüm bu ortamları aynı sunucuda çalıştırmam, ancak genellikle aynı sunucuda iki veya daha fazla çalıştırmam.

Birden çok örneği çalıştırmanın gerekli olduğu yerlerde örnekler verebilir misiniz?
ScottCher

1
@ScottCher Cevabımı bazı durumlar için düzenledim.
BillThor

1

En kritik kaynak RAM'dir.

Çalışan her Oracle örneği, henüz başlatıldığında ve yük altında değilken kendi RAM'ini ayırır.

10 örnekli 10g ve 8 örnekli 11g çalıştırıyoruz, ancak bunlar geliştirme sunucuları. İşletim sistemini yeniden başlattıktan sonra bazı Oracle hizmetleri otomatik olarak başlamaz ve manuel olarak başlatılmalıdır: Oradim -startup -sid xxx.

Otomatik Bellek Yönetimi'ni kullanmaya yeni başlıyoruz, ancak durum, disk alanı kadar veritabanı ekleyebileceğiniz SQL Server'dan farklı kalıyor.

Sizin durumunuzda, bir makinede daha fazla örnekle, her örnek için SGA küçülür, daha az derlenmiş sql önbelleğe alınabilir ve makinenin daha fazla sql derlemesi yapması gerekir, bu da performansı azaltır.

RAM eklemek durumunuza yardımcı olabilir.


2
SQL sunucusunun farklı olduğunu söylemenizin nedeni daha çok isimlendirmektir. Bir grup süreç ve onun özel hafızası bir örnektir. Bir SQL Server veritabanı eklerseniz ve yeni bir işlem eklemezseniz, bu bir örnek değildir. Bu durumda, bir şema eklemek çok daha yakındır.
Stephanie Page
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.