Merhaba Arkadaşlar,

Bu yazımda sizlere Oracle Veritabanlarını yönetirken performans problemleri sırasında en çok ihtiyaç duyduğumuz AWR ( Automatic Workload Repository ) raporlarının ne olduğunu ve nasıl alındığını anlatacağım.

AWR3

Oracle Veritabanı, belli aralıklarla MMON ( Manageability Monitor Processes  ) background process ini tetikleyerek Veritabanı istatistiklerini ve İş Yükü (Workload) bilgilerinin anlık Snopshotını alıp SYSAUX tablespace i içinde sys şemasına ait bir kaç tabloya bu verileri kaydeder.

AWR5

 

Snapshotlar halinde alınan bu Veritabanı İstatistik bilgileri Default olarak 60 dakikada bir alınıp sys şemasının altındaki WRM$_SNAPSHOT,WRM$_DATABASE_INSTANCE,WRM$_WR_CONTROL, WRH$_SQL_PLAN, WRH$_SEG_STAT,  WRM$SNAP_ERROR VE WRM$_BASELINE vbvb..  tablolara kaydedilir ve bu tablolarda default olarak 7 gün boyunca saklanılır. Bu tablolardan DBA_HIST_SNAPSHOT, DBA_HIST_DATABASE_INSTANCE, DBA_HIST_WR_CONTROL, DBA_HIST_SQL_PLAN, DBA_HIST_SEG_STAT, DBA_HIST_SNAP_ERROR VE DBA_HIST_BASELINE adlı view ler oluşturulmuş  ve AWR raporu için bu viewler kullanılır.

İşte Oracle bu View lerden elde ettiği istatistik verilerini kullanarak oluşturduğu geniş çaplı rapora AWR ( Automatic Workload Repository ) raporu denir. AWR raporları ilk olarak Oracle 10g ile bize tanıtılmıştır. Bu ayrıntılı Veritabanı İstatistik raporunu  özellikle problem anlarında yada problemin tespiti sırasında çokça kullanırız. Peki ama bu AWR Raporu sistem hakkında detaylı bilgi vermek için Veritabanından neler topluyor ? Toplanan bu veriler aşağıdaki gibidir.

  • Sistem kaynaklarını en yoğun kullanan SQL ler toplanır.
  • Veritabanı Nesnelerinin (Table,index,trigger vbvb) kullanım istatistikleri toplanır.
  • V$SESSTAT VE V$SYSSTAT gibi view lerden Anlık çalışan sessionların ve sistemin istatistik bilgileri toplanır.
  • V$ACTIVE_SESSION_HISTORY view inden Aktif çalışan sessionların geçmiş bilgileri toplanır.
  • Performance Problemlerini tespit edebilmek için Wait Events ler toplanır.
  • V$SYS_TIME_MODEL ve V$SESS_TIME_MODEL gibi view lerden process lerle alakalı DB Time bilgileri toplanır.

İşte Oracle yukarda maddeler halinde belirttiğim önceden toplanan veritabanı istatistik verilerinini AWR ( Automatic Workload Repository ) adında Text yada HTML formatında mükemmel bir Rapor olarak bize sunar. Artık yetenekli bir Veritabanı Yöneticisi Bu AWR raporuyla var olan bir Performance problemini hemen tespit edip Performance tuning adına gerekli aksiyonu alabilir. Şimdi POC çalışmaları yaptığım POCDB veritabanımdaki snapshotlara aşağıdaki gibi bakalım.

Veritabanında tutulan Tüm Snapshot lara aşağıdaki scriptle bakılır.

SQL> select snap_id, begin_interval_time,end_interval_time from dba_hist_snapshot;

Snap1

Veritabanında alınan snapshotların zaman aralığı ve veritabanında saklanma süresini aşağıdaki scriptle öğrenebiliriz.

SQL> select snap_interval,retention from dba_hist_wr_control;
SNAP_INTERVAL                                     RETENTION
 -------------------------------                 ------------------------- ---------------------------------
 +00000 01:00:00.0                                +00008 00:00:00.0
SQL>

Veritabanında otomatik olarak alınan bu Snapshot ların alınma aralığını ve tutulma süresini dbms_workload_repository paketini kullanarak aşağıdaki gibi değiştirebiliriz. Örnek olarak Snapshotların 15 dakikada 1 alınmasını ve 15 gün tutulması için aşağıdaki scripti çalıştırabiliriz.

SQL> exec dbms_workload_repository.modify_snapshot_settings ( interval => 15, retention => 21600); --retention= 15*24*60=21600
PL/SQL procedure successfully completed.
SQL>

İhtiyaç duyduğumuz bir anda manuel olarak Snapshot alabiliriz. Bunu genelde problem anında otomatik olarak alınacak snapshot ı beklememek için kullanırız. Manuel olarak snapshot aşağıdaki scriptle oluşturabiliriz.

SQL> exec dbms_workload_repository.create_snapshot;
PL/SQL procedure successfully completed.
SQL>

Belli aralıktaki Snapshotlar manuel olarak aşağıdaki scriptle silinir.

SQL> exec dbms_workload_repository.drop_snapshot_range (low_snap_id => 919, high_snap_id => 1125);
PL/SQL procedure successfully completed.
SQL>

