Minimizing System Contention(1- Response Time'ı Anlamak)

Response Time'ı Anlamak


Bazen bir kullanıcının bir başkasının çalışmasını, çoğunlukla uygulama tasarımındaki hatalardan
dolayı engelleyebilmesi mümkündür. Bu bölümde Oracle'ın kilitleri nasıl ele aldığı ve başkalarını engelleyen bir oturumun nasıl tanımlanacağı açıklanmaktadır.

Oracle veritabanı, kaynaklar için iki ana tür çekişme yaşayabilir. Birincisi, bir tablonun satırlarındaki transaction locks için çekişme(contention). İkinci tür çekişme, shared memory (SGA) alanları için eşzamanlı isteklerin ortaya çıkması, bu da  latch contention a neden oluyor.


Tipik kilitleme sorunlarını nasıl gidereceğinizin yanı sıra, veritabanızda çeşitli kilit çakışması(latch contention) türlerinin nasıl kullanılacağını göstereceğiz.

Oracle Wait Interface, bir Oracle instance ındaki farklı kaynak türlerini beklemek ve sınıflandırmak için Oracle'ın dahili mekanizması için kullanışlı bir addır. Oracle bekleme olaylarını anlamak instance tuning in anahtarıdır, çünkü yüksek bekleme süresi tepki süresini yavaşlatır. Bu bölümdeki Oracle Wait Interface i açıklayacağız ve size en yaygın Oracle bekleme olaylarını nasıl azaltacağımızı göstereceğiz. Oracle Wait Interface in sırlarını çözmek için çeşitli SQL komut dosyalarını nasıl kullanacağınızı ve ayrıca veritabanındaki çekişmeden sorumlu olan SQL deyimlerini ve oturumları hızlı bir şekilde izlemek için Oracle Enterprise Manager'ı nasıl kullanacağınızı göstereceğiz.



1. Response Time ı Anlamak
 - Veritabanındaki en önemli performans göstergesi tepki süresidir(response time). Yanıt süresi, bir clientın veritabanına gönderdiği bir sorgunun , veritabanından yanıt almak için gereken süreyi belirtir. Tepki süresi basitçe iki bileşenin toplamıdır:
  response time = processing time + wait time



 - Yukarıdaki ilişki sıklıkla R = S + W olarak gösterilir, burada R response time, S service time ve W wait time ı ifade eder.
processing time bileşeni, veritabanının isteği işleyişi ile harcanan gerçek zamandır. Öte yandan, wait time aslında veritabanı tarafından boşa harcanır. Bu, veritabanının, bir tablonun rows lock, library cache latch veya bir sorgunun tamamlanması gereken çok sayıda kaynağın herhangi biri gibi kaynakları beklemek için harcadığı zamandır. Oracle, yüzlerce bekleme olayına sahiptir, bunlardan bir düzine kadarı, yavaş çalışan sorguları gidermek için çok önemlidir.
 
 - Bekleme sürelerinin ve gerçek CPU işlemenin yüzdelerini bulmak için aşağıdaki sorguyu verin:
  SQL> select metric_name, value
     from v$sysmetric
     where metric_name in ('Database CPU Time Ratio',
     'Database Wait Time Ratio') and
     intsize_csec =
     (select max(INTSIZE_CSEC) from V$SYSMETRIC);
 
   METRIC_NAME     VALUE
   ————————————------------  ---------
   Database Wait Time Ratio 11.371689
   Database CPU Time Ratio  87.831890

 - Sorgu, Database Wait Time Ratio için çok yüksek bir değer gösteriyorsa veya Database Wait Time Ratio,  Database CPU Time Ratio dan çok yüksekse, veritabanı işlemleri waiting için daha fazla zaman harcıyorsa bekleme olaylarını tanımlamak için bu konuda daha derine inmeliyiz.

 - Bekleme olayının gerçekten ne beklediğini ve her bir kaynağın ne kadar süre beklediğini ayrıntılı bilgi edinmek için aşağıdaki Oracle görünümlerini kullanabilirsiniz.


   V$SESSION    : her oturumda beklenen olayın yanı sıra şu anda beklediği olayın gösterilmesini sağlar.
   V$SESSION_WAIT   : şu anda beklenen olayı veya her oturum için son olarak beklenen etkinliği listeler. Bekleme durumunu ve bekleme süresini de gösterir.
   V$SESSION_WAIT_HISTORY : her geçerli oturum için son on bekleme olayını gösterir.
   V$SESSION_EVENT   : her oturum için beklenen etkinliklerin birikim geçmişini gösterir. Bu viewdeki veriler yalnızca bir oturum aktif olduğu sürece kullanılabilir.
   V$SYSTEM_EVENT   : her bekleme olayını ve instance başlattığınızdan bu etkinlik için tüm instanceın beklediği süreyi gösterir.
   V$SYSTEM_WAIT_CLASS  : bekleme sınıflarına göre bekleme olayı istatistiklerini gösterir.


Nasıl Çalışır:
 - Performansı ayarlamadaki amacınız toplam yanıt süresini en aza indirmektir.  Database Wait Time Ratio (Yukarıdaki bölümünde gösterilen sorguda) yüksekse, bekleme durumları veya tıkanıklıklar nedeniyle sisteminizdeki yanıt süresi de yüksek olacaktır. Öte yandan, Database CPU Time Ratio için yüksek değerler, birkaç bekleme veya darboğazla birlikte iyi çalışan bir veritabanını gösterir.
 Database CPU Time Ratio, veritabanının kullandığı toplam CPU'nun Oracle zaman modeli istatistik DB time olarak bölünmesiyle hesaplanır.
 - Oracle, veritabanında hareket türüne göre harcanan zamanı ölçmek için zaman modeli istatistiklerini kullanır.
 Database time veya DB time, veritabanı çağrılarında harcanan toplam süreyi temsil eden ve toplam instance iş yükünün bir ölçüsü olarak kullanılan en önemli zaman modeli istatistiğidir.
 DB time, tüm oturumların CPU süresini ve bekleme süresini ekleyerek hesaplanır (boşta kalma olayları için beklemeler hariç).
 Bir AWR raporu, AWR snapshotları tarafından kapsanan süre boyunca instance için toplam DB timeı gösterir. time model statistic DB CPU, instance için DB zamanının çoğunu tüketirse, veritabanının çoğu zaman etkin şekilde işlediğini gösterir.
 DB time ayarlaması veya veritabanının zamanını nasıl harcadığını anlamak, performansı anlamanın temelidir.

 - Veritabanı çağrıları yapan ön planlı oturumlar tarafından harcanan toplam süre, I/O zamanı, CPU zamanı ve boşta kalmayan olayları beklemek için harcanan zamandan oluşur.
 Sistem yükü arttıkça DB time artacaktır; diğer bir deyişle, daha çok kullanıcı oturum açtığında ve daha büyük sorgular yürütüldüğünde, sistemin yükü o kadar yüksek olur.
 Bununla birlikte, sistem yükündeki artışın olmaması durumunda bile, I/O veya uygulama performansındaki bozulma nedeniyle DB time artabilir. Uygulama performansı düştükçe bekleme süresi artacak ve dolayısıyla DB süresi (yani yanıt süresi) artacaktır.

 - DB time dahili enstrümantasyon, ASH, AWR ve ADDM tarafından yakalanır ve çeşitli viewleri sorgulayarak veya Enterprise Manager aracılığıyla detaylı performans bilgilerini bulabilirsiniz.

 - V$SESSION_WAIT viewı, V$SESSION_EVENT ve V$SYSTEM_EVENT viewlerinden daha ayrıntılı bilgi gösterir. Her iki V$SESSION_EVENT ve V$SESSION_WAIT viewleri,
 örneğin db dosyası olayının okunması gibi beklemeler olduğunu gösterirken, bunlara ek olarak V$SESSION_WAIT viewı dosya numarasını (P1), okunan blok numarasını (P2) Ve okunan blokların sayısı (P3) bilgilerinide gösterir. Bu görünümdeki P1 ve P2 sütunları, şu anda gerçekleşmekte olan bekleme olayında yer alan parçaları tanımlamanıza yardımcı olur.


Note: Automatic Workload Repository (AWR) bekleme olayıyla ilgili analiz için V$SYSTEM_EVENT viewını sorgular.

 - İlk bekleme olaylarını o olay için beklenen toplam ve ortalama zamana göre sıralamak için V$SYSTEM_EVENT görünümüne sorabilirsiniz.
 Ardından, event listesinin en üstündeki etkinliklere odaklanarak bekleme olayı düzeyine ulaşabilirsiniz.
 Aynı bilgiyi V$WAITSTAT viewından sorgulayabileceğinizi unutmayın. blocked ve blocking kullanıcılar ve şu anki bekleme olayları hakkında bilgi sağlamanın yanı sıra V$SESSION viewı, nesne için dosya numarası ve blok numarası sağlayarak soruna neden olan nesneleri de gösterir.

Constraint Disable-Enable

Disable Constraint BEGIN   FOR c IN   (SELECT c.owner, c.table_name, c.constraint_name    FROM user_constraints c, user_tables t    WHERE...