23 Şubat 2011 Çarşamba

Automatic Workload Repository (AWR) Nedir, Nasıl Alınır ?


Bugün database' in performansı ile ilgili belli aralıklarla alınmakta olan snapshotların, bizler için ne ifade ettiğinden, nasıl alınabileceğinden, çalışma şeklinden ve nasıl configure edileceğinden bahsetmek istiyorum.

Automatic Workload Repository (AWR), problemi tespit etmek ve self-tuning yapabilmek amacıyla istatistik toplar. Toplanan bu istastikler ise hem memoryde hem de veritabanında saklanır.  

AWR istatistikleri neleri içerir, nelerden oluşur ;

*     Erişim ve kullanım istatistiklerini belirlemek için Object İstatistikleri,  
*     Session bazında, zaman modelli istatistikleri (ki alınan bu istatistikleri V$SYS_TIME_MODEL ve V$SESS_TIME_MODEL viewlerinden görebiliriz.)
*     Bazı system ve session istatistiklerini, (bu istatistikleride V$SYSSTAT and V$SESSTAT viewlerinden izleyebiliriz)
*     System üzerinde çalışma süresi ve CPU kullanımında top olan sql statmentları ile ilgili istatistikleri,
*     ASH istastikleri, son sesessionlara ait işlemler ile ilgili istastikleri
İçerir.

Database istatistikleri AWR aracılığıyla toplanır ve defaultunda enable olarak gelir ve bu opsiyon Statistics_level inital parametsiyle kontrol edilir. Awr’ ın çalışabilmesi için  statistic_level parametresi mutlaka TYPICAL veya ALL  olarak set edilmelidir. Defaultunda Typical olarak geldiği içinde AWR’ ın defaultu enable’ dır.  Bu değer BASIC olarak set edildiğinde artık database’ in istatistikleri toplanmayacağı anlamına gelmektedir. (AWR disable olacağından) Bu parametrenin BASIC olması performans açısından da (tabloların zaman içerisinde structure’ ları, size’ ları, indexleri değişeceğinden, çalışan sql’ lere ait execution planları da zamanla yanlış ve yavaş çalışmaya başlayacağından) olumsuz sonuçlar doğuracaktır. Dolayısıyla bu önerilen bir durum değildir. AWR,  database’ in istatistiklerini belirli periyodlarda otomatik olarak alır, eğer statistics_level parametresi BASIC ise yani AWR disable ise, manuel olarak DBMS_WORKLOAD_REPOSITORY package’ ı kullanılarak AWR istatistikleri alabilirsiniz. Ancak system istatistiklerinin büyük bir kısmı (segment istatistikleri ve memory advisor bilgileri gibi) disable olacağından  anlık olarak alınmaya çalışılan istatistikler tam olmayabilir.
Ne olduğundan bahsettik, şimdi biraz da Automatic Workload Repository ile ilgili kavramlar üzerinde duralım biraz, sonrasında yönetimi ile devam edeceğiz ;

*  Snapshots ;

Snapshots, ADDM tarafından performans karşılaştırmaları yapmak için kullanılan, belirli bir zaman aralığına ait verilerin history bilgisini turarlar. Oracle’ ın kurulumu ile birlikte default olarak her saat başında otomatik olarak çalışır ve saat başında alınan bu snapshot’ larıda 8 gün boyunca saklar.  Saat başında otomatik olarak alınmasının yanında, istenildiği anda manuel olarak da snapshot alınabilir. AWR tarafından alınan snapshotlar, Automic Database Diagnostic Monitor (AADDM) tarafında da otomatik olarak incelenmektedir.
AWR raporları, iki dönem arasındaki performansı karşılaştırarak, performans kaybına yol açan sql statementlarının tespit edilmesine yardımcı olur. Oracle 10g ile birlikte tanışmış olduğumuz AWR ve ADDM, kullanıcılardan performans ile ilgili şikayetlerin arttığı zamanlarda sorunun tespiti açısından ciddi rol oynamaktadırlar.

