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.
Hiç yorum yok:
Yorum Gönder