8- Log File Sync Waits
- Aşağıda, veritabanınızdaki yüksek log file sync waits bekleme durumlarıyla başa çıkmak için iki strateji bulunmaktadır.
• Bekleme başına "kısa ortalama" bekleme süresine sahip çok sayıda bekleme fark ederseniz, bu veritabanı tarafından çok sayıda commit bildirimi yayınlandığının bir göstergesidir. Commit davranışını, commitleri yığın hale getirerek değiştirmelisiniz.
Örneğin, her satırdan sonra commit yerine her 500 satırdan sonra commit gelmesini sağlayabilirsiniz.
• Redolog dosyası eşitleme olayından dolayı biriken büyük miktarda bekleme süresinin, redolog dosyasına yazma için uzun beklemelerden kaynaklandığını fark ederseniz (bu event için yüksek average time olursa), I/O subsystemin ne kadar hızlı olduğu daha önemlidir.
Contention u azaltmak için çeşitli disklerdeki redolog dosyalarını yeniden oluşturabilirsiniz. Diskleri, bu disklerdeki diğer dosyalara izin vermek yerine redologlar için tamamen ayırıp ekleyemeyeceğinizi de düşünebilirsiniz
LGWR arabellekleri diske yazarken, bu, I/O contention u azaltacaktır. Son olarak, uzun soluklu bir çözüm olarak, redologları daha hızlı aygıtlara, örneğin bir RAID 5 aygıtından bir RAID 1 aygıtına taşıyabilirsiniz.
Nasıl Çalışır:
- Bir oturumda COMMIT deyimi çıktığında Oracle (aslında LGWR arka plan işlemi ile), bu oturumun redo bilgilerini otomatik olarak redo log dosyasına atar.
Veritabanı, denetimi client a döndürmeden önce commit kayıtlarını diske yazar. Böylece, sunucu işlemi, redologa yazılmasının tamamlanmasını bekler.
Varsayılan davranış budur, ancak COMMIT_WRITE başlatma parametresi ile veritabanı tamamlama davranışını da denetleyebilirsiniz.
Not: COMMIT_WRITE parametresi, Oracle Database 11.2'de kullanımdan kalkmış olan gelişmiş bir parametredir.
Performans üzerinde olumsuz etkileri olabileceği için, parametreyi tek başına bırakıp Oracle'ın varsayılan tamamlama davranışına güvenebilirsiniz.
- Session, LGWR işlemine, sessionun redo bilgisini, redolog buffer da diskteki redolog dosyasına
yazmasını söyleyecektir. LGWR işlemi, buffer içeriğini diske yazmayı bitirdikten sonra kullanıcı oturumunu gönderir.
Log file sync wait olayı, log bufferın LGWR tarafından diske yazılması sırasında beklemeyi ve
o bilginin oturuma gönderilmesini içerir. Server process, LGWR işleminin log buffer içeriğini redolog dosyasına yazmayı tamamladığına dair onay alana kadar beklemek zorunda kalacaktır.
- log file sync events olayları, log buffer içeriğinin redolog dosyalarına yazılması sırasında contention dan kaynaklanır.
Oracle'ın V$SESSION_WAIT viewında SEQ# sütununu arttırıp arttırmadığını kontrol edin.
Oracle, bu sütunu artırıyorsa, sıkışmış olabileceği için LGWR sürecinin kontrol edilmesi gerektiği anlamına gelir.
- Log file sync wait olayı, LGWR işleminin neden olduğu contention dan kaynaklandığından, bu beklemelerden kurtulmak için NOLOGGING seçeneğini kullanıp kullanamayacağınıza bakın. Tabii ki bir production sisteminde, veritabanı kullanıcı isteklerini işlerken NOLOGGING seçeneğini kullanamazsınız, bu nedenle çoğu durumda bu seçenek sınırlı bir kullanım alanı buluyor.
- Log file sync wait olayına, LOG_BUFFER başlatma parametresi için çok büyük bir değerin verilmesi de neden olabilir.
LOG_BUFFER parametresi için çok büyük bir değer, LGWR işleminin verileri redolog dosyasına daha az sıklıkla yazmaya yönlendirir.
Örneğin, LOG BUFFER'ı 12 MB'a ayarlarsanız, log_io_size iç parametresi yüksek bir değere ayarlanır.
Log_io_size parametresi, LGWR'nin redolog dosyalarına yazdığı zaman eşik gibi davranır.
LGWR, bir commit veya checkpoint olmadığında, log_io_size eşiğine ulaşılana kadar bekler.
Böylece, veritabanı bir COMMIT deyimi çıktığında LGWR işlemi, bir kerede redolog dosyalarına büyük miktarda veri yazmak zorunda kalır bunun sonucunda ise log file sync wait olayında bekleyen oturumlarla sonuçlanır.
Bunun nedeni, bekleme oturumlarının her biri, LGWR'nin redolog buffer içeriğini redolog dosyalarına yazmasını beklemesidir.
Veritabanı otomatik olarak log_io_size parametresinin değerini hesaplar, ancak bunun için aşağıdaki gibi bir komut vererek bir değer belirleyebilirsiniz:
SQL> alter system set "_log_io_size"=1024000 scope=spfile;