*  Baselines ;

Baseline, belli bir zaman aralığındaki performans ile ilgili dataları içerir.

*  Adaptive Thresholds

Adaptive thresholds’ lar performans ile ilgili sorunları tespit ve monitor etmeye yardımcı olur. Bunu, tanımlayacağınız thresholdlar da otomatik olarak warning/critical alert seviyeleri bazında yapabiliriz.

Atomatic Workload Repository Yönetimi

*  Snapshot Yönetimi

Oracle database kurulumu ile birlikte default olarak her saat başı otomatik olarak snaphot’ ların alınmaktadır. Alınan bu snapshotların saklanmasıda default olarak 8 gün dür. İhtiyaç halinde DBMS_WORKLOAD_REPOSITORY package’ı ile manuel olarak snapshot create, drop veya edit edebiliriz. Bu package kullanabilmek için user’ ın DBA yetkisine sahip olmalıdır. Manuel olarak snapshot create – drop edilmesi işlemi özellikle enterprise manager konsolu kullanamadığımız durumlarda (ki kimiz zaman sistemde yaşanan problemlerden dolayı zaman zaman konsolu kullanamayabiliyoruz) ciddi önemli olduğu durumlarla karşılaşabiliriz. Dolayısıyla sadece bu işlem için değil, database seviyesinde yapacağımız tüm işlemlerin sql komutları ile nasıl yapıldıklarını bilmemiz zaman zaman hayati önem taşıyabiliyor.

Manuel olarak bahsettiğimiz bu işlemleri şimdi sırası ile nasıl yapabileceğimize bakalım;
(aşağıda belirtilen işlemlerin aynısı konsol üzerinden de yapılabilir ben burada sadece konsolu kullanmadan nasıl yapabileceğimiz üzerinde duracağım)

Manuel Snapshot create etmeye çalışalım;

BEGIN
  DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();
END;
/

PL/SQL procedure successfully completed

Yukarıdaki scriptte snapshot kısmında sonraki “()” alanı doldurmadan direk çalıştırdık. Buraya TYPICAL  veya ALL da yazabilirdik. Null  olarak gönderdiğimizde statistic_level parametreniz ne olarak set etmişseniz onu dikkate alıyor.

Şimdi almış olduğum son snapshot’ ı drop etmek isteyelim ;

BEGIN
  DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE (low_snap_id => 6495,
                           high_snap_id => 6495, dbid => 2656835042);
END;
/

PL/SQL procedure successfully completed

Bu şekilde sadece seçmiş olduğunuz snapshotı drop edebileceğiniz gibi bir aralık içerisindeki tüm snapshotlarıda drop edebilirsiniz.

Snapshot ayarlarını modify etmeye çalışalım ;

BEGIN
  DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS( retention => 43200,
                 interval => 30, topnsql => 100, dbid => 3310949047);
END;
/

PL/SQL procedure successfully completed

Yapılan bu değişikliği şöyle tanımlayabiliriz; retention parametresi ile alınan snapshotların saklanma süresi 43200 dakikaya yani 30 güne, interval 30 ile snapshot alınma sıklığı 30 dak’ ya, topnsql 100 ile snapshotlara dikkate alınanacak top sql sayısı 100’ e set edilmektedir. Dbid parametresi ise üzerinde işlem yapmakta olduğunuz database’ in dbis’ sini ifade etmektedir. (select dbid from v$database ile bulunabilir)

Snapshot ayarları ile ilgili yapmış olduğunuz bu değişiliklerin history’ si neDBA_HIST_WR_CONTROL view’ ini select ederek görebilirsiniz.

select * from  sys.DBA_HIST_WR_CONTROL

DBID                SNAP_INTERVAL                      RETENTION                             TOPNSQL
2040370613    +00 01:00:00.000000              +07 00:00:00.000000               DEFAULT

