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.
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.
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;
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;
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;
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.
Oracle Exadata SQL Server Goldengate Weblogic EBS ve Linux konusunda aşağıdaki konularda 7×24 Uzman Danışmanlara yada Eğitimlere mi İhtiyacınız var [email protected] adresine mail atarak Bizimle iletişime geçebilirsiniz.
– Oracle Veritabanı Danışmanlığı
– Oracle Veritabanı Bakım ve Destek
– Exadata Danışmanlığı
– Exadata Bakım ve Destek
– SQL Server Veritabanı Danışmanlığı
– SQL Server Veritabanı Bakım ve Destek
– Goldengate Danışmanlığı
– Goldengate Bakım ve Destek
– Linux Danışmanlığı
– Linux Bakım ve Destek
– Oracle EBS Danışmanlığı
– Oracle EBS Bakım ve Destek
– Weblogic Danışmanlığı
– Weblogic Bakım ve Destek
– Oracle Veritabanı Eğitimleri
– Oracle VM Server Danışmanlığı
– Oracle VM Server Bakım ve Destek
– Oracle EPPM Danışmanlığı
– Oracle EPPM Bakım ve Destek
– Oracle Primavera Danışmanlığı
– Oracle Primavera Bakım ve Destek
– Oracle Eğitimleri
– SQL Server Eğitimleri
– Goldengate Eğitimleri
– Exadata Eğitimleri
– Linux Eğitimleri
– Oracle EBS Eğitimleri
– Oracle VM Server Eğitimleri
– Weblogic Eğitimleri
– Oracle EPPM Eğitimleri
– Oracle Primavera Eğitimleri