Manuel olarak snapshotların Silinip silinmediğini görmek için yukardaki script tekrar çalıştırıldığında aşağıdaki sonucu verecektir. Böylece snapshotların silindiğini görmüş olacağız.

SQL> select snap_id, begin_interval_time,end_interval_time from dba_hist_snapshot;

Snap2

Veritabanımızda normal bir zamanda performans problemi olup olmadığını anlamak için veritabanının istikrarlı çalıştığı bir zaman aralığını baseline olarak kaydedebiliriz. Böylece performans problemi yaşandığı andaki snopshot la karşılaştırıp problemi daha kısa sürede tespit edebiliriz.

Veritabanında iki snapshot aralığını aşağıdaki gibi kaydedip baseline olarak kullanabiliriz.

SQL> exec dbms_workload_repository.create_baseline (start_snap_id => 1126, end_snap_id => 1129, baseline_name => 'Karsilastirilacak Baseline');
PL/SQL procedure successfully completed.
SQL>

Veritabanımızda kayıtlı olan Baseline ları aşağıdaki sorgu ile öğrenebiliriz.

select * from dba_hist_baseline;

Snap3

Veritabanımızda aynı anda birden çok baseline oluşturabileceğimiz gibi aşağıdaki scriptle aynı zamanda var olan bir Baseline ı silebiliriz.

SQL> exec dbms_workload_repository.drop_baseline (baseline_name => 'Karsilastirilacak Baseline', cascade => FALSE);

Yukarda anlatıp kullandığım Snapshotları kullanarak AWR raporunu oluşturabiliriz bunun için Oracle Enterprise manager toolunu kullanabileceğimiz gibi SQL*Plus aracını kullanarakta yapabiliriz.  Ben bu yazımda SQL*Plus aracını kullanarak AWR raporunu aşağıdaki gibi adım adım oluşturacağım bunun için $ORACLE_HOME/rdbms/admin/ path inin altında bulunan awrrpt.sql scriptini kullanacağım. Aşağıdaki adımlarda soru sorulan kısımlar Kırmızı harflerle bu sorulara cevaplar sarı harflerle belirtilmiştir.

1.Adım: awrrpt.sql scripti aşağıdaki gibi çalıştırılır.

SQL> @$ORACLE_HOME/rdbms/admin/awrrpt.sql
Current Instance
 ~~~~~~~~~~~~~~~~
DB Id DB Name Inst Num Instance
 ----------- ------------ -------- ------------
 2514592975 POCDB 1 POCDB
 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  --Buraya Raporun tipi yazılır ve devam etmek için enter a basılır.

2. Adım: Aşağıda kalın harfle belirtilen son satırda görüldüğü gibi kaç günlük snapshotları görmek istediğinizi belirtiyorsunuz. Ben 1 günlük seçtim.

Enter value for report_type: html
Type Specified: html
 Instances in this Workload Repository schema
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
 ------------ -------- ------------ ------------ ------------
 * 2514592975 1 POCDB POCDB Dataguard1
Using 2514592975 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 <return> without
 specifying a number lists all completed snapshots.
 Enter value for num_days: 1

3.Adım:  Bu adımda aşağıda görüldüğü gibi 1 günlük snapshotlar listelendi ve aşağıda kalın harfle belirtilen son satırda başlangıç için belirteceğiniz Snapshot ın ID sini girmenizi istiyor. Ben 1127 olarak girdim.

Enter value for num_days: 1
Listing the last day's Completed Snapshots
Snap
 Instance DB Name Snap Id Snap Started Level
 ------------ ------------ --------- ------------------ -----
 POCDB POCDB 1126 10 Mar 2014 14:00 1
 1127 10 Mar 2014 15:00 1
 1128 10 Mar 2014 15:59 1
 1129 10 Mar 2014 16:02 1
 1130 10 Mar 2014 16:15 1
 1131 10 Mar 2014 16:30 1
Specify the Begin and End Snapshot Ids
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Enter value for begin_snap: 1126

4.Adım: Bu adımda aşağıda görüldüğü gibi Son Snap_id nin girilmesini istiyor ben 1130 olarak girdim.

Begin Snapshot Id specified: 1126
Enter value for end_snap: 1130

5.Adım: Son olarak aşağıdaki gibi oluşturulacak olan Raporun adı girilir ve entera basılır.
 Enter value for end_snap: 1130
 End Snapshot Id specified: 1130
Specify the Report Name
 ~~~~~~~~~~~~~~~~~~~~~~~
 The default report file name is awrrpt_1_1126_1130.html. To use this name,
 press <return> to continue, otherwise enter an alternative.
Enter value for report_name: POCDB_AWR_10032014.html

6. Adım: Rapor aşağıda görüldüğü gibi oluşmuştur.

Report written to POCDB_AWR_10032014.html
 SQL> exit
 Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
 With the Partitioning, OLAP, Data Mining and Real Application Testing options
 bash-4.1$ ls -l *POCDB*
 -rw-r--r-- 1 oracle oinstall 427877 Mar 10 16:48 POCDB_AWR_10032014.html
 bash-4.1$

Böylece bu yazımın sonuna gelmiş bulunmaktayım bir sonraki yazıda AWR raporunun içeriğine ve bu raporun okunmasını anlatacağım şimdilik esen kalın.

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s