AWR ile tüm testleri 11gR2 ortamında yaptığımdan dolayı farklı versiyonlarda bu selectin sonuçu farklı çıkacaktır. (örneğin 10gR2 de topnsql alanı olmayacaktır)

*  Baseline Yönetimi

Baseline’ lar sistemin optimum olarak çalıştığı bir dönemde create edilip problem oluştuğu dönemde nelerin problem teşkil ettiğini yani iki dönem arasındaki farkı ne olarak görebilmek için alınır. (veya yoğun dönemlerde oluşturulup başka bir aralık ile karşılaştırmamıza olanak sağlar) Baseline’ da iki şekilde create edebiliriz. Konsol üzerinden ve DBMS_WORKLOAD_REPOSITORY package’ ını kullanarak. Package ile nasıl create, drop veya modify baseline yapabiliriz bunlara bakalım kısaca;

create etmek için ;

öncelikle hangi aralığa ait snapshotları kullanarak baseline create edeceğiz buna kara veriyoruz. Aşağıdaki sql’ den mevcut snapshotlara bakabiliriz;

select * from DBA_HIST_SNAPSHOT ;

sonra ;

BEGIN
    DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE (start_snap_id => 6517,
                   end_snap_id => 6518, baseline_name => 'deneme baseline',
                   dbid => 2656835042, expiration => 30);
END;

PL/SQL procedure successfully completed

Artık oluşturmuş olduğumuz yeni baseline’ nıda ;

select * from DBA_HIST_BASELINE 

view’ inde görebiliyoruz.

Create scriptinde expiration parametresini null gönderirseniz asla expire olmayacak demiş olursunuz.bizim bu örneğimizde 30 olarak set etmiş olduk.

Drop etmek için ;      

Aynı mantıkda, hangi baseline’ i drop etmek istediğimize DBA_HIST_BASELINEtablosundan bakıp karar veriyoruz. (tabi eğer bilmiyorsak)

Sonra;

BEGIN
  DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE (baseline_name => 'deneme baseline',
                  cascade => FALSE, dbid => 2656835042);
END;

PL/SQL procedure successfully completed

Ile drop edebiliriz.

Daha önce alınmış olan bir baseline’ nın adını rename etmek için ;

BEGIN
    DBMS_WORKLOAD_REPOSITORY.RENAME_BASELINE (
                   old_baseline_name => 'deneme baseline',
                   new_baseline_name => 'dene baseline',
                                               dbid => 2656835042);
END;

PL/SQL procedure successfully completed

Ile yapabiliriz.

İşinize yarayacağını düşündüğüm bazı Automatic Workload Repository ile ilgili wievler ;

V$ACTIVE_SESSION_HISTORY = Database’ deki active sessionlara ait bilgilerin turulduğu view,

DBA_HIST_ACTIVE_SESS_HISTORY = memorydeki en son system aktivitelerine ait bilgileri içerir,

DBA_HIST_BASELINE = database’ deki baseline’ leri listeler,

DBA_HIST_BASELINE_DETAILS = baseline’ lar hakkında detaylı bilgileri içerir,

DBA_HIST_BASELINE_TEMPLATE = system tarafından generate edilen baseline template’ leri hakkında bilgiler içerir,

DBA_HIST_DATABASE_INSTANCE = database environment’ ları hakkında bilgileri içeir,

DBA_HIST_SNAPSHOT = database’deki snapshotlar hakkında bilgileri içerir,

DBA_HIST_WR_CONTROL = AWR’ ın kontrol ayarları ile ilgili bilgileri içerir.

AWR raporu create etmek için ;

Yine konsolu kullanmadan awr raporu create etmek için aşağıdaki adımları izleyebiliriz. Tabi bunları yapan kullanıcının dba yetkisine sahip olması gerektiğini de unutmayalım.

Sql komut satırıdan aşağıdaki sql dosyasını çağırıyoruz;

@$ORACLE_HOME/rdbms/admin/awrrpt.sql

[oracle@tester1 admin]$ sqlplus "/as sysdba"

SQL*Plus: Release 11.2.0.1.0 Production on Wed Feb 23 14:43:32 2011

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>   
SQL>
SQL> @$ORACLE_HOME/rdbms/admin/awrrpt.sql;

Current Instance
~~~~~~~~~~~~~~~~

   DB Id            DB Name         Inst Num          Instance
-----------          ------------         --------             ------------
 2656835042   TEST                 1                     TEST

Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Would you like an HTML report, or a plain text report?
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
Enter value for report_type: html

Type Specified:  html

Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   DB Id            Inst Num DB Name      Instance     Host
------------         -------- ------------ ------------ ------------
* 2656835042        1   TEST          TEST          tester1

Using 2656835042 for database Id
Using          1 for instance number

Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed.  Pressing without
specifying a number lists all completed snapshots.
  
Enter value for num_days: 1

Listing the last day's Completed Snapshots
                                                        Snap
Instance     DB Name        Snap Id    Snap Started    Level
------------ ------------ --------- ------------------ -----
TEST     TEST      6506 23 Feb 2011 00:00      1
                               6507 23 Feb 2011 01:00      1
                               6508 23 Feb 2011 02:00      1
                               6509 23 Feb 2011 03:00      1
                               6510 23 Feb 2011 04:00      1
                               6511 23 Feb 2011 05:00      1
                               6512 23 Feb 2011 06:00      1
                               6513 23 Feb 2011 07:00      1
                               6514 23 Feb 2011 08:00      1
                               6515 23 Feb 2011 09:00      1
                               6516 23 Feb 2011 10:00      1
                               6517 23 Feb 2011 11:00      1
                               6518 23 Feb 2011 12:00      1
                               6519 23 Feb 2011 13:00      1
                               6520 23 Feb 2011 14:00      1
  
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 6519   
Begin Snapshot Id specified: 6519

Enter value for end_snap: 6520
End   Snapshot Id specified: 6520

Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrrpt_1_6519_6520.html.  To use this name,
press to continue, otherwise enter an alternative.

Enter value for report_name: deneme_awr

Using the report name deneme_awr
Report written to deneme_awr
SQL>

awrrpt.sql’ i komut satırından başlatııkdan sonra sırası ile istenilen bilgileri giriyoruz. Bu bilgileri sırasıyla açıklayalım ;

Enter value for report_type: html      
(rapor çıktısının formatını belirliyoruz, text veya html giriyoruz)

Enter value for num_days: 1
(snapshot id’ si seçmek için kaç günlük snapshotları görmek istediğimizi söylüyoruz)

Enter value for begin_snap: 6519
Enter value for end_snap: 6520
(alacağımız raporun hangi snapshotları dikkate alması gerektiğini söylüyoruz)

Enter value for report_name: deneme_awr
(raporun ismini set ediyoruz. Hangi dizinde çalıştırdıysanız o dizin altına belirlediğiniz isimle dosyayı create ediyor)

RAC kullanıyorsanız çalıştıracağınız file’ in ismi  awrgrpt.sql olacaktır. (@$ORACLE_HOME/rdbms/admin/awrgrpt.sql)

Spesifik bir instance için AWR raporu create etmek için çalıştırılması gereken file awrrpti.sql olacaktır.  
(@$ORACLE_HOME/rdbms/admin/awrrpti.sql)
Bu awrrpti.sql çalıştırıldığından yukarıdakinden farklı olarak sizden hangi instance için almanız gerekiyor ise o instance ait dbis bilgisini girmenizi isteyecektir.

Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   DB Id    Inst Num DB Name      Instance     Host
----------- -------- ------------ ------------ ------------
 3309173529        1 MAIN         main         examp1690
 3309173529        1 TINT251      tint251      samp251

Rac kullanıpda, spesifik bir instance için AWR raporu create etmek için çalıştırılması gereken file awrgrpti.sql olacaktır.  
(@$ORACLE_HOME/rdbms/admin/awrgrpti.sql)

Burada da istenilen bilgiler yukarıdaki örnekdeki gibi girilmesi gerekmektedir.

Şimdi işi biraz daha detaylandırıp snapshot içerisinde bizim için problemli olduğunu düşündüğümüz sadece bir sql için awr raporu almaya çalışalım. Bunun için kendi test ortamımda şöyle bir case oluşturdum. 06y3gf61vurz7 id’ li bir sql’ im var ve sabah 08 – 09 arasında sistemde kaynaklanan yoğunluğun bu sql’ den kaynaklandığını düşünelim ve araştıralım ;

Yaptığım işleme ait log ;

[oracle@tester1 admin]$ sqlplus "/as sysdba"

SQL*Plus: Release 11.2.0.1.0 Production on Wed Feb 23 15:20:14 2011

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> @$ORACLE_HOME/rdbms/admin/awrsqrpt.sql

Current Instance
~~~~~~~~~~~~~~~~
   DB Id    DB Name      Inst Num Instance
----------- ------------ -------- ------------
 2656835042 TEST                 1 TEST

Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Would you like an HTML report, or a plain text report?
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
Enter value for report_type: text

Type Specified:  text

Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   DB Id     Inst Num DB Name      Instance     Host
------------ -------- ------------ ------------ ------------
* 2656835042        1 TEST          TEST          tester1

Using 2656835042 for database Id
Using          1 for instance number

Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed.  Pressing  without
specifying a number lists all completed snapshots.

Enter value for num_days: 1

Listing the last day's Completed Snapshots 
                                                        Snap
Instance     DB Name        Snap Id    Snap Started    Level
------------ ------------ --------- ------------------ -----
TEST      TEST     6506 23 Feb 2011 00:00      1
                               6507 23 Feb 2011 01:00      1
                               6508 23 Feb 2011 02:00      1
                               6509 23 Feb 2011 03:00      1
                               6510 23 Feb 2011 04:00      1
                               6511 23 Feb 2011 05:00      1
                               6512 23 Feb 2011 06:00      1
                               6513 23 Feb 2011 07:00      1
                               6514 23 Feb 2011 08:00      1
                               6515 23 Feb 2011 09:00      1
                               6516 23 Feb 2011 10:00      1
                               6517 23 Feb 2011 11:00      1
                               6518 23 Feb 2011 12:00      1
                               6519 23 Feb 2011 13:00      1
                               6520 23 Feb 2011 14:00      1
                               6521 23 Feb 2011 15:00      1

Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 6514
Begin Snapshot Id specified: 6514

Enter value for end_snap: 6515
End   Snapshot Id specified: 6515

Specify the SQL Id
~~~~~~~~~~~~~~~~~~
Enter value for sql_id: 06y3gf61vurz7  
SQL ID specified:  06y3gf61vurz7

Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrsqlrpt_1_6514_6515.txt.  To use this name,
press  to continue, otherwise enter an alternative.

Enter value for report_name: 06y3gf61vurz7_awr_report
Using the report name 06y3gf61vurz7_awr_report
  
WORKLOAD REPOSITORY SQL Report
 Snapshot Period Summary
..
..
..
..
Report written to 06y3gf61vurz7_awr_report
SQL>

Bu bize şunu veriyor aslında, spesifik olarak bu şekilde bir tespitiniz var ise tüm AWR raporu içerisinde bir sürü veriye bakmaktansa, hızlı bir tespitte bulunabilmek adına bu şekilde alabilirsiniz. Ben rapor çıktısını yazıyı çok uzatmamak adına eklemedim. Sizler test ettiğinizde zaten görüyor olacaksınız.

AWR’ ın farklı diğer özellikleri ile devam ediyor olacağım.  
Şimdilik görüşmek üzere.



Kamil TÜRKYILMAZ

Hiç yorum yok: