tag:blogger.com,1999:blog-20005149490475235912023-11-16T15:02:13.036+03:00Magic World of OracleKahinin sihirli dünyasına tutkulu bir bakış...Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.comBlogger161125tag:blogger.com,1999:blog-2000514949047523591.post-88245287965051930882012-12-22T22:56:00.000+02:002012-12-31T10:31:19.217+02:00SQL Performance Analyzer ile SQL komutlarının performans gelişimlerinin izlenmesi<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif;"></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">Oracle Database 11g Sürüm 1 (11gR1) <span style="mso-spacerun: yes;"> </span>sürümü ile kullanıma sunulan SQL Performance Analyzer aracı, zayıf performans gösteren SQL komutlarının mevcut durumu ve gerekli düzeltme işlemi sonunda <span style="mso-spacerun: yes;"> </span>performanslarında meydana gelen değişimleri test ortamında kıyaslayarak, kaynak kullanımında ve çalıştırma planı maliyetinde meydana gelen olumlu/olumsuz gelişimleri okunabilir rapor formatında hazırlayarak, veritabanı yöneticilerine SQL cümlelerinin iyileştirilmesinin veritabanı üzerinde olumlu etkisini kolayca görmesini sağlanır. SQL Performance Analzyer aracında kıyaslama için önceki ve sonraki olarak adlandırılan iki tür şablon kullanılmaktadır. “Önceki” kelimesinden kasıt; <span style="mso-spacerun: yes;"> </span>herhangi bir iyileştirme yapılmadan çalıştırılan zayıf SQL komutlarının mevcut durumudur.<span style="mso-spacerun: yes;"> </span>“Sonraki” ise; gerekli <span style="mso-spacerun: yes;"> </span>yapısal iyileştirme yapıldıktan sonra bu konfigürasyon değişikliğinin sistem üzerinde ne tür performans geliştirmesi yapacağının testine imkan veren bir analiz ve simülasyon metodudur. </span><br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;">Bu makelede, zayıf SQL komutlarının“önceki” ve “sonraki” arasındaki performans değişimlerini <span style="mso-spacerun: yes;"> </span>kıyaslama simülasyonu yer alacak ve performans değişim sonuçlarının zengin formatta raporlanması bir örnek ile yapılandırılacaktır. Oracle Enterprise Manager(OEM) grafiksel arayüzünde yer alan adım-adım sihirbazlar yardımıyla oluşturulacak olan SQL Performans Analyzer görevinde “önceki “ve “sonrası” arasındaki değişikliklerinin kıyaslama simülasyonu kolayca yapılmaktadır. Bu işlem için izlenecek adımlar aşağıda sırasıyla <span style="mso-spacerun: yes;"> </span>yer almaktadır.</span></div>
<ul>
<li><div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0pt 36pt; mso-list: l1 level1 lfo1; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">Oracle veritabanındaki örnek yükü kapsayacak olan zayıf performansa sahip SQL komutlarının yakalanması(SQL Tuning setler yardımıyla). </span></div>
</li>
<li><div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; mso-list: l1 level1 lfo1; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">Mevcut veritabanı sistemini kullanarak “önceki” olarak adlandırılan imajı/şablonu oluşturmak için örnek işyükünün mevcut performans etkisinin belirlenmesi. </span></div>
</li>
<li><div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; mso-list: l1 level1 lfo1; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">Oracle veritabanı sisteminde yapılan yapısal değişiklik sonucunda mevcut işyükünün “sonraki” durumuna karşılık değişim göstermiş performansının test edilmesi.</span></div>
</li>
<li><div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0pt 36pt; mso-list: l1 level1 lfo1; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">Yapılan yapısal değişim sonucu hangi işyükü komponentlerinde pozitif veya negatif yönde değişim meydana geldiğinin bulunması için “önceki” ve “sonraki” arasında kıyaslamanın yapılması ,ayrıca hangi işyükü komponentleirnde <span style="mso-spacerun: yes;"> </span>değişiklik olmadığının tespiti.</span></div>
</li>
<li><div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 10pt 36pt; mso-list: l1 level1 lfo1; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">Zayıf performans gösteren SQL komponentlerinin nasıl en iyi şekilde düzeltileceğinin belirlenmesi, böylece yeni ortamda bu SQL komutlarının en iyi şekilde çalışacağından emin olunması.</span></div>
</li>
</ul>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">SQL Performance Analyzer aracının çalışmasını göstermek için,<span style="mso-spacerun: yes;"> </span>bu yazıda kullanılacak olan örnek tabloların oluşturulması ve SQL komutlarının beliritildiği adımları, “önceki” ve “sonraki” değişim simülasyonları ile birlikte aşağıdaki gibi yapılandıracağım.</span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<a name='more'></a></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 10pt 36pt; mso-list: l3 level1 lfo2; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="mso-fareast-font-family: "Times New Roman";"><span style="mso-list: Ignore;">1.) </span></span><b style="mso-bidi-font-weight: normal;">Simülasyon hazırlığı: </b>Bu yazı için kullanacağım tabloları Oracle veritabanındaki örnek şemalardan biri olan OE şemasındaki objelerden türeteceğim. Bunun yanında bu tabloların güncel istatistiklerinin alınmasıda bu adımda yer alacaktır</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">CONN OE/OE</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">CREATE TABLE CUSTOMERSD AS SELECT * FROM CUSTOMERS;</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">CREATE TABLE ORDERSD AS SELECT * FROM ORDERS;</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">CREATE TABLE ORDER_ITEMSD AS SELECT * FROM ORDER_ITEMS;</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">CREATE TABLE PRODUCT_INFORMATIOND<span style="mso-spacerun: yes;"> </span>AS SELECT * FROM PRODUCT_INFORMATION;</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<br />
<div>
</div>
</div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<i style="mso-bidi-font-style: normal;"><span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">--- İstatistikleri topluyoruz.---</span></i></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">EXEC DBMS_STATS.GATHER_TABLE_STATS(‘OE’,’CUSTOMERSD’,cascade=> true);</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">EXEC DBMS_STATS.GATHER_TABLE_STATS(‘OE’,’ORDERSD’,cascade=> true);</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">EXEC DBMS_STATS.GATHER_TABLE_STATS(‘OE’,’ORDER_ITEMSD’,cascade=> true);</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">EXEC DBMS_STATS.GATHER_TABLE_STATS(‘OE’,’PRODUCT_INFORMATIOND’,cascade=> true);</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<br />
<div>
</div>
</div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 10pt 36pt; mso-list: l3 level1 lfo2; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="mso-fareast-font-family: "Times New Roman";"><span style="mso-list: Ignore;">2.) </span></span><b style="mso-bidi-font-weight: normal;">SQL komutlarının toplanmasına hazırlık:</b> Ardından, yukarda oluşturduğum tablolara erişim sağlamak üzere Oracle veritabanınında aşağıdaki iki adet SQL komutunu çalıştırıyorum.</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">select a.customer_id,a.cust_first_name||' '||a.cust_last_name Customer, b.order_id, b.order_total, d.product_name, c.unit_price, c.quantity,d.supplier_id </span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">from customersd a, ordersd b,order_itemsd c, product_informationd d </span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">where a.customer_id=b.customer_id </span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">and b.order_id=c.order_id </span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">and c.product_id=d.product_id </span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">and a.customer_id=144;</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<br />
<div>
</div>
</div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">select a.customer_id,b.order_date,c.order_id,d.product_name,d.list_price</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">from customersd a,ordersd b,order_itemsd c,product_informationd d</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">where a.customer_id=b.customer_id </span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">and b.order_id=c.order_id</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">and d.product_id=c.product_id </span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">and c.order_id in </span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">(select order_id </span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">from ordersd </span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">where order_status=3);</span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt 18pt;">
<br />
<div>
</div>
</div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0pt 36pt; mso-list: l3 level1 lfo2; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="mso-fareast-font-family: "Times New Roman";"><span style="mso-list: Ignore;">3.) </span></span><b style="mso-bidi-font-weight: normal;">“Önceki” olarak adlandırılan şablonun<span style="mso-spacerun: yes;"> </span>hazırlanması:</b><span style="mso-spacerun: yes;"> </span>“Önceki” <span style="mso-spacerun: yes;"> </span>olarak adlandıracağım şablonun test için hazır olmasından itibaren yukardaki SQL komutlarını içerecek olan SQL Tuning Task hazırlanması işlemine geçeceğim. <span style="mso-spacerun: yes;"> </span>Ardından, bu oluşturulan SQL Tuning Set,<span style="mso-spacerun: yes;"> </span>SQL Performance Analyzer görevi içerisine eklenecek ve performans kıyaslaması için “sonraki” olarak adlandırılacak şablona karşı kullanılmak üzere SQL Performance Analyzer görevi <span style="mso-spacerun: yes;"> </span>içerisinden “önceki” larak adlandırılan adımda çalıştırılacaktır. </span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 10pt 36pt; mso-list: l3 level1 lfo2; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="mso-fareast-font-family: "Times New Roman";"><span style="mso-list: Ignore;">4.) </span></span><b style="mso-bidi-font-weight: normal;">Veritabanında yapısal değişiklik yapılması:</b> “Sonraki” olarak adlandırdığım şablonu hazırlamadan önce veritabanında mevcut SQL komutlarının çalıştırma planını ve kaynak kullanım istatistiklerini optimize edebilecek olan iyileştirme işlemlerine geçeceğim. Bu amaçla bu noktada; <span style="mso-spacerun: yes;"> </span>üç adet indeks oluşturacağım. Bu indekslerden birisi CUSTOMERSD tablosundaki CUSTOMER_ID kolonunu indeksleyecek, ikincisi ORDER_ITEMSD tablosundaki ORDER_ID<span style="mso-spacerun: yes;"> </span>ve ORDER_STATUS kolonlarını birlikte indeksleyecektir, üçüncüsü ise PRODUCT_INFORMATIOND tablosundaki PRODUCT_ID kolonunu indeksleyecektir. <span style="mso-spacerun: yes;"> </span>Daha sonra, doğru bir çalıştırma planı oluşturabilmek için bu indeksleme yapılan tabloların istatistikleri yeniden toplanacaktır.</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">CREATE INDEX CUSTID_IDX ON CUSTOMERSD(CUSTOMER_ID)PCTFREE 30;</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">CREATE INDEX ORDITMS_IDX ON ORDER_ITEMSD(ORDER_ID,ORDER_STATUS)PCTFREE 20;</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">CREATE INDEX PRODID_IDX ON PRODUCT_INFORMATION(PRODUCT_ID)PCTFREE 25;</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<br />
<div>
</div>
</div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<i style="mso-bidi-font-style: normal;"><span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">--- İstatistikleri topluyoruz.---</span></i></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">EXEC DBMS_STATS.GATHER_TABLE_STATS(‘OE’,’CUSTOMERSD’,cascade=> true);</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">EXEC DBMS_STATS.GATHER_TABLE_STATS(‘OE’,’ORDERSD’,cascade=> true);</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">EXEC DBMS_STATS.GATHER_TABLE_STATS(‘OE’,’ORDER_ITEMSD’,cascade=> true);</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<span style="font-family: "Courier New", Courier, monospace; font-size: x-small;">EXEC DBMS_STATS.GATHER_TABLE_STATS(‘OE’,’PRODUCT_INFORMATIOND’,cascade=> true); </span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<br />
<div>
</div>
</div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0pt 36pt; mso-list: l3 level1 lfo2; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="mso-fareast-font-family: "Times New Roman";"><span style="mso-list: Ignore;">5.) </span></span><b style="mso-bidi-font-weight: normal;">“Sonraki” olarak adlandırılan performans şablonunun oluşturulması: </b>Değişikliklerin orjinal özdeş işyükünde sonuçlarını belirlemek için, SQL Performance Analyzer içerisinde “sonraki” adımında çalıştıracağım. </span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 10pt 36pt; mso-list: l3 level1 lfo2; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="mso-fareast-font-family: "Times New Roman";"><span style="mso-list: Ignore;">6.) </span></span><b style="mso-bidi-font-weight: normal;">“Önceki “ ve “Sonraki” şablonlarının sonuçlarının kıyaslaması:</b> Son adımda ise “önceki” ve “sonraki” şablonlarında elde edilen bulgular birbiriyle kıyaslanacak ve bir rapor ile çalıştırma planı üzerilerinde değişimler, kaynak kullanım istatistikleri arasındaki değişimler pozitif ve/veya negatif yönden kolaylıkla görülebilecektir. Bu şekilde yapılacak değişimin üretim ortamına etkileri test ortamında simüle edilebilecek ve SQL komutlarının performanslarının gerçek platform için iyileştirmesi için çok etkili bir simülasyon ortamı oluşturulmuş olacaktır.</span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">Şimdi yukarda bahsettiğim adımları Oracle Enterprise Manager(OEM) grafiksel arayüzünden adım adım uygulayalım:</span></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 10pt 36pt; mso-list: l2 level1 lfo3; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="mso-fareast-font-family: "Times New Roman";"><span style="mso-list: Ignore;">1.) </span></span>İlk adımda iyileştirme yapılması planlanan SQL komutlarını içerecek olan SQL Tuning Set’inin oluşturulması gerekmektedir. Bu amaçla Oracle Enterprise Manager konsolundan “Performance” tabı altında yer alan “SQL Tuning Set” linkine tıklıyorum ve alttaki ilk adım ekrana geliyor.</span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="mso-fareast-language: TR; mso-no-proof: yes;"><shapetype coordsize="21600,21600" filled="f" id="_x0000_t75" o:preferrelative="t" o:spt="75" path="m@4@5l@4@11@9@11@9@5xe" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path gradientshapeok="t" o:connecttype="rect" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><span style="font-family: Arial, Helvetica, sans-serif;"></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9QuhxS2z11lpXcemJI302PQnN7BMPXz-htyebFB68ZazC6HKXaFsbqmshyphenhyphenOb8rxQ4G2Nn8MvxY9XRpfikGJ2icGlujLLcyU0H-ka2bNoxVXszOBz3snDg8C936Wr4MgApJgpNo2n2nQ0L/s1600/SQLTASK-1.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="276" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9QuhxS2z11lpXcemJI302PQnN7BMPXz-htyebFB68ZazC6HKXaFsbqmshyphenhyphenOb8rxQ4G2Nn8MvxY9XRpfikGJ2icGlujLLcyU0H-ka2bNoxVXszOBz3snDg8C936Wr4MgApJgpNo2n2nQ0L/s640/SQLTASK-1.jpg" width="640" /></span></a></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">SQL Tuning Set oluşturmasının ikinci adımında hedef SQL komutlarının nereden yakalanacağı ile ilgili kısım yer almaktadır. “Data Source”<span style="mso-spacerun: yes;"> </span>kısmında yer alan değerler;</span></div>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0pt 38.25pt; mso-add-space: auto; mso-list: l0 level1 lfo4; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"><span style="mso-list: Ignore;">· </span></span>AWR snapshots – otomatik iş yükü ambarında kayıtlı olan SQL komutları ile geçmişte çalıştırılan SQL komutları yakalanabilir. Ne kadar geçmişe gidileceği AWR snapshots kısmında seçilir.</span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 10pt 38.25pt; mso-add-space: auto; mso-list: l0 level1 lfo4; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"><span style="mso-list: Ignore;">· </span></span>Cursor Cache – Henüz AWR raporuna yazılmamış ve önbellek içinde yer alan SQL komutları yakalanır. </span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">Eğer imleç önbelleği<span style="mso-spacerun: yes;"> </span>içerisinden belirli zaman aralığında(duration) birden çok çalıştırılan ve imleç kullanan SQL komutları yakalanmak isteniyorsa bu durumda ilk kısım seçilmelidir. Benim örneğimde tek sefer çalıştırılan SQL komutları yüklenmek istendiğinden ben ikinci kısmı seçiyorum ve burada “Cursor Cache” seçeneğini seçip aşağıdaki gibi ilerliyorum.</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwmVSkXWLdsiOWUhgoDKp5m88xArnZwzSwVyAjb4OH9uCfQg0HuBYK60kqkUoSPp-24LIbcOSVNNSMYxdLTM2Tzy2YQdaBfP9-LlmmOhhZFTkX7ytILMcsf90ugL1IQzg0RKld9waaLr5a/s1600/SQLTASK-2.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="360" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwmVSkXWLdsiOWUhgoDKp5m88xArnZwzSwVyAjb4OH9uCfQg0HuBYK60kqkUoSPp-24LIbcOSVNNSMYxdLTM2Tzy2YQdaBfP9-LlmmOhhZFTkX7ytILMcsf90ugL1IQzg0RKld9waaLr5a/s640/SQLTASK-2.jpg" width="640" /></span></a></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">Ardından hangi SQL komutlarının yakalanacağı ile ilgili filtreleme alanına gelinir. Bu alanda ilgili şemaya ait SQL komutu gibi filtreleme seçenekleri mevcuttur. Bunun yanında eğer SQL cümlesinin ID si biliniyorsa bu filtre alanına direkt bu SQL ID de belirtilebilir. Ben SQL ID yi bilmediğimden ve bu komutları OE şemasından çalıştırdığımdan aşağıdaki gibi tanımlama yapıp ilerliyorum.</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUmsYBJGXg-ZYKZyuMMqNm368K8XplKp-68cOTysMuPr1tSi6a8q_Z9laxjpJwEUpULHz_YeyPOYQ3qZz399wkrmFMmwi5evOwY49Q7w5B0TQ7b-EmI_FdVOJAxFmG4G1dS9yrwEDRB0bV/s1600/SQLTASK-3.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="220" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUmsYBJGXg-ZYKZyuMMqNm368K8XplKp-68cOTysMuPr1tSi6a8q_Z9laxjpJwEUpULHz_YeyPOYQ3qZz399wkrmFMmwi5evOwY49Q7w5B0TQ7b-EmI_FdVOJAxFmG4G1dS9yrwEDRB0bV/s640/SQLTASK-3.jpg" width="640" /></span></a></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">Bu SQL Tuning Setin hemen çalıştılıp ilgili SQL komutlarını toplamasını istediğimden bu görevin hemen çalışması için “immediatelly” kısmını işaretleyip ilerliyorum.</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_UU-7SIgoyLM5upbFh9CumKXBI8ZdvUs1kgZEy645p6d7d7GmTcO49L6G0pCqNiMpzp2-ru0Qn7c0NIE2NyUUVbsqo4EgPqt-5dgi8CNle9NF2IE68-0bifVVbmIRdVtlaRLe00WeculR/s1600/SQLTASK-4.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="240" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_UU-7SIgoyLM5upbFh9CumKXBI8ZdvUs1kgZEy645p6d7d7GmTcO49L6G0pCqNiMpzp2-ru0Qn7c0NIE2NyUUVbsqo4EgPqt-5dgi8CNle9NF2IE68-0bifVVbmIRdVtlaRLe00WeculR/s640/SQLTASK-4.jpg" width="640" /></span></a></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">Son aşamada ise oluşturduğumuz SQL Tuning Set ekranda listelenir.</span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif; mso-fareast-language: TR; mso-no-proof: yes;"></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuAx5JWPXI1FdEO2LMlOJjKt8Bf98hN4XjI4QC4PeQthf-NyiE6eURzkHX7U-xQlTjCbhg6N_08KAlp2xMwqHrUaAL5Sas4zkNmIpom7wYyIhyaQoEKM4Vu7xwBpz4bHg7XtKWxirx5p_z/s1600/SQLTASK-5.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="204" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuAx5JWPXI1FdEO2LMlOJjKt8Bf98hN4XjI4QC4PeQthf-NyiE6eURzkHX7U-xQlTjCbhg6N_08KAlp2xMwqHrUaAL5Sas4zkNmIpom7wYyIhyaQoEKM4Vu7xwBpz4bHg7XtKWxirx5p_z/s640/SQLTASK-5.jpg" width="640" /></span></a></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif;"></span></div>
<div class="MsoListParagraph" style="margin: 0cm 0cm 10pt 36pt; mso-list: l2 level1 lfo3; text-indent: -18pt;">
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="mso-fareast-font-family: "Times New Roman";"><span style="mso-list: Ignore;">2.) </span></span>SQL Tuning Set oluşturulduktan ve içerisine hedef SQL komutları yüklendikten sonra artık SQL Performance Analyzer aracı çalıştırılmalıdır. SQL Performance Analyzer aracıda ana konsoldaki “Performance” tabı altından çalıştırılmaktadır. Ekranda gözüken “Guided Workflow “ ile “önceki” ve “sonraki” performans kıyaslaması işlemine başlayacağız. Bu aşamada yer alan diğer seçenekler ile ilgili makaleleri ilerleyen zamanlarda yayınlayacağımdan bunların ne anlama geldiği konusuna girmiyorum.</span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif; mso-fareast-language: TR; mso-no-proof: yes;"></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif; mso-fareast-language: TR; mso-no-proof: yes;"></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8JYS4h4EWTGimOGQ2BhfavcnSCeBsNMLJVk96r6grOgsadcS3_3OoFgrN_TUQFYK87nP9rltbBPvDLouWqNhPvpJ8VUlhqg-v5OwC5tg-gpRQwcZ7qHOpPXyhW0qkljpRRwvkPZzcm1Il/s1600/SPA-1.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="222" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8JYS4h4EWTGimOGQ2BhfavcnSCeBsNMLJVk96r6grOgsadcS3_3OoFgrN_TUQFYK87nP9rltbBPvDLouWqNhPvpJ8VUlhqg-v5OwC5tg-gpRQwcZ7qHOpPXyhW0qkljpRRwvkPZzcm1Il/s640/SPA-1.jpg" width="640" /></span></a></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTKwUj3leiKFNMlCxEju0EBuSyou36bBoMl3oLq6kfDY0fVu1htASAiJoVLEcCa8K-lndBpLXR7m-dAhIvsA1kxqH3z4grsXRAetKwlwqIuHfngto3c66aZf0546XktMxjC0Hm32ayKP68/s1600/SPA-2.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="198" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTKwUj3leiKFNMlCxEju0EBuSyou36bBoMl3oLq6kfDY0fVu1htASAiJoVLEcCa8K-lndBpLXR7m-dAhIvsA1kxqH3z4grsXRAetKwlwqIuHfngto3c66aZf0546XktMxjC0Hm32ayKP68/s640/SPA-2.jpg" width="640" /></span></a><br />
<span style="font-family: Arial, Helvetica, sans-serif;">“Guided Wokflow “ ile aslında Oracle tüm aşamaları iş akışı şeklinde adım adım basite indirgenmektedir. İlk sıradaki görevin yanındaki “Execute” sembolüne tıklayarak işleme başlıyorum.</span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif; mso-fareast-language: TR; mso-no-proof: yes;"></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir9zCI9tVjrwkdCisaIiKNTZQpOW27oiyuZreo8mwaPLL4U_1JLULRhEU6BRukCjx5-MavZ85MIgu-T2gpX-XwFE5z7Y2XXXhcYcHtQLqp_-hNf_XN8FdZ194VG_k9cSBUieqjqVF0WxCj/s1600/SPA-3.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="178" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir9zCI9tVjrwkdCisaIiKNTZQpOW27oiyuZreo8mwaPLL4U_1JLULRhEU6BRukCjx5-MavZ85MIgu-T2gpX-XwFE5z7Y2XXXhcYcHtQLqp_-hNf_XN8FdZ194VG_k9cSBUieqjqVF0WxCj/s640/SPA-3.jpg" width="640" /></span></a></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">Oluşturacağım SQL Performance Analyzer görevine DEMO SPA adını veriyorum, SQL Tuning Set bölümü altında bir önceki adımda oluşturduğum SQL Tuning Setini tanımlayarak “CREATE” komutu ile bir sonraki adıma ilerliyorum.</span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif; mso-fareast-language: TR; mso-no-proof: yes;"></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAIaSJIjLfQvf0cxytsK34mggj1zuUb_Ke8PYr-Umo0A_vt7d0AxLuodmJvED7x6ztcKJ40AyPHO-1O23P6vB0dgPSuKQI1o0j166chtqGa40SfvT0DB9P4zVdAuxjNETQzkiYYkUEJGLz/s1600/SPA-4.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="162" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAIaSJIjLfQvf0cxytsK34mggj1zuUb_Ke8PYr-Umo0A_vt7d0AxLuodmJvED7x6ztcKJ40AyPHO-1O23P6vB0dgPSuKQI1o0j166chtqGa40SfvT0DB9P4zVdAuxjNETQzkiYYkUEJGLz/s640/SPA-4.jpg" width="640" /></span></a></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">Bir sonraki aşamada mevcut ortamda SQL denemesini oluşturuyorum.<span style="mso-spacerun: yes;"> </span>Bu kısımda önemli olan nokta <i style="mso-bidi-font-style: normal;">Creation Method</i> ve <i style="mso-bidi-font-style: normal;">Per-SQL Time Limit</i> kısımlarıdır. “Creation Method” kısmında; <span style="mso-spacerun: yes;"> </span>çalıştırılan SQL komutunun lokal ortamdamı yoksa uzak bir makinede varsayımı ile simulasyonu yapılacağı, veya lokal veya uzak makine varsayımı ile SQL komutunun çalıştırma planı simülasyonumu yapılacak, yoksa hem SQL komutu çalıştırma planı hemde çalışma esnasında kaynak kullanımı ile ilgili detay istatistikleme simülasyonu yapılacak gibi seçenekler yer alır. “Execute SQLs locally” ile lokal veritabanında çalıştırılan SQL komutlarının hem kaynak kullanımı detayları istatistiki olarak simüle edilmekte, hemde çalıştırma planı detayları bu simülasyona dahil edilmektedir. “Per-SQL Time Limit” kısmı ise bu test ortamında yüklü SQL komutunun ne kadar süre deneme simülasyonunda tutulacağını belirtir. Aşağıdaki seçenekler ile ilerliyorum ve “önceki” olarak adlandırılan şablonu hazırlamış oluyorum. </span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRYR6l5i0-c2KUuOmJoPdxkE9dL5LttJqUOcMhp3a12vaGS3NOE5y4D1ksA2LL-IAj6CenPox3MQ04WfgFFlaPXmhAZrnXCW4PWS-LUFk23N09bH5YBqVhj_M3_Go2DQUKxyQCaIPSa0F8/s1600/SPA-5.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="372" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRYR6l5i0-c2KUuOmJoPdxkE9dL5LttJqUOcMhp3a12vaGS3NOE5y4D1ksA2LL-IAj6CenPox3MQ04WfgFFlaPXmhAZrnXCW4PWS-LUFk23N09bH5YBqVhj_M3_Go2DQUKxyQCaIPSa0F8/s640/SPA-5.jpg" width="640" /></span></a></div>
<strong><span style="font-family: Arial, Helvetica, sans-serif;"></span></strong><br />
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">*** <b style="mso-bidi-font-weight: normal;">Bu aşamada karşınıza gelen ekranın sağ alt kısmındaki “Trial environment established” seçeneğini tıklamayı unutmayın. ***</b></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<br />
<div>
</div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-x1Oxtn6BASETijvxnTtMH04k7jjvAdBAeyCUK4ySiNtunCULemg7YEO37719wXkQXsi4o35kzSCkW1Ehsb2ATqmVlnGUDhunJKwFYTn8wqGNeGi1lfZYx0sgP-Un9x3uzhm4qvBXp_WQ/s1600/SPA-5.2.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="156" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-x1Oxtn6BASETijvxnTtMH04k7jjvAdBAeyCUK4ySiNtunCULemg7YEO37719wXkQXsi4o35kzSCkW1Ehsb2ATqmVlnGUDhunJKwFYTn8wqGNeGi1lfZYx0sgP-Un9x3uzhm4qvBXp_WQ/s640/SPA-5.2.jpg" width="640" /></span></a></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif;"></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif; mso-fareast-language: TR; mso-no-proof: yes;"></span></div>
<div align="left" class="separator" style="clear: both; text-align: center;">
<span style="font-family: Arial, Helvetica, sans-serif;"></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: Arial, Helvetica, sans-serif;">Bir sonraki aşamaya geçmeden önce mevcut veritabanı ortamında değişiklik yapıyorum ve bu aşamada ilgili indeksleri oluşturup, gerekli istatistikleri yeniden topluyorum<i style="mso-bidi-font-style: normal;">(<u>bakınız 4. adım Veritabanında yapısal değişiklik yapılması</u>)</i> Bu işlem sonunda aşağıdaki gibi üçüncü görev alanınında “execute” <span style="mso-spacerun: yes;"> </span>sembolüne tıklayarak, “sonraki” olarak adlandırılan şablonun oluşturulması işlemine geçiyorum.</span></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
</div>
<br />
<div align="left" class="separator" style="clear: both; text-align: center;">
<span style="font-family: Arial, Helvetica, sans-serif;"></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhpm9hA-sCvxtJW_zAFIW3W7RoS2ARyVhF8P17kUX4SuD5Jn9OYNPMrGVmzxY7bZ_FBmuXDxNWKH5EILaFlLv_wdDMH61vsqhJN0bXhzud4v3BZ7fg0xw4yMl3eF8micC1fgN7gmc4FZcW/s1600/SPA-6.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="164" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhpm9hA-sCvxtJW_zAFIW3W7RoS2ARyVhF8P17kUX4SuD5Jn9OYNPMrGVmzxY7bZ_FBmuXDxNWKH5EILaFlLv_wdDMH61vsqhJN0bXhzud4v3BZ7fg0xw4yMl3eF8micC1fgN7gmc4FZcW/s640/SPA-6.jpg" width="640" /></span></a></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">“Sonraki” kısmındaki tanımlamalarım “önceki” aşamasındaki ile aynıdır.</span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif; mso-fareast-language: TR; mso-no-proof: yes;"></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHT2JiIunmqpxIDLaeA99pquKxGx1aEYWLLgjQTW9GGryri4ogRObgCsXh9ZqM0biWCPRxlletMerl6ZtQ43j0hwHTJ8vQNHj2DEzuh5zV0p4_pE3aYzMc-URErhkBtFxpEg4cr6FRr87g/s1600/SPA-7.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="254" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHT2JiIunmqpxIDLaeA99pquKxGx1aEYWLLgjQTW9GGryri4ogRObgCsXh9ZqM0biWCPRxlletMerl6ZtQ43j0hwHTJ8vQNHj2DEzuh5zV0p4_pE3aYzMc-URErhkBtFxpEg4cr6FRr87g/s640/SPA-7.jpg" width="640" /></span></a></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">Bir sonraki aşamada “önceki” ve “sonraki” aşamalarının kıyaslaması işlemi yapılacaktır, alttaki gibi ilerliyorum.</span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Arial, Helvetica, sans-serif;"></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX9AoyZFG7HWn6wrIgpiVoLdiN9qEp754CzTzyvhfn1pnfkvnK1081Tp0lcNaLStkEc2dEBy8hS0Kv9rL10q15ymZ0lXEf44XEZYEXq-IvBBjkPtwId-pYZ4-uDKI6XKCl0Hm6pXN43Lqj/s1600/SPA-8.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="170" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX9AoyZFG7HWn6wrIgpiVoLdiN9qEp754CzTzyvhfn1pnfkvnK1081Tp0lcNaLStkEc2dEBy8hS0Kv9rL10q15ymZ0lXEf44XEZYEXq-IvBBjkPtwId-pYZ4-uDKI6XKCl0Hm6pXN43Lqj/s640/SPA-8.jpg" width="640" /></span></a></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxzL4KbtyyLbls9LN-zNGEKkiJyESEV16n-axtdySQpEWVttLaOVGIeyk6ERV4a3S9VrBKR8SvIXdwHYkw15M2k2U2DEWjFjgAZX_mSit-SbhIBgw4PnrlGGr7fsFAhCMOiXcD5JJC215T/s1600/SPA-9.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="258" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxzL4KbtyyLbls9LN-zNGEKkiJyESEV16n-axtdySQpEWVttLaOVGIeyk6ERV4a3S9VrBKR8SvIXdwHYkw15M2k2U2DEWjFjgAZX_mSit-SbhIBgw4PnrlGGr7fsFAhCMOiXcD5JJC215T/s640/SPA-9.jpg" width="640" /></span></a></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">Kıyaslama metodu için kullanılacak kıstası belirliyorum. Bu kıyaslama metrikleri aşağıda yer almaktadır.<span style="mso-spacerun: yes;"> </span>Ben bu örnekte “buffer gets “ kıstasını kullanacağım. Rapor<span style="mso-spacerun: yes;"> </span>alındıktan sonra diğer metrikler içinde kıyaslama raporu alınabilmektedir.</span></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<i style="mso-bidi-font-style: normal;"><span style="font-family: Arial, Helvetica, sans-serif;">Elapsed Time<span style="mso-tab-count: 1;"> </span>-<span style="mso-spacerun: yes;"> </span>SQL komutunun ne kadar sürede tamamlandığı</span></i></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<i style="mso-bidi-font-style: normal;"><span style="font-family: Arial, Helvetica, sans-serif;">CPU Time<span style="mso-tab-count: 1;"> </span>-<span style="mso-spacerun: yes;"> </span>Bu komut için İşlemci çalışma zamanı</span></i></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<i style="mso-bidi-font-style: normal;"><span style="font-family: Arial, Helvetica, sans-serif;">User I/O Time<span style="mso-tab-count: 1;"> </span>-<span style="mso-spacerun: yes;"> </span>Bu işlem için I/O süresi</span></i></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<i style="mso-bidi-font-style: normal;"><span style="font-family: Arial, Helvetica, sans-serif;">Buffer Gets<span style="mso-tab-count: 1;"> </span>-<span style="mso-spacerun: yes;"> </span>Bu komut sonuçseti için önbellekten alınan veri miktarı<span style="mso-spacerun: yes;"> </span></span></i></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<i style="mso-bidi-font-style: normal;"><span style="font-family: Arial, Helvetica, sans-serif;">Physical I/Os<span style="mso-tab-count: 1;"> </span>-<span style="mso-spacerun: yes;"> </span>Bu komut sonuçseti için fiziksel diskten alınan veri miktarı</span></i></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<i style="mso-bidi-font-style: normal;"><span style="font-family: Arial, Helvetica, sans-serif;">Optimizer Cost<span style="mso-tab-count: 1;"> </span>-<span style="mso-spacerun: yes;"> </span>İyileştirici maliyeti</span></i></div>
<div class="MsoNoSpacing" style="margin: 0cm 0cm 0pt;">
<i style="mso-bidi-font-style: normal;"><span style="font-family: Arial, Helvetica, sans-serif;">I/O interconnect bytes -<span style="mso-spacerun: yes;"> </span>Cluster ortamı için düğümler arası bağlantılarda transfer olan veri miktarı </span></i><br />
<br />
<div>
</div>
</div>
<span style="font-family: Arial, Helvetica, sans-serif;">Son aşamada deneme ortamında kıyaslama raporunu alacağım.</span><br />
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<br />
<div>
</div>
</div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif; mso-fareast-language: TR; mso-no-proof: yes;"></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd-UWV2ATaf2fe0Q7lId82JS1vvUvNP3HL9EAbleWfgz_auNFkr-sqKguRyvPMdbhFCyDDS0Gg-VoIya0zSqT940OU-nN3Pn3dLpsPEolzLhGjVD93bJJNZHm11fCsbQ0kQSpdXv6Z20Q6/s1600/SPA-10.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="164" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd-UWV2ATaf2fe0Q7lId82JS1vvUvNP3HL9EAbleWfgz_auNFkr-sqKguRyvPMdbhFCyDDS0Gg-VoIya0zSqT940OU-nN3Pn3dLpsPEolzLhGjVD93bJJNZHm11fCsbQ0kQSpdXv6Z20Q6/s640/SPA-10.jpg" width="640" /></span></a></div>
</div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif; mso-fareast-language: TR; mso-no-proof: yes;"></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">Aşağıdaki gibi bu SQL Performance Analiz görevinde oluşturulan kıyaslama raporu görülmektedir.<span style="mso-spacerun: yes;"> </span>Gerekli iyileştirmeler sonucunda perfromansın iyileştiği “Improved” grafiğindende görülmektedir.</span><br />
<br />
<div>
</div>
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiemOaFkf-VLYA8fnCZRYaLbAkCyEGnk8wfU2JHbcOocwh8WygRZyc9y6apZFaPerKn83YOVlzOgeP477NFyrmyhV28Tx5K82t0omDOurLV-G8YE5aNuXQ7-mHg8tlMa1deSDlQdxk1AoXO/s1600/SPA-11.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="350" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiemOaFkf-VLYA8fnCZRYaLbAkCyEGnk8wfU2JHbcOocwh8WygRZyc9y6apZFaPerKn83YOVlzOgeP477NFyrmyhV28Tx5K82t0omDOurLV-G8YE5aNuXQ7-mHg8tlMa1deSDlQdxk1AoXO/s640/SPA-11.jpg" width="640" /></span></a></div>
<span style="font-family: Arial, Helvetica, sans-serif;">Örnek SQL cümlelerinden birisinin SQL ID si üzerine tıklayarak bu SQL cümlesi ile ilgili çalıştırma planı istatistiklerini “önceki” ve “sonraki” olarak ayrı ayrı görebilmekte olup aradaki değişimin etkisini yüzdesel olarakta görebilmekteyiz.</span><br />
<br />
<div>
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDaQGarMc60K8OVXfgFRkvnObYrTFO_WzuFZpk8j-DYHj_DTGpzek938chLlF4dBNceyu6b6QRtHw94RcdC9a3DFSxqaUPhJEPZ_pwqsPAL845h_cD6tuoIJnbEvt1hUHPVQOw1YPv0IVr/s1600/SPA-12.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="86" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDaQGarMc60K8OVXfgFRkvnObYrTFO_WzuFZpk8j-DYHj_DTGpzek938chLlF4dBNceyu6b6QRtHw94RcdC9a3DFSxqaUPhJEPZ_pwqsPAL845h_cD6tuoIJnbEvt1hUHPVQOw1YPv0IVr/s640/SPA-12.jpg" width="640" /></span></a></div>
<br />
<div>
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheS9nqA7VMBq7Vp6Hk4iG-ATBQMLP9opaDFkfx9Cztm3v9T6luPrZe3m0JGGVvGSlf1mZtU8E7Y74sOeJfkufKesXI5YSlrK3KTJRgub7nXZVQt6YrDPL076Gd0PCXX8vs5SuR9YD5SHRS/s1600/SPA-13.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="350" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheS9nqA7VMBq7Vp6Hk4iG-ATBQMLP9opaDFkfx9Cztm3v9T6luPrZe3m0JGGVvGSlf1mZtU8E7Y74sOeJfkufKesXI5YSlrK3KTJRgub7nXZVQt6YrDPL076Gd0PCXX8vs5SuR9YD5SHRS/s640/SPA-13.jpg" width="640" /></span></a></div>
<span style="font-family: Arial, Helvetica, sans-serif;">Bunun yanında “önceki” ve “sonraki” test ortamlarının simülasyon edilmiş çalıştırma planları aşağıda yer almaktadır. İndekslerin sisteme eklenmesi sonucunda cost değerinde bir <span style="mso-spacerun: yes;"> </span>azalma meydana gelmiştir.</span><br />
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="mso-fareast-language: TR; mso-no-proof: yes;"><shape id="Picture_x0020_24" o:spid="_x0000_i1026" style="height: 152.25pt; mso-wrap-style: square; visibility: visible; width: 453.75pt;" type="#_x0000_t75"><imagedata o:title="" src="file:///C:\Users\GCNGI\AppData\Local\Temp\msohtmlclip1\01\clip_image019.jpg"></imagedata></shape><span style="font-family: Arial, Helvetica, sans-serif;"></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="mso-fareast-language: TR; mso-no-proof: yes;"><shape id="Picture_x0020_25" o:spid="_x0000_i1025" style="height: 134.25pt; mso-wrap-style: square; visibility: visible; width: 453.75pt;" type="#_x0000_t75"><imagedata o:title="" src="file:///C:\Users\GCNGI\AppData\Local\Temp\msohtmlclip1\01\clip_image020.jpg"></imagedata></shape><span style="font-family: Arial, Helvetica, sans-serif;"></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<br />
<div>
</div>
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrwJXRCeOEunuUaKOd3WQC0YNJTDn_C9IIkVAAPrWDognTEqjssUemdoii3lTkW1coO6Ndey6oUvYR5ES8SWuh-hqQih-6IRxoNb2PrYBcR6wD9U23_bSFWDtXts7EDusgqJgPGIxRtB3v/s1600/SPA-14.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="214" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrwJXRCeOEunuUaKOd3WQC0YNJTDn_C9IIkVAAPrWDognTEqjssUemdoii3lTkW1coO6Ndey6oUvYR5ES8SWuh-hqQih-6IRxoNb2PrYBcR6wD9U23_bSFWDtXts7EDusgqJgPGIxRtB3v/s640/SPA-14.jpg" width="640" /></span></a></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLqOZ6ujBMf08EZTzvYNf0lEx-K8FChNEo1ULCGJrOD1KwNug7fHCst3eUSrVvyjr1XZj2BEzQQBdL6buv-c5XzWxA6pqa1HiA-EL6bGY-GgbO1witHc1hTYRCLi0jgmIZP0G_knAhTk0C/s1600/SPA-15.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="188" naa="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLqOZ6ujBMf08EZTzvYNf0lEx-K8FChNEo1ULCGJrOD1KwNug7fHCst3eUSrVvyjr1XZj2BEzQQBdL6buv-c5XzWxA6pqa1HiA-EL6bGY-GgbO1witHc1hTYRCLi0jgmIZP0G_knAhTk0C/s640/SPA-15.jpg" width="640" /></span></a>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-84626721560150508892012-12-05T15:26:00.005+02:002012-12-05T15:34:01.749+02:00Uptime izleme aracı ile inaktif oturumların izlenmesi<span style="font-family: Arial, Helvetica, sans-serif;">Uptime izleme aracı ile Oracle veritabanında inaktif oturumlar hakkında uyarıları emaille almak oldukça kolaydır. Bu işlem için uptime izleme aracı içinden “Add service monitor” ile Oracle (basic checks) servisini seçmek yeterlidir. Ardından script altından inaktif oturumlar mevcutsa TRUE değerini döndürecek olan SQL komutunu tanımlanabilir. Servis kıyaslama alanında da değer olarak FALSE tanıtılırsa, ters bir durum oluşma durumunda uptime izleme aracı otomatik email ile bu durumu kritik alert seviyesinde ilgili profile bildirecektir.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"> Alttaki örnekte 2 saatten fazla zamandır veritabanına bağlı inaktif oturum olduğunda anında emaille alert olarak döndürecek örnek yer almaktadır.
</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8fPkmp9dYXbzkK3OqVOoYpG-wDwlW9Lc53U62Yx0BwghO0SzVx1lfYhoHvAn95hf0-KRJDOYTDEWJQRfBqUDF92ylN_gEpbzmTk6j7Rtm8HSCuCEDM6cH3LN-UVtaMQN7HG781if8X8P-/s1600/1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8fPkmp9dYXbzkK3OqVOoYpG-wDwlW9Lc53U62Yx0BwghO0SzVx1lfYhoHvAn95hf0-KRJDOYTDEWJQRfBqUDF92ylN_gEpbzmTk6j7Rtm8HSCuCEDM6cH3LN-UVtaMQN7HG781if8X8P-/s320/1.jpg" width="314" /></a></div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">Uptime ile ilgili geniş bilgiye http://www.uptimesoftware.com/resources.php adresinden erişilebilir.</span>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-71621318913436648712012-11-14T15:24:00.000+02:002012-12-31T10:25:57.620+02:00SQL komutları için delta değerlerinin izlenmesi<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span class="Apple-style-span" style="font-family: Arial, sans-serif;">V$SQLAREA görünümü library cache içindeki imleçler ile ilişkili tüm alt imleçlerin istatistiklerini birlikte gruplandırır. Buna rağmen gruplandırma bazı işlemleri kolaylaştırırken, </span><i style="font-family: Arial, sans-serif;">“library cache latch”</i><span class="Apple-style-span" style="font-family: Arial, sans-serif;"> için artan talep sebebiyle bu görünüme erişmek muhtemelen daha fazla kaynak tüketecektir. İstatistikler, sürekli alma(consistent gets) sayısı, diskten blok okumaları, çalıştırmalar, satır alıp getirmeler(fetches), sortlar, bellek kullanımı, yüklemeler, invalidationlar ve bazı diğer alt istatistikler için sağlanmaktadır.</span><span class="Apple-style-span" style="font-family: Arial, sans-serif;"> </span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Arial, sans-serif;">Oracle 9.2 sürümünden itibaren, bu görünüm tamamlanma süresi(elapsed time) ve CPU kullanımı bilgilerinide sağlamaktadır. Görünüm her 1 saniye ve 5 saniye arasında güncellenmektedir. <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Arial, sans-serif;">V$SQL görünümü tüm alt imleçleri gruplandırmadan benzer bilgiyi sağlamaktadır; böylece görünüme erişmek daha az kaynak tüketmekle beraber, ayrıca <i>“adaptive cursor sharing(uyumlu imleç paylaşımı)”</i>, bağlaç(bind) değişken tanımı/değeri uzunluk değişimleri, değişik optimizer parametreleri çalıştıran oturumlar, istatistik toplama gibi SQL komutu için <i>“değişken”</i> çalıştırma planına sahip türlü alt imleçler için istatistikleride görmeye imkan vermektedir. Bu görünümde her 1 saniye ve 5 saniye arasında değişmektedir. </span></div>
<a name='more'></a><o:p></o:p><br />
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Arial, sans-serif;">Oracle 10.2 sürümü ile gelen V$SQLSTATS görünümü ise imleç istatistiklerini daha verimli bir metot olarak izlemek için SQL_ID ve PLAN_HASH_VALUE kolonlarını birincil anahtar kolonlar olarak kullanmaktadır. Bu görünümde her 1 saniye ve 5 saniye arasında değişmektedir. <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Arial, sans-serif;">V$SESSION_LONGOPS görünümü, çalıştırma için sorumlu olan oturumun SID ve SERIAL# değerlerini, işlemin tamamlanma süresini, işlemin tamamlanması için tahmini geri kalan süresi ile o an çalışan çalıştırma planının satırını getirerek en azından 6 saniye aktif olan operasyonlar için durum güncellemesi sağlamaktadır.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Arial, sans-serif;">Oracle 11.1 ile gelen V$SQL_MONITOR görünümü(tuning pack lisansı gerektirmektedir) ile paralel çalıştırma işlevi etkin olan ve çalışan SQL komutları ile beraber, en azından 5 saniye süresince CPU süresi ve/veya I/O süresi tüketen tüm SQL komutları otomatik olarak izlenmektedir. Aksi durumda, izleme /*+ MONITOR */ hinti kullanılarak etkinleştirilebilmektedir. V$SQL_MONITOR içindeki istatistikler her bir saniyede bir güncellenmekte olup, SQL çalıştırması tamamlandıktan sonra en azından her bir dakika için görünüm içinde genellikle aynı kalmaktadır.<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Arial, sans-serif;">SQL çalıştırma istatistikleri için 10 dakikalık zamanı periyodu üzerinden SQL istatistik delta değerlerini yakalayan ve en azından 10 saniyesi tamamlanmış çalıştırma süresindeki SQL komutlarının ilgili istatistiklerini toplayan scriptler boyunca kayıt günlüğü tablolarını oluşturan örnek bir script aşağıda yer almaktadır:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<i><span style="font-family: 'Courier New';">SQL> CREATE GLOBAL TEMPORARY TABLE<o:p></o:p></span></i></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-indent: 35.4pt;">
<span style="font-family: 'Courier New';">DATALOG.TS_SQLSTATS ON COMMIT DELETE ROWS AS<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-indent: 35.4pt;">
<span style="font-family: 'Courier New';">SELECT<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; margin-left: 35.4pt; margin-right: 0cm; margin-top: 0cm;">
<span style="font-family: 'Courier New';">SQL_ID, PLAN_HASH_VALUE, LAST_ACTIVE_TIME, CPU_TIME, ELAPSED_TIME,AVG_HARD_PARSE_TIME, APPLICATION_WAIT_TIME, CONCURRENCY_WAIT_TIME,CLUSTER_WAIT_TIME, USER_IO_WAIT_TIME, PLSQL_EXEC_TIME, JAVA_EXEC_TIME,PARSE_CALLS, LOADS, VERSION_COUNT, INVALIDATIONS, EXECUTIONS, FETCHES,<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; margin-left: 35.4pt; margin-right: 0cm; margin-top: 0cm;">
<span style="font-family: 'Courier New';">ROWS_PROCESSED, BUFFER_GETS, DISK_READS, DIRECT_WRITES, SORTS, SHARABLE_MEM,TOTAL_SHARABLE_MEM<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-indent: 35.4pt;">
<span style="font-family: 'Courier New';">FROM V$SQLSTATS<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-indent: 35.4pt;">
<span style="font-family: 'Courier New';">WHERE 0=1;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL> CREATE GLOBAL TEMPORARY TABLE<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">DATALOG.TE_SQLSTATS ON COMMIT DELETE ROWS AS<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SELECT<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL_ID, PLAN_HASH_VALUE, LAST_ACTIVE_TIME, CPU_TIME, ELAPSED_TIME,<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">AVG_HARD_PARSE_TIME, APPLICATION_WAIT_TIME, CONCURRENCY_WAIT_TIME,<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">CLUSTER_WAIT_TIME, USER_IO_WAIT_TIME, PLSQL_EXEC_TIME, JAVA_EXEC_TIME, PARSE_CALLS, LOADS, VERSION_COUNT, INVALIDATIONS, EXECUTIONS, FETCHES, ROWS_PROCESSED, BUFFER_GETS, DISK_READS, DIRECT_WRITES, SORTS, SHARABLE_MEM, TOTAL_SHARABLE_MEM<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">FROM V$SQLSTATS<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">WHERE 0=1;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL> COMMIT;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL> DEFINE CAPTURE_SECONDS=600<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL> INSERT INTO<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">DATALOG.TS_SQLSTATS<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SELECT<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL_ID, PLAN_HASH_VALUE, LAST_ACTIVE_TIME, CPU_TIME, ELAPSED_TIME,<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">AVG_HARD_PARSE_TIME, APPLICATION_WAIT_TIME, CONCURRENCY_WAIT_TIME,<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">CLUSTER_WAIT_TIME, USER_IO_WAIT_TIME, PLSQL_EXEC_TIME, JAVA_EXEC_TIME, PARSE_CALLS, LOADS, VERSION_COUNT, INVALIDATIONS, EXECUTIONS, FETCHES, ROWS_PROCESSED, BUFFER_GETS, DISK_READS, DIRECT_WRITES, SORTS, SHARABLE_MEM,TOTAL_SHARABLE_MEM<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">FROM V$SQLSTATS;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL> EXEC DBMS_LOCK.SLEEP(&&CAPTURE_SECONDS);<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL> INSERT INTO<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">DATALOG.TE_SQLSTATS<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SELECT<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL_ID, PLAN_HASH_VALUE, LAST_ACTIVE_TIME, CPU_TIME, ELAPSED_TIME,<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">AVG_HARD_PARSE_TIME, APPLICATION_WAIT_TIME, CONCURRENCY_WAIT_TIME,<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">CLUSTER_WAIT_TIME, USER_IO_WAIT_TIME, PLSQL_EXEC_TIME, JAVA_EXEC_TIME,PARSE_CALLS, LOADS, VERSION_COUNT, INVALIDATIONS, EXECUTIONS, FETCHES,ROWS_PROCESSED, BUFFER_GETS, DISK_READS, DIRECT_WRITES, SORTS, SHARABLE_MEM,TOTAL_SHARABLE_MEM<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">FROM V$SQLSTATS;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL> COLUMN CPU_S FORMAT 9,990.00<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL> COLUMN ELA_S FORMAT 9,990.00<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL> COLUMN APP_S FORMAT 9,990.00<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL> COLUMN CON_S FORMAT 9,990.00<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL> COLUMN CLU_S FORMAT 9,990.00<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL> COLUMN USR_S FORMAT 9,990.00<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL> SET LINESIZE 180<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL> SET PAGESIZE 200<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL> SPOOL SQLSTATS.TXT<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL> SELECT<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">TE.SQL_ID, TE.PLAN_HASH_VALUE PHV,(TE.CPU_TIME-NVL(TS.CPU_TIME,0))/1000000 CPU_S,(TE.ELAPSED_TIME-NVL(TS.ELAPSED_TIME,0))/1000000 ELA_S, TE.PARSE_CALLS-NVL(TS.PARSE_CALLS,0) PAR_C,TE.EXECUTIONS-NVL(TS.EXECUTIONS,0) EXEC,<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">(TE.APPLICATION_WAIT_TIME-NVL(TS.APPLICATION_WAIT_TIME,0))/1000000 APP_S,(TE.CONCURRENCY_WAIT_TIME-NVL(TS.CONCURRENCY_WAIT_TIME,0)) /1000000 CON_S,(TE.CLUSTER_WAIT_TIME-NVL(TS.CLUSTER_WAIT_TIME,0)) /1000000 CLU_S,(TE.USER_IO_WAIT_TIME-NVL(TS.USER_IO_WAIT_TIME,0)) /1000000 USR_S<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">FROM<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">DATALOG.TS_SQLSTATS TS,DATALOG.TE_SQLSTATS TE<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">WHERE <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">TE.SQL_ID=TS.SQL_ID(+)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">AND TE.PLAN_HASH_VALUE=TS.PLAN_HASH_VALUE(+)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">AND (TE.ELAPSED_TIME-NVL(TS.ELAPSED_TIME,0))>=10000000<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">ORDER BY (TE.ELAPSED_TIME-NVL(TS.ELAPSED_TIME,0)) DESC;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">SQL> SPOOL OFF<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">SQL_ID PHV CPU_S ELA_S PAR_C EXEC APP_S CON_S CLU_S USR_S<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">------------- ---------- ------ ------ ----- ----- ----- ----- ----- -----<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">4q9qq5mta9t07 1584794551 230.32 236.57 2983 2983 0.00 0.00 0.00 0.00<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">cnbgwf9x3mcqj 85458804 47.17 51.98 2983 2983 0.00 0.00 0.00 0.00<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">9bz3rn13xf68a 3894554182 28.04 30.30 3039 3039 0.00 0.00 0.00 0.00<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">0pb8dqzx301b4 1082151180 10.42 10.42 0 21533 0.00 0.00 0.00 0.00<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Arial, sans-serif;">İlk SQL komutunun istatistiği 10 dakikalık zaman periyodunda yaklaşık 4 dakikalık CPU zamanı tüketimiyle beraber 0.01 saniyeden daha az herhangi bir bekleme olayı kategorisinde kayıp olduğunu göstermektedir. Bu kadar yüksek CPU zamanının potansiyel olarak sebebi nedir? 2,983 defa SQL komutu çalıştırmasının her biri ya sert çözümleme(hard parse) ya da yumuşak çözümleme(soft parse) ihtiyacı doğurmuştur. Çözümleme potensiyel olarak zaman tüketirken, CPU tüketiminin kaynağını belirlemek için daha fazla bilgiye gerek duyulmuştur. Sonuçta, 10 dakikalık yakalama periyodu süresince bir SQL komutu için değişen planın olayında PLAN_HASH_VALUE değeri aşağıdaki sorgu için çıktıyı sınırlandırmada kullanılmaz:<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<i><span style="font-family: 'Courier New';">SQL> SELECT<o:p></o:p></span></i></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">TE.SQL_ID,<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">TE.PLAN_HASH_VALUE PHV,<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">TE.EXECUTIONS-NVL(TS.EXECUTIONS,0) EXECUTIONS,<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">TE.FETCHES-NVL(TS.FETCHES,0) FETCHES,<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">TE.ROWS_PROCESSED-NVL(TS.ROWS_PROCESSED,0) ROW_PRO,<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">TE.BUFFER_GETS-NVL(TS.BUFFER_GETS,0) BUFFER_GETS,<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">TE.DISK_READS-NVL(TE.DISK_READS,0) DISK_READS<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">FROM<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">DATALOG.TS_SQLSTATS TS,<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">DATALOG.TE_SQLSTATS TE<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">WHERE<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">TE.SQL_ID=TS.SQL_ID(+)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">AND TE.PLAN_HASH_VALUE=TS.PLAN_HASH_VALUE(+)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">AND TE.SQL_ID IN<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">('4q9qq5mta9t07','cnbgwf9x3mcqj','9bz3rn13xf68a','0pb8dqzx301b4')<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New';">ORDER BY TE.BUFFER_GETS DESC;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">SQL_ID PHV EXECUTIONS FETCHES ROW_PRO BUFFER_GETS DISK_READS<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">------------- ---------- --------- ------- ------- ----------- ----------<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">4q9qq5mta9t07 1584794551 2,983 2,983 9,703 21,355,893 0<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">cnbgwf9x3mcqj 85458804 2,983 2,983 16,459 4,755,669 0<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">9bz3rn13xf68a 3894554182 3,039 3,039 10,265 1,061,466 0<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">0pb8dqzx301b4 1082151180 21,533 0 21,533 130,799 0<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<i><span style="font-family: Arial, sans-serif;">4q9qq5mta9t07</span></i><span style="font-family: Arial, sans-serif;"> SQL_ID sine sahip SQL komutu 2,983 defa çalıştırılmış, çalıştırma çağrısı olarak aynı sayıda satır getirme(fetches) olmuş ve ortalama olarak her bir satır getirme yaklaşık 3.25 satır(<i>ROWS_PROCESSED / FETCHES</i>) döndürmüştür. SQL komutu için CPU tüketiminin muhtemel kaynağı, her bir alınıp getirilen satır için 2.201 <i>“consistent gets”</i> ortalamasına sahip 21.355 milyon <i>“consistent gets”</i> işlemi olabillir. SQL komutunun ve planının incelenmesi, alınıp getirilen satır başına anlamlı sayıda <i>“consistent gets”</i> lerin beklenip beklenmediğinin belirlenmesinde de yardımcı olabilecektir. SQL_ID ve PLAN_HASH_VALUE kolonları kullanılarak V$SQL görünümünüde sorgulanarak, SQL komutu, tüm alt imleç sayıları(CHILD_NUMBER) ve SQL komutunu başlangıçta çözümleyen kullanıcı bir bütün olarak belirlenebilmektedir. </span><span style="font-family: "Arial","sans-serif";"><o:p></o:p></span></div>
Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-17406511772137030842012-10-19T12:26:00.000+03:002012-12-31T10:27:04.216+02:00Yüksek “DB Time” değeri hakkında bir inceleme<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Yüksek CPU kullanımı ile kendini göstermeyen ve bekleme sebebiyle oluşan performans problemi ile karşılaşılırsa ne yapılır? Bekleme belki mandallar(latches), kilitler veya mesela yavaş disk gibi farklı kaynaklar yüzünden olabilmektedir. Oracle 10g sürümünden itibaren CPU zaman tüketimi ve beklemesini gözönünde bulunduran sözde zaman modeli istatistiklerini sunmaktadır. Bu istatistikler (V$SYS_TIME_MODEL) ve oturum seviyesi için (V$SESS_TIME_MODEL) sistem görünümlerinden elde edilebilir. İşin özünde, veritabanı instance içinde harcanan zaman değerlendirmeye alınmaktadır.</span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<i><span style="font-family: Arial, sans-serif;">“DB Time”</span></i><span style="font-family: Arial, sans-serif;"> veritabanı kullanıcı seviyesi çağrılarını yerine getirirken geçen zaman miktarının mikrosaniye bazında toplamıdır. PMON gibi instance arkaplan proseslerinde geçen süre bu hesaplamaya dahil edilmez. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<i><span style="font-family: Arial, sans-serif;">“DB Time”</span></i><span style="font-family: Arial, sans-serif;"> metriğine dahil olan durumlar aşağıda yer almaktadır;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Arial, sans-serif;">DB CPU<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Arial, sans-serif;">Bağlantı yönetimi çağrısı esnasında geçen süre<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Arial, sans-serif;">Sekuans yüklemesi esnasında geçen süre <o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Arial, sans-serif;">SQL yürütmesi esnasında geçen süre<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Arial, sans-serif;">Ayrıştırma esnasında geçen süre<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Arial, sans-serif;">PL/SQL yürütmesi esnasında geçen süre<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Arial, sans-serif;">Gelen PL/SQL rpc çağrıları esnasında geçen süre<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Arial, sans-serif;">PL/SQL derlemesi esnasında geçen süre <o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Arial, sans-serif;">Java yürütmesi esnasında geçen süre</span></div>
<a name='more'></a><o:p></o:p><br />
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Burada bekleme olayı hakkında tek bir cümle yeterli gelmez. Ancak </span><span style="font-family: Arial, sans-serif;"> </span><span style="font-family: Arial, sans-serif;">bekleme süresinin, SQL izleme dosyaları içinde yer alan veritabanı çağrıları tamamlanma süresi içerisine yerleştirildiği gözönünde bulundurulmalıdır; bu noktada zaman modelli istatistiklerin farklı bir yaklaşım izlemiş olacağı şaşırtıcı olmamalıdır.</span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<i><span style="font-family: Arial, sans-serif;">“DB Time”</span></i><span style="font-family: Arial, sans-serif;"> değerini temel ölçüt olarak kullanarak ASH ve AWR verisinin kombinasyonuyla, ADDM en önemli tepki süresi düşüşlerini sunacak olan hareketlere odaklanabilir ve bu tepki süresi düşüşlerinin daha fazla CPU veya disk kaynağındanmı, bireysel SQL komutlarındanmı veya kilit sorunlarının bertaraf edilmesindenmi olduğunu işaret edebilmektedir. Çünkü “DB Time” pek çok seviyede toplanabilir(oturum, servis, instance gibi) ve hangi verinin uygun olduğu ve optimizasyon alıştırmasının ne amaçla olduğuna bağlı olarak pek çok farklı yönden kullanılabilir. Bu durumu aşağıda bir örnek ile açıklayalım.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<i><span style="font-family: Arial, sans-serif;">DBMS_SYSTEM.wait_for_events</span></i><span style="font-family: Arial, sans-serif;"> paketi, ilgili bekleme olayı için tanımlanan oranda yapay bekleme süresi üretir. Yeni bir veritabanı oturumunun başlangıcında, V$SESS_TIME_MODEL görünümündeki tüm değerler neredeyse sıfırdır. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL> SELECT stat_name, value/1000000 time_secs FROM v$sess_time_model<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">WHERE (stat_name IN ('sql execute elapsed time','PL/SQL execution elapsed time')<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">OR stat_name like 'DB%')<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">AND sid = userenv('sid');<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">STAT_NAME TIME_SECS<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">---------------------------- ----------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">DB time .018276<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">DB CPU .038276<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">sql execute elapsed time .030184<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">PL/SQL execution elapsed time .007097<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Ardından, <i>“db file scattered read”</i> olayı için bir saniye yapay bekleme yapacak birtakım “fake” bekleme süreleri oluşturuyorum(SELECT komutu full tablo taramasına sebebiyet verdiği durumda bu bekleme tipi meydana gelecektir, aslında bu olayı yapay olarak oluşturduk bu test senaryosunda). <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL> EXECUTE dbms_system.wait_for_event('db file scattered read', 1, 1);<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">PL/SQL procedure successfully completed.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<i><span style="font-family: Arial, sans-serif;">“sql execute elapsed time”</span></i><span style="font-family: Arial, sans-serif;"> ve <i>“PL/SQL execution elapsed time”</i> değerlerinin her ikisininde yaklaşık olarak 1 saniye artmış olduğunu belirtmek isterim. Açık olarak, bu testin yapay doğası nedeniyle, geçen süre(<i>elapsed time</i>) iki sefer hesaba katıldı. <i>“DB CPU”</i> metriği sadece biraz daha artış gösterdi ve SQL ile PL/SQL geçen süresinide topladığından itibaren <i>“DB time”</i> değeri ayrıca 1 saniye artmış oldu. Aşağıdaki sonuca bir bakalım.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL> SELECT stat_name, value/1000000 time_secs FROM v$sess_time_model<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">WHERE (stat_name IN ('sql execute elapsed time','PL/SQL execution elapsed time')<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">OR stat_name like 'DB%')<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">AND sid=userenv('sid');<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">STAT_NAME TIME_SECS<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">----------------------------- ---------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="color: red; font-family: 'Courier New';">DB time 1.030818<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">DB CPU .045174<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="color: #00b050; font-family: 'Courier New';">sql execute elapsed time 1.017276<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">PL/SQL execution elapsed time .987208<span style="color: #00b050;"><o:p></o:p></span></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Olaylar üzerinde, SQL yürütmesinin bir parçası olarak oluşan bekleme, <i>“sql execute elapsed time” </i>metriği içine dahil edilmektedir. Idle sınıfı bekleme sınıfı dışındaki diğer bekleme süreleride “DB time” içine dahil edilir.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Sadece CPU kullanımı gibi durumlarda, bir şekilde <i>“DB Time” </i>değerinin normalleştirilmesi gerekmektedir. Sistem üzerinde ne kadar çok işlemci çalışırsa ve her bir işlemci aynı kaynak için ne kadar çok rekabet ederse, sistem seviyesinde o kadar çok bekleme süresi birikecektir.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Mesela; on işlemcinin her biri aynı TX ön kuyruğu için bir saniye beklerse, sonuç olarak her bir işlemci için toplam bekleme süreside on kat artacaktır. <i>“DB time”</i>, snapshot aralığı yoluyla normalleştirilebilir. Bu metrik aslında kimi kişilerce <i>“relative(ilişkili) db time”</i> olarak adlandırılır. Bu noktada yeniden manuel hesaplamaya geçilir. Örneğimde kullandığım Oracle 10g platformu için, ilgili olan bir Statspack alıntı raporu aşağıdadır. <i>“İlişkili DB Time”</i> hesaplamasında kullanılan kısımlar aşağıda koyu font ile belirtilmiştir.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">Snapshot Snap Id Snap Time Sessions Curs/Sess Comment<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">---------- ------------------ -------- --------- -------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">Begin Snap: 73 06-Nov-11 17:04:06 24 3.3<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">End Snap: 74 06-Nov-11 17:09:54 24 3.3<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">Elapsed: <b>5.80 (mins)</b><o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">Time Model System Stats DB/Inst: ORCL/ORCL Snaps: 73-74<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">-> Ordered by % of DB time desc, <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">Statistic name Statistic Time (s) % of DB time<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">----------------------------- -------------------- ------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">sql execute elapsed time 319.3 100.0<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">PL/SQL execution elapsed time 316.7 99.2<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">DB CPU 301.4 94.4<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">…<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<b><span style="font-family: 'Courier New';">DB time</span></b><span style="font-family: 'Courier New';"> <b>319.3</b><o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Formulasyon olarak <i>“ilişkili DB time”</i> hesaplaması aşağıdaki gibidir:<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<i><span style="font-family: Arial, sans-serif;">İlişkili DB Time (s) = DB Time (s) / snapshot aralığı(s)<o:p></o:p></span></i></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Yukardaki formül neticesinde; <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<i><span style="font-family: Arial, sans-serif;">ilişkili DB Time(s) => 319.3 / (5.80 * 60) = <b>0.92</b><o:p></o:p></span></i></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">İki ardışık snapshot arasında <i>“Relative DB Time”</i> metrik değerini ölçmek için tek bir sorgu da kullanılabilmektedir. Bu, ardışık iki snapshot arası amaca uygun farklı bekleme değerlerinin ölçümü içinde oldukça basit, kısa ve faydalı bir yaklaşım olacaktır. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Bu amaçla, ilk olarak snapshot tanımlayıcılarını açığa vuran ve oluşturulan aralığın geçerli olduğunu doğrulayacak bir görünüm, analizlerde temel yapıtaşı olarak kullanılmak amacıyla oluşturulabilir. Aralık doğrulaması, STATS$SNAPSHOT.STARTUP_TIME kolonu değerlerinin birbiriyle karşılaştırması yapılarak kontrol edilmektedir. Aşağıda bu doğrultuda sp_gecerli_araliklar adında bir görünüm oluşturulmaktadır. Bu görünümü bir sefer oluşturmak ve ardından bu görünüm üzerinden farklı bekleme olaylarının delta değişimlerini elde etmek üzere çeşitli performans sorgulamaları yapmakta mümkün olmaktadır. Unutmadan belirtmek isterim, kullandığım sürüm Oracle 10.2.0.5’dir.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">CREATE OR REPLACE VIEW sp_gecerli_araliklar AS<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SELECT *<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">FROM (<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SELECT lag(dbid) over (order by dbid, instance_number, snap_id) AS start_dbid,<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">dbid AS end_dbid, lag(snap_id) over (order by dbid, instance_number, snap_id) AS start_snap_id,<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">snap_id AS end_snap_id,<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">lag(instance_number) over (order by dbid, instance_number, snap_id)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">AS start_inst_nr, instance_number AS end_inst_nr,<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">lag(snap_time) over (order by dbid, instance_number, snap_id)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">AS start_snap_time, snap_time AS end_snap_time,<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">lag(startup_time) over (order by dbid, instance_number, snap_id)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">AS start_startup_time, startup_time AS end_startup_time<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">FROM perfstat.stats$snapshot<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">) ta<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">WHERE ta.start_snap_id IS NOT NULL<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">AND ta.start_dbid=ta.end_dbid<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">AND ta.start_inst_nr=ta.end_inst_nr<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">AND ta.start_startup_time=ta.end_startup_time;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<i><span style="font-family: Arial, sans-serif;">“İlişkili db time”</span></i><span style="font-family: Arial, sans-serif;"> metriğini tüm snapshot aralıklarında otomatik olarak hesaplayıp listeleyen ve temel olarak yukardaki sp_gecerli_araliklar adlı görünümü kullanan sorgu aşağıda yer almaktadır.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL> SELECT i.start_snap_id, i.end_snap_id,<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">i.start_snap_time, i.end_snap_time,<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">(i.end_snap_time - i.start_snap_time) * 86400 AS “Interval(s)”,<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">round((s2.value - s1.value) / 1000000 /* mikrosaniye değeri saniyeye dönüşmekte */<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">/ ((i.end_snap_time - i.start_snap_time) * 86400 ), 2)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">/* snapshot aralığı ile standartlaştırılır */<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">AS “R.DB Time/s”<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">FROM sp_valid_intervals i, stats$sys_time_model s1,<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">stats$sys_time_model s2, stats$time_model_statname n<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">WHERE i.start_snap_id=s1.snap_id<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">AND i.end_snap_id=s2.snap_id<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">AND n.stat_name='DB time'<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">AND s1.stat_id=n.stat_id<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">AND s2.stat_id=n.stat_id<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">ORDER BY db_time_per_sec DESC;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SnapID SnapID Start Time End Time Interval(s) R.DB time/s<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">------ ------ -------------- -------------- ------------ ---------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="color: red; font-family: 'Courier New';">73 74 06.11.11 17:04 06.11.11 17:09 348 .92<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">51 52 05.11.11 07:45 05.11.11 08:00 850 .02<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">34 35 27.10.11 19:53 27.10.11 20:00 401 .01<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">...<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Yukardaki sonuç çıktısında da 73 ve 74 numaralı snapshotlar arasındaki geçen sürede en yüksek <i>“ilişkili DB time”</i> olayı gerçekleşmiştir.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-62177604287421842162012-06-04T09:57:00.001+03:002012-06-04T09:57:46.267+03:00TROUG DBA SIG toplantısındaki sunumumGeçen hafta 31 Mayıs 2012 Perşembe günü Bilginç IT Academy'de düzenlenen TROUG DBA SIG toplantısında yapmış olduğum sunuma <a href="https://docs.google.com/presentation/d/1D2u7EuWc0RuWLOhFPEgHtyYKo_NdDlWDH7AlpSMVWgI/edit" target="_blank">linke </a>tıklayarak erişebilirsiniz. Tüm katılımcılara ve oturumu düzenleyen herkese çok teşekkür ederim.Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-68531930823756565592012-06-01T16:18:00.000+03:002012-06-01T23:29:07.142+03:00SQL Profiller nelerdir ve neden ihtiyaç duyulur?<br />
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">DBMS_XPLAN
paketi ile SQL komutlarının çalıştırma planının analiz edilmesi istenildiğinde,</span><span style="font-family: Arial, sans-serif;"> </span><span style="font-family: Arial, sans-serif;">bazı durumlarda
çalıştırma planı boyunca aşağıdaki satır görülebilmektedir.</span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">Note<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">-----------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL profile "SYS_SQLPROF_012ad8267d9c0000"
used FOR this statement<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Bunun
anlamı şudur; <o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo1; text-indent: -18.0pt;">
<span style="font-family: Symbol;">·<span style="font-family: 'Times New Roman'; font-size: 7pt;">
</span></span><span style="font-family: Arial, sans-serif;">SQL
komutunun değerlendirmesi esnasında harici bir yardımcı nesne kullanılmıştır. <o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo1; text-indent: -18.0pt;">
<span style="font-family: Symbol;">·<span style="font-family: 'Times New Roman'; font-size: 7pt;">
</span></span><span style="font-family: Arial, sans-serif;">Bu
yardımcı nesne çalıştırma planını değiştirmiştir veya en azından etkilemiştir. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Bu noktada
bir takım yardımlar almak faydalı olacaktır. Mesela, bu profil nesne nedir? Ne
iş yapar? Ve en önemliside SQL komutlarını değerlendirirken neden “harici” bir
yardıma ihtiyaç duyulmaktadır?<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Oracle
optimizer ile ilgili problem aslında, geleneksel olarak Oracle optimizer’ın
çalıştırma planları oluşturmak için veri istatistiklerine güvenmesinden
kaynaklanmaktadır. İstatistikler aslında
gerçek verinin oldukça basitleştirilmiş tanımı şeklinde yer almaktadır. Oldukça
büyük GB boyutundaki bir tablonun kolon istatistikleri, sadece belirli şeyleri
içermektedir, değerlerin toplamı, benzersiz(distinct) değerlerin miktarı,
minimum ve maksimum değerler gibi... Diğer bir deyişle, istatistikler verinin
genel şeklini yakalar, ancak pekçok alt seviye detay bilgisi kaybolmaktadır. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Bu kayıp
detay bilgisini telafi etmek ve hala mantıklı ve doğru tahminler sağlamak için,
optimizer veri hakkında bazı varsayımları bulundurmaktadır. Bilhassa optimizer
bu durumlarda şu şekilde düşünmektedir: <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l2 level1 lfo2; text-indent: -18.0pt;">
<span style="font-family: Symbol;">·<span style="font-family: 'Times New Roman'; font-size: 7pt;">
</span></span><span style="font-family: Arial, sans-serif;">Veri
değerleri uniform olarak dağılmıştır(diğer bir deyişle 2 nolu değer sıklıkla 5
nolu değerdir) <o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l2 level1 lfo2; text-indent: -18.0pt;">
<span style="font-family: Symbol;">·<span style="font-family: 'Times New Roman'; font-size: 7pt;">
</span></span><span style="font-family: Arial, sans-serif;">Kayıtlar
uniform olarak dağılmıştır(diğer bir deyişle fiziksel bir kümeleme veya veri
sıralaması yoktur). <o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l2 level1 lfo2; text-indent: -18.0pt;">
<span style="font-family: Symbol;">·<span style="font-family: 'Times New Roman'; font-size: 7pt;">
</span></span><span style="font-family: Arial, sans-serif;">Değerlerin
sıralaması aralıksızdır(diğer bir deyişle aralık arasında bir boşluk yoktur)</span></div>
<a name='more'></a><o:p></o:p><br />
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Bu
istatiksel analiz, verilerin çoğunluğu için şaşırtıcı şekilde doğru çalışma
eğiliminde olmaktadır, ancak kaçınılmaz olarak bu kuralı bozacak istisnalarda
olabilmektedir(örneğin segment üzerinde verinin %98 i mükemmel bir şekilde
rastgele dağılmış, geri kalan %2 lik kısım birkaç veri bloğunda yoğunlaşmış
olabilir-indeks clustering factor değerini çarpıtarak- ). Veya bakılan kayıtlar,
yüklemler arasında karakteristik olmayan bağlantılı değerleri bulundurabilir.</span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Ne
yazıkki, istatistikler bu tip enstrümanlar için ham olduğundan istenilen
seviyede detay bilgisini kayıt etmez. Böylece optimizer bu exceptional veri için potensiyel olarak daha
iyi olabilecek çalıştırma planı alternatiflerini gözden kaçırmaktadır.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Sonuç
olarak, dünya üzerindeki tüm istatistiklerin optimizer’ın daha iyi bir karar
alabilmesine yardımcı olamayacağı durumlar mevcuttur. Mesela, Oracle 11g
sürümüne kadar optimizer PL/SQL tablo fonksiyonlarından çıkan kayıt sayılarını
doğru şekilde tahmin edememekteydi, ve bunun yerine ne olursa olsun hiç bir
gerçekçi temeli olmayan çalıştırma planlarını oluşturmaktaydı. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">İşte bu
noktada bu durumu düzeltmek için ne yapılabilir sorusu ortaya çıkıyor? Yani
optimizer’ı sadece “genel” için değil, ancak özel veri olacak şekilde etkin
nasıl çalıştırabiliz?<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Bu noktada
yukardaki sorunların cevabı Oracle’dan şu şekilde gelmektedir:<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo3; text-indent: -18.0pt;">
<span style="font-family: Symbol;">·<span style="font-family: 'Times New Roman'; font-size: 7pt;">
</span></span><span style="font-family: Arial, sans-serif;">“Özel
durum” SQL’ler için bireysel çalıştırma planı oluşturma ve kayıt etme.<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo3; text-indent: -18.0pt;">
<span style="font-family: Symbol;">·<span style="font-family: 'Times New Roman'; font-size: 7pt;">
</span></span><span style="font-family: Arial, sans-serif;">Bu
bireysel planları tasarlamaya yardımcı olacak gerçek çalışma zamanı
istatistikleri kullanma. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">SQL
Profiller bu yaklaşımın uygulaması olarak karşımıza çıkmakta ve aslında çalışma
biçimleride oldukça basit olmaktadır. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">İlk önce,
hangi SQL lerin “özel veri” içerdiğinin ve
potansiyel olarak daha iyi çalıştırılabilir olduğunun Oracle’a
bildirilmesi gerekmektedir. Bu ya açıkça (DBMS_SQLTUNE.CREATE_TUNING_TASK
prodesüründe elle SQL lerin belirtilmesiyle yapılabilir) veya Oracle’ın “en
aktif” SQL leri analiz için seçmesine
izin verecek şekilde dolaylı olarak yapılabilir(Oracle 11g otomatik görevlerden
yapılabilir). <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">İkinci
olarak, optimizer’ın tahminlerinin “ayarsız” ve “daha iyi olabilir” olduğunun
kanıtlanması gerekmektedir. Bunu gerçekleştirmek için ise
DBMS_SQLTUNE.EXECUTE_TUNING_TASK prosedürü çalıştırılabilirdiği gibi otomatik
görevlerden yapılmasınada imkan verilebilir. Bu, prosesin en can alıcı kısmıdır
ve 3 büyük adım atılmalıdır:<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<u><span style="font-family: Arial, sans-serif;">İlk
adım:</span></u><span style="font-family: Arial, sans-serif;"> Veri örneklemesi yapılmalı ve gerçek sayılar elde
edilmelidir(en önemlisi ise cardinality)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<u><span style="font-family: Arial, sans-serif;">İkinci
adım:</span></u><span style="font-family: Arial, sans-serif;"> Bu sayılar
optimizer’a sağlanır ve çalıştırma planını yeniden değerlendirmesine izin
verilir. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<u><span style="font-family: Arial, sans-serif;">Üçüncü
adım:</span></u><span style="font-family: Arial, sans-serif;"> Eğer optimizer
farklı bir çalıştırma planı ile gelirse, SQL komutunu orjinal hali ile
çalıştırıp, yeni bir çalıştırma planı almalı(emin olmak için birkaç sefer
almalı) ve performans değişimlerini görmek için bu çalıştırma planlarının
kıyaslaması yapılmalıdır. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Eğer bu
denemenin sonuçlarında; <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">a) Optimizer
yeni bir çalıştırma planı getirmiş. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">b) Bu yeni
plan kullanılırken performans esasen öncekinden daha iyi ise, <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">o zaman bu
belirli SQL için varsayılan istatistiklerin yalan söylediği ve optimizer’ın
gerçek değerleri kaçırmasına sebebiyet verdiği kanıtlanmış olacaktır. Dahası,
gerçek sayıların ne olduğu bilinmekte ve elbette gelecek için bunların saklanmasıda mantıklı olacaktır.
<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Peki,
gerçek cardinality sayıları nasıl saklanacaktır? Aslında, düzenli istatistikler
bu detay seviyesi için oldukça ham
olduklarından dolayı güncellenemez. Böylece, bunun yerine kendi SQL komutumuza
iliştireceğimiz ve bu tip bilgiyi saklayacağımız ayrı bir obje(“SQL Profili”)
kullanılacaktır. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Yeni
cardinality değerleri tam olarak nasıl saklanmaktadır? Burada elbette bir sihir
yapılamayacağından “hints” formları içinde saklanmaktadır. Daha önceden
denenmiş ve gerçek bir /*+ cardinality
*/ hinti kullanılacağını düşünebilirsiniz, ama Oracle aslında (biraz daha
gelişmiş yeni bir ) /*+ opt_param */ hinti kullanarak varsayılan cardinality
değerini artırıp azaltarak belli bir ölçekte
tutar. Örneğin;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">/*+
opt_estimate(table, t, scale_rows=100) */<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">-- veya<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">/*+ opt_estimate(index_scan,
t, t_n_idx, scale_rows=0.001) */<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Böylece,
şimdi SQL profiller kullanılırsa tahmini olarak varsayılan cardinality değeri
bu sayılarla çarıplacak ve sonuç olarak
SQL değerlendirme esnasında, optimizer verinin daha gerçekçi bir görünüşü ile
çalışabilecektir.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Bu kısaca
SQL profillerin teoride nasıl çalıştığıdır. Şimdi aşağıdaki örneklerde gerçek
SQL problemleri ile savaşmak üzere bu bilgiler nasıl kullanılacak ona bakalım. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Aşağıda
yer alan problem oldukça sık görülebilecek bir senaryodur. Genellikle
optimizer’ın “aralık tamin eksikliği” şeklinde tanımlanmaktadır. Bir tabloda SHIP_DATE
adlı kolonun sipariş tarihine karşılık geldiğini düşünelim. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL> CREATE
TABLE orders_tbl (order_no, ship_date)<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="text-indent: 35.4pt;">
<span style="font-family: 'Courier New';">AS
SELECT level, CAST (sysdate-level/24 AS DATE)<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="text-indent: 35.4pt;">
<span style="font-family: 'Courier New';">FROM
dual<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="text-indent: 35.4pt;">
<span style="font-family: 'Courier New';">CONNECT
BY level <= 500000;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Bu sipariş
tarihi kolonunda indekste mevcut olsun;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">CREATE INDEX orders_shipping_idx
ON orders_tbl (ship_date);<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Böylece
hızlıca aşağıdaki basit sorgu ile en son siparişler listelenmektedir:<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SELECT * FROM
orders_tbl WHERE ship_date >= trunc(sysdate, 'DD');<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Bunun
dışında verinin bir uyarısı mevcuttur; siparişler henüz gönderilmemiştir.
İşaretlemek için developer arkadaşlar ilerde “özel” bir tarih kullanılmasına
karar vermiştir. January 1st 9999 kullanılmakta
ve bu tarihte siparişin gönderileceği beklentimiz yoktur aslında. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Aşağıdaki
gibi bir tane gönderilmeyen bir sipariş olduğunu farzedelim. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>INSERT
INTO orders_tbl VALUES (-1, DATE '9999-01-01');<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>COMMIT;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Sonuçta
veri hakkında taze bilgiyi optimizer’a sağlamak için istatistikleri topluyoruz:<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">EXEC
dbms_stats.gather_table_stats(APP1, 'orders_tbl', cascade => TRUE);<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Artık en
son siparişleri talep etmeye hazırız. Tablomuzda 500,000 kayıt mevcut
olduğundan, bunların yaklaşık 24 tanesi bugün sipariş edildiğinden(tablo
oluşturuken belirledik, tablonun yapısına bkz), belli ki bu veriyi almak için
indeks kullanılması en verimli metot olacaktır:<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SELECT * FROM
orders_tbl WHERE ship_date >= trunc(sysdate, 'DD');<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">----------------------------------------------------------------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">| Id | Operation | Name | ROWS
| Bytes | Cost (%CPU)| TIME |<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">----------------------------------------------------------------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">| 0 | SELECT STATEMENT |
| 496K| 6302K|
452 (24)| 00:00:06 |<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">|* 1 |
TABLE ACCESS FULL| ORDERS_TBL |
496K| 6302K| 452
(24)| 00:00:06 |<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">--------------------------------------------------------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">Predicate
Information (IDENTIFIED BY operation id):<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">---------------------------------------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> 1 - FILTER("SHIP_DATE">=TRUNC(SYSDATE@!,'fmdd'))<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Baktığımızda
işler umduğumuz gibi gitmedi ve FULL TABLE SCAN meydana geldi, indeks
kullanılmadı! Eğer AUTOTRACE çıktısına
bakılırsa cardinality beklentisinin besbelli “ayarsız” olması yüzünden bunun oluştuğu
açık olmaktadır(yaklaşık 24 olması gerekirken 496.000 kayıt). <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Peki neden
besbelli yanlış hesaplanmış olan bu cardinality sonucunu almaktayız? Aslında
cevap basittir. Bunun sebebi optimizer’ın “sürekli aralık” varsayımıdır. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Optimizer
“gönderilmemiş” siparişleri değerlendirmeye almamış, böylece daha geniş bir
aralık görmüştür. Ancak bu şekilde sadece 1 masum kayıt ve optimizer’ın
hassaslığı direkt çöpe gitmiştir. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Elbette
buradaki ana sebep kötü veri tasarımıdır ve bunu düzeltecek doğru yol
“gönderilmemiş” kayıtları farklı işaretlemekten geçmektedir.(örneğin; sipariş
gönderim durumunu kayıt edecek ayrı bir kolon ekleme gibi).<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Ancak,
burda kolon ekleme imkanı olmadığını
farzederek bu özel SQL için bir SQL profil oluşturma yoluna gitmek en mantıklı
yol olacaktır. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Bu noktada
ilk yapılması gereken; Oracle’a optimizer’dan daha hassas özel bir SQL
komutunun varlığını bildirmektir. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">var task_name
varchar2(30)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">EXEC :task_name
:= dbms_sqltune.create_tuning_task(<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> sql_text => 'SELECT * FROM orders WHERE
ship_date >= trunc(sysdate, ''DD'')'<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">);<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Sonrasında,
Oracle’a bu SQL komutunu analiz etmesine imkan verilecektir.İşlemin nasıl
gitiiğini görmek için SQL izlemeside devreye alınacaktır:<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL> ALTER
SESSION SET EVENTS '10046 trace name context forever, level 8';<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL> EXEC
dbms_sqltune.execute_tuning_task(:task_name);<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">Once tuning task
is complete, let’s see if ORACLE found a better execution plan for our SQL (you
can see the full listing here):<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SET linesize 180<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SET longchunksize
180<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SET pagesize 900<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SET long 1000000<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SELECT
dbms_sqltune.report_tuning_task(:task_name) FROM dual;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">-------------------------------------------------------------------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">FINDINGS SECTION
(1 finding)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">-------------------------------------------------------------------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">1- SQL Profile
Finding (see EXPLAIN plans SECTION below)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">--------------------------------------------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> A potentially better execution plan was found
FOR this statement.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> Recommendation (estimated benefit: 99.53%)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> ------------------------------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> - Consider accepting the recommended SQL
profile.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> EXECUTE
dbms_sqltune.accept_sql_profile(task_name => 'TASK_120',<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> task_owner => 'APP1', REPLACE
=> TRUE);<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> Validation results<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> ------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">The SQL profile was tested BY executing BOTH
its plan AND the original plan AND
measuring their respective execution statistics. A plan may have been ONLY
partially executed IF the other could be run TO completion IN less TIME.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> Original Plan WITH SQL Profile % Improved<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> ------------- ---------------- ----------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> Completion STATUS: COMPLETE COMPLETE<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> Elapsed
TIME(us): 234447 444 99.81 %<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> CPU TIME(us): 236666 0 100 %<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> USER I/O TIME(us): 0 0<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> Buffer Gets: 838 4 99.52 %<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> Physical READ Requests: 0 0<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> Physical WRITE Requests: 0 0<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> Physical READ Bytes: 0 0<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> Physical WRITE Bytes: 0 0<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> ROWS Processed: 13 13<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> Fetches: 13 13<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> Executions: 1 1<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> Notes<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> -----<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> 1. The original plan was FIRST executed TO
warm the buffer cache.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> 2. Statistics FOR original plan were averaged
OVER NEXT 2 executions.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> 3. The SQL profile plan was FIRST executed TO
warm the buffer cache.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> 4. Statistics FOR the SQL profile plan were
averaged OVER NEXT 9 executions.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">2- USING SQL
Profile<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">--------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">Plan hash VALUE: 2399245311<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">--------------------------------------------------------------------------------------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">| Id | Operation | Name | ROWS | Bytes | Cost (%CPU)| TIME |<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">--------------------------------------------------------------------------------------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">| 0 | SELECT STATEMENT | | 21
| 273 | 4
(0)| 00:00:01 |<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">| 1 |
TABLE ACCESS BY INDEX ROWID| ORDERS_TBL |
21 | 273 | 4
(0)| 00:00:01 |<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">|* 2 |
INDEX RANGE SCAN |
ORDERS_SHIPPING_IDX| 13 | |
3 (0)| 00:00:01 |<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">--------------------------------------------------------------------------------------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">Predicate
Information (IDENTIFIED BY operation id):<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">---------------------------------------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> 2 - access("SHIP_DATE">=TRUNC(SYSDATE@!,'fmdd'))<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Yukarda doğru
cardinality değerinini işleme girdiğini gördüğümüz gibi, aynı zamanda arzu
ettiğimiz INDEX SCAN işlemininde gerçekleştiğini görmekteyiz. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Peki,
Oracle bu doğru sayılara nasıl geldi? bu noktada Oracle SQL izlemesi ile elde
edilen sonuca bakıyoruz: <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<u><span style="font-family: Arial, sans-serif;">İlk adım:</span></u><span style="font-family: Arial, sans-serif;"> Veri örneklemesi yapılmaktadır.</span><o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">-- Kolondaki tüm
veri örneklenmektedir. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SELECT /* DS_SVC
*/ SUM(C1) FROM (<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> SELECT /*+ NO_INDEX_FFS( "ORDERS_TBL") */ 1 AS C1 <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> FROM "ORDERS_TBL" SAMPLE
BLOCK(62.5, 8) SEED(1)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">-- Kolonda NOT
NULL veriler örneklenir .<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SELECT /* DS_SVC
*/ SUM(C1) FROM (<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> SELECT /*+ INDEX_FFS( "ORDERS_TBL"
"ORDERS_SHIPPING_IDX") */ 1 AS
C1<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> FROM "ORDERS_TBL" SAMPLE
BLOCK(58.7803, 8) SEED(1)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> WHERE ( "ORDERS_TBL".SHIP_DATE
IS NOT NULL)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">-- Kolonda
“uygun” durumda veri örneklenir. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SELECT /* DS_SVC
*/ SUM(C1) FROM (<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> SELECT /*+ NO_INDEX_FFS( "ORDERS_TBL") */ 1 AS C1<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> FROM "ORDERS_TBL" SAMPLE
BLOCK(62.5, 8) SEED(1)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> WHERE ("ORDERS_TBL"."SHIP_DATE">=TRUNC(SYSDATE@!,'fmdd'))<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<u><span style="font-family: Arial, sans-serif;">İkinci
adım:</span></u><span style="font-family: Arial, sans-serif;"> "Örnekleme”
sonuçlarına dayanarak satırlar “ölçeklenir”. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SELECT /* DS_SVC
*/ <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> /*+ OPT_ESTIMATE(TABLE, "ORDERS_TBL",
SCALE_ROWS=4.189686512e-05) */ C1, C2, C3<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">FROM (<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> SELECT /*+ INDEX( "ORDERS_TBL"
"ORDERS_SHIPPING_IDX") */
COUNT(*) AS C1, <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> 4294967295 AS C2, COUNT(*) AS C3 <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> FROM "ORDERS_TBL" <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';"> WHERE ("ORDERS_TBL"."SHIP_DATE">=TRUNC(SYSDATE@!,'fmdd'))<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<u><span style="font-family: Arial, sans-serif;">Üçüncü
adım:</span></u><span style="font-family: Arial, sans-serif;"> Yeni planın
daha iyi olup olmadığının doğrulanması.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">-- Orjinal plan
ile çalıştırma: 3 sefer<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">/* SQL
Analyze(144,0) */ SELECT * FROM orders_tbl WHERE ship_date >=
trunc(sysdate, 'DD')<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">-- Ardından 10
sefer yeni plan çalıştırılır. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">/* SQL
Analyze(144,0) */ SELECT * FROM orders_tbl WHERE ship_date >=
trunc(sysdate, 'DD')<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Böylece
Oracle veriyi örneklemiştir, yeni bir plan ile gelmiştir ve yeni planın eski
plandan daha iyi olduğunuda doğrulamıştır. Ardından bu çalışmanın sonuçlarını
SQL Profil içine kaydetmiştir. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Son adım
olarak yapılması gereken bu planın onaylanması ve böylece aynı SQL komutu için
bu üstün çalıştırma planının sonraki çalıştırmalarda da yeniden kullanılmasını
sağlamaktır. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">EXEC
dbms_sqltune.accept_sql_profile(:task_name);<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-58085405334275817702012-05-16T13:44:00.001+03:002012-05-16T13:46:32.756+03:00İlk TROUG DBA SIG toplantısı<br />
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;">Bu ay TROUG’un DBA SIG Toplantısı 31 Mayıs tarihinde
Bilginç IT Akademide gerçekleşecek. Bu
Oracle Kullanıcıları Grubunun ilk DBA SIG Toplantısı olacak. Sunumda benimde “Ham
izleme dosyalarını okuma metotları” başlığı altında bir konuşmam olacak. </span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;">Sunum
konuları olarak, Data Masking, Partitioning, performance tuning, trace (ham
izleme) dosyalarını okumak gibi Oracle DBA’lerin genelini ilgilendirecek
konular seçildi.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<b><span style="font-family: Arial, Helvetica, sans-serif;"><i><u>Etkinlik
Programı</u>:</i><u><o:p></o:p></u></span></b></div>
<div class="MsoNoSpacing">
<b><u><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></u></b></div>
<div class="MsoNoSpacing">
<b><span style="font-family: Arial, Helvetica, sans-serif;">1<i>3:00-14:00 Açılış
Konuşması + Data Masking Nedir? – Zekeriya Besiroglu </i><o:p></o:p></span></b></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;">İçerik: Data masking kullanarak veritabanının güvenliği
arttırmak, test sistemlerinde gerçek veri kullanmadan gerçek veri
performansını yakalamak, Data Masking uygulamaları.</span></div>
<div class="MsoNoSpacing">
<b><span style="font-family: Arial, Helvetica, sans-serif;"><i>14:00-14:15 Kahve
Molası</i></span></b></div>
<div class="MsoNoSpacing">
<b><span style="font-family: Arial, Helvetica, sans-serif;"><i>14:15-15:00
Enterprise Manager ile Performance Tuning – Gökhan Atıl </i><o:p></o:p></span></b></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;">İçerik: Enterprise Manager hakkında ön bilgi, Enterprise
Manager Performance Tuning açısından DBA’lere ne gibi olanaklar sağlar,
Enterprise Manager Top Acitivity Page nasıl yorumlanır</span></div>
<div class="MsoNoSpacing">
<b><span style="font-family: Arial, Helvetica, sans-serif;"><i>15:00-15:15 Kahve
Molası</i><o:p></o:p></span></b></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><b><i>15:15-16:00 Oracle Partitioning Nedir ve Nasıl Yönetilir?
– Kamil Türkyılmaz</i></b><o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;">İçerik: Partitioning’in tarihçesi ve gelişimi,
Partitioning çeşitleri, Parititioning yöntemine nasıl karar verilir,
partitioning kullanımının artıları ve eksileri.</span></div>
<div class="MsoNoSpacing">
<b><span style="font-family: Arial, Helvetica, sans-serif;"><i>16:00-16:15 Kahve
Molası</i></span></b></div>
<div class="MsoNoSpacing">
<b><span style="font-family: Arial, Helvetica, sans-serif;"><i>16:15-17:00 Ham
izleme dosyalarını okuma metotları – Uğur İnal</i><o:p></o:p></span></b></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;">İçerik: Ham izleme dosyalarının okuması, izleme
metotları, TKPROF ve trace analyzer araçları, bu araçların farklılıkları,
verilerin okunması ve önemli değerler<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;">Kapasite sınırı nedeniyle katılımcıların <a href="http://www.troug.org/?page_id=101">iletişim formunu</a> kullanarak kayıt
yaptırması gerekmektedir.</span><span style="font-family: Arial, Helvetica, sans-serif;"> </span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;">Bilginç Ulaşım Bilgileri: <a href="http://www.bilginc.com/default.aspx?TABLE=icerikler&ID=7&RELID=0">http://www.bilginc.com/default.aspx?TABLE=icerikler&ID=7&RELID=0</a></span><o:p></o:p></div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com1tag:blogger.com,1999:blog-2000514949047523591.post-89967043716270635882012-04-27T10:00:00.000+03:002012-04-27T10:10:50.994+03:00EXACT_MATCHING_SIGNATURE ve FORCE_MATCHING_SIGNATURE hakkında<br />
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Oracle
dökümanlarında </span><i style="font-family: Arial, sans-serif;">EXACT_MATCHING_SIGNATURE</i><span style="font-family: Arial, sans-serif;">
normalize SQL textinde hesaplanan imzadır şeklinde tanımlanmıştır. Buradaki normalizasyon kavramı beyaz
alanların çıkarılması ve gerçek olmayan tüm stringlerin büyük harfe
dönüştürülmesidir. CURSOR_SHARING parametresi EXACT olarak ayarlandığında bu
imza kullanılırken, </span><i style="font-family: Arial, sans-serif;">FORCE_MATCHING_SIGNATURE</i><span style="font-family: Arial, sans-serif;">
kolon değeri ise CURSOR_SHARING parametresi FORCE olarak ayarlandığında Oracle’ın
hesapladığı imzadır. </span><span style="font-family: Arial, sans-serif;"> </span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Şimdi bu
kolonların alacağı bazı değerleri ve bunların anlamlarını aşağıda inceleyelim. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<u><span style="font-family: Arial, sans-serif;">I. SENARYO:
<o:p></o:p></span></u></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<i><span style="font-family: Arial, sans-serif;">EXACT_MATCHING_SIGNATURE</span></i><span style="font-family: Arial, sans-serif;">
ve <i>FORCE_MATCHING_SIGNATURE</i>
değerleri sıfır olarak ayarlanmıştır. Bu senaryo eğer komut tipi PL/SQL paketi,
INSERT,ALTER INDEX,LOCK, SET ROLE ve mevcut SYS tablolarından($,# olanlar,
ancak görünümler hariç) SELECT/UPDATE işlemleri veya dahili Oracle komutları içindir. Bunun yanında daha fazla komut olabilir, ancak
Oracle SQL in yeniden kullanılamayacağını düşünecek ve ardından değerleri 0
olarak işaretleyecektir.</span></div>
<a name='more'></a><o:p></o:p><br />
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Aşağıdaki
örnekte bir test tablosuna sahte(dummy) değerler giriyorum ve ardından EXACT_MATCHING_SIGNATURE
</span><span style="font-family: Arial, sans-serif;"> </span><span style="font-family: Arial, sans-serif;">ve FORCE_MATCHING_SIGNATURE için kolon
değerlerini kontrol ediyorum. </span><span style="font-family: Arial, sans-serif;"> </span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>create
table test (col1 number, col2 number);<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">Table created.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>insert
into test values (1,1);<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">1 row created.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>insert
into test values (2,2);<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">1 row created.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>insert
into test values (3,3);<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">1 row created.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>commit;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>select
sql_id, sql_text from v$sql where sql_text like ‘insert%test%’;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL_ID SQL_TEXT<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">------------- ----------------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">4tdr62wtgx7ls insert into test values (3,3)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">3283yg26ref6h insert into test values (1,1)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">2rdxtrdc6ztdf insert into test values (2,2)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Aşağıdaki
sorgu <i>EXACT_MATCHING_SIGNATURE</i> ve <i>FORCE_MATCHING_SIGNATURE</i> için kolon değerlerini kontrol etmektedir.
Üste belirttiğim gibi bu değerlerin 0 olması gerekmektedir. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>SELECT
sql_id, exact_matching_signature, force_matching_signature from v$sql where
sql_id=’4tdr62wtgx7ls’;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL_ID EXACT_MATCHING_SIGNATURE FORCE_MATCHING_SIGNATURE<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">------------- ------------------------ ----------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">4tdr62wtgx7ls 0 0<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<u><span style="font-family: Arial, sans-serif;">II. SENARYO:
<o:p></o:p></span></u></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<i><span style="font-family: Arial, sans-serif;">EXACT_MATCHING_SIGNATURE=FORCE_MATCHING_SIGNATURE</span></i><span style="font-family: Arial, sans-serif;">. Bu senaryo bind değişkenlerinin
kullanıldığı durumlarda kullanılmaktadır. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Bu senaryonun
örneğinin amacı, bind değişkeni kullanıldığında <i>EXACT_MATCHING_SIGNATURE</i>
değerinin <i>FORCE_MATCHING_SIGNATURE</i> değerine eşit olduğunu kanıtlamaktır. Bunu
elde etmek için, OBJ_ID adında bir değişken tanımlıyorum ve farklı oturumlardan
farklı değerlerde OBJ_ID kullanarak birçok kez SELECT sorgusu alıyorum. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>column
EXACT_MATCHING_SIGNATURE format 99999999999999999999999999999999999999999999999<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>column
FORCE_MATCHING_SIGNATURE format 99999999999999999999999999999999999999999999999<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>VARIABLE OBJ_ID
NUMBER;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>EXEC : OBJ_ID:=073534;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>SELECT /*
With Bind Value */ OBJECT_NAME FROM MYOBJECTS WHERE OBJECT_ID=:OBJ_ID;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">OBJECT_NAME <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">---------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">DBA_HIST_LIBRARYCACHE<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>EXEC :OBJ_ID:=345348<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">PL/SQL procedure
successfully completed.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>SELECT /*
With Bind Value */ OBJECT_NAME FROM MYOBJECTS WHERE OBJECT_ID=:OBJ_ID;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">OBJECT_NAME <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">---------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">DBA_HIST_LIBRARYCACHE<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>EXEC :OBJ_ID:=073532<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">PL/SQL procedure
successfully completed.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>SELECT /*
With Bind Value */ OBJECT_NAME FROM MYOBJECTS WHERE OBJECT_ID=:OBJ_ID;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">OBJECT_NAME <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">---------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">DBA_HIST_LIBRARYCACHE<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Aşağıdaki
sorgu <i>EXACT_MATCHING_SIGNATURE </i>ve<i> FORCE_MATCHING_SIGNATURE</i> için kolon
değerlerinin bind değişken kullanıldığından dolayı aynı olduğunu
göstermektedir. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>SELECT
sql_id, executions, exact_matching_signature, force_matching_signature from
v$sql where sql_id=’drf4r1g5qhrs8′;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL_ID EXECUTIONS EXACT_MATCHING_SIGNATURE FORCE_MATCHING_SIGNATURE<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">------- ------------
-------------------- --------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">drf4r1g5qhrs8 3 7984808275468932365 7984808275468932365<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<u><span style="font-family: Arial, sans-serif;">III. SENARYO:
<o:p></o:p></span></u></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<i><span style="font-family: Arial, sans-serif;">EXACT_MATCHING_SIGNATURE </span></i><span style="font-family: Arial, sans-serif;">ve<i>
FORCE_MATCHING_SIGNATURE</i> değerlerinin birbirinden farklı olduğu durum. Bu
senaryo, SQl komutunda farklı literallerin kullanıldığı durumdur. SQL komutu CURSOR_SHARING
parametre değeri FORCE olduğunda paylaşılacaktır.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Bu örneğin
amacı; bind değişkenler kullanılmadığında EXACT_MATCHING_SIGNATURE değerinin FORCE_MATCHING_SIGNATURE değerine eşit olmadığını göstermektir. Bunu
elde etmek için, farklı literal değerler ile birçok kez aynı SQL komutunu
çalıştırıyorum. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Please
note that I have NOT set CURSOR_SHARING to FORCE.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>SELECT /*
Without Bind Value */ OBJECT_NAME FROM MYOBJECTS WHERE OBJECT_ID=073535;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">OBJECT_NAME<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">--------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">DBA_HIST_LATCH_PARENT<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>SELECT /*
Without Bind Value */ OBJECT_NAME FROM MYOBJECTS WHERE OBJECT_ID=073538;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">OBJECT_NAME<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">----------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">DBA_HIST_LATCH_MISSES_SUMMARY<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>SELECT /*
Without Bind Value */ OBJECT_NAME FROM MYOBJECTS WHERE OBJECT_ID=073534;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">OBJECT_NAME<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">---------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">DBA_HIST_LIBRARYCACHE<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>SELECT /*
Without Bind Value */ OBJECT_NAME FROM MYOBJECTS WHERE OBJECT_ID=073530;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">OBJECT_NAME<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">---------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">DBA_HIST_LIBRARYCACHE<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">Aşağıdaki
sorgu <i>EXACT_MATCHING_SIGNATURE </i>ve<i> FORCE_MATCHING_SIGNATURE</i> için kolon
değerlerinin bind değişken olmaksızın farklı literal değerler kulalnıldığından
dolayı farklı olduğunu göstermektedir. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL> SELECT
SQL_ID, SQL_TEXT, EXACT_MATCHING_SIGNATURE,FORCE_MATCHING_SIGNATURE FROM V$SQL
WHERE SQL_TEXT LIKE ‘%Without Bind Value%’;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL_ID SQL_TEXT
EXACT_MATCHING_SIGNATURE
FORCE_MATCHING_SIGNATURE<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">------- ---------- --------------- ----------------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">4rgh63hsg30tf
SELECT /* Without Bind Value */ 35481458635320564024 32512835381060113442<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">OBJECT_NAME FROM
MYOBJECTS WHERE<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">OBJECT_ID=073535<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">7ykcv2wwz1brd
SELECT /* Without Bind Value */ 62398003617908267518 32512835381060113442<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">OBJECT_NAME FROM
MYOBJECTS WHERE<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">OBJECT_ID=073534<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">fb40628bj9kl5
SELECT /* Without Bind Value */ 44792845587509047365 32512835381060113442<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">OBJECT_NAME FROM
MYOBJECTS WHERE<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">OBJECT_ID=073530<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>SELECT
SQL_ID FROM V$SQL WHERE FORCE_MATCHING_SIGNATURE=32512835381060113442;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL_ID<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">--------------<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">4rgh63hsg30tf<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">7ykcv2wwz1brd<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">fb40628bj9kl5<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<u><span style="font-family: Arial, sans-serif;">Bu
kolonlar ne kadar kullanışlıdır?<o:p></o:p></span></u></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;"><u><br /></u></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">1. Özdeş
olan ancak bind değişken kullanmayan SQL komutlarını bulmak için kullanışlıdır.
10g öncesinde bu sonuç setini almak için kesin bir yol yoktu. 10g itibariyle
aşağıdaki sorguyu çalıştırmak yeterli olacaktır. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SQL>column
FORCE_MATCHING_SIGNATURE format 99999999999999999999999999999999999999999<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">SELECT SQL_ID ,
SQL_TEXT, force_matching_signature FROM V$SQL WHERE force_matching_signature IN
(SELECT force_matching_signature<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">FROM v$sql<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">WHERE
force_matching_signature <> 0<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">AND
force_matching_signature <> exact_matching_signature<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">GROUP BY
force_matching_signature<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">HAVING COUNT(*)
> 1)<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: 'Courier New';">ORDER BY 3;<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif;">2. Bu kolon CURSOR_SHARING parametresi FORCE
olarak ayarlanmış sistemlerde SQL komutlarının yeniden kullanılıp
kullanılmadığını kontrol etmek içinde oldukça kullanışlıdır. <o:p></o:p></span></div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-20503319887488714542012-04-25T14:55:00.003+03:002012-04-25T14:55:38.659+03:00Oracle 11.2 sürümünde DBMS_PARALLEL_EXECUTE paketi<br />
<div class="MsoNoSpacing">
<span style="font-family: "Arial","sans-serif";">Oracle
11.2 sürümü ile yeni gelen DBMS_PARALLEL_EXECUTE prosedürü, büyük veri
setlerini artalan şekilde güncellemeye izin veren bir pakettir. Temel olarak,
ROWID veya nümerik kolon veya kullanıcı tabanlı SQL komutuna dayalı satırlara
ayırarak daha küçük veri yığınları oluşturulur, ardından bu yığınlar paralel
şekilde güncellenir. Bu paketin avantajları
ise; bu yığınlar bireysel olarak commit edilmektedir ve ROWID’e dayalı yığınlar
olduğunda daha iyi performansa ulaşılmaktadır.
<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<i><span style="font-family: "Arial","sans-serif";">DBMS_PARALLEL_EXECUTE neden önemlidir?<o:p></o:p></span></i></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "Arial","sans-serif"; mso-fareast-font-family: Arial;">1.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Büyük bir tekil işlem birçok işlem
yığınına bölünebilmektedir. <o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "Arial","sans-serif"; mso-fareast-font-family: Arial;">2.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Golden Date veya Streams gibi bağlı
sistemlerde daha az etki yapmaktadır. <o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "Arial","sans-serif"; mso-fareast-font-family: Arial;">3.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Yığınlar ROWID ve bloklara bağlı
olduğunda paralel DML işlemleri ile kıyaslandığında daha iyi performans
göstermektedir. <o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "Arial","sans-serif"; mso-fareast-font-family: Arial;">4.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Daha az undo alanına ihtiyaç duyar ve
bu sebeple ORA-01555 hatası ile karşılaşma ihtimali daha düşük olmaktadır. <o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "Arial","sans-serif"; mso-fareast-font-family: Arial;">5.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Hata ile karşılaşıldığında rollback
işlemine etkisi şiddetli olmamaktadır. <o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "Arial","sans-serif"; mso-fareast-font-family: Arial;">6.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Kilit süresi daha düşüktür. <o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "Arial","sans-serif"; mso-fareast-font-family: Arial;">7.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Hatalı yığın işlemlerini yeniden
başlatabilmektedir. <o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "Arial","sans-serif"; mso-fareast-font-family: Arial;">8.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Diğer paralel özelliklerin aksine, DBMS_PARALLEL_EXECUTE paketi Enterprise Edition lisansına şimdilik ihtiyaç
duymamaktadır. <o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo1; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "Arial","sans-serif"; mso-fareast-font-family: Arial;">9.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Manuel kodlama gereksinimini
azaltmakta ve paralel işlemler üzerinden daha iyi tekdüze dağıtım
yapabilmektedir. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: "Arial","sans-serif";"></span></div>
<a name='more'></a><br />
<div class="MsoNoSpacing">
<i><span style="font-family: "Arial","sans-serif";">DBMS_PARALLEL_EXECUTE işlem adımları<o:p></o:p></span></i></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo2; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "Arial","sans-serif"; mso-fareast-font-family: Arial;">1.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">CREATE_TASK ile yeni bir görev
oluşturulur.<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo2; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "Arial","sans-serif"; mso-fareast-font-family: Arial;">2.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Aşağıdakilerden birini kullanarak
istenilen boyutlarda yığınlar oluşturulur.
<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt;">
<span style="font-family: "Arial","sans-serif";">CREATE_CHUNKS_BY_ROWID<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt;">
<span style="font-family: "Arial","sans-serif";">CREATE_CHUNKS_BY_NUMBER_COL<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt;">
<span style="font-family: "Arial","sans-serif";">CREATE_CHUNKS_BY_SQL<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo2; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "Arial","sans-serif"; mso-fareast-font-family: Arial;">3.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Update komutu tanımlanır.<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo2; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "Arial","sans-serif"; mso-fareast-font-family: Arial;">4.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Paralel çalışacak görev RUN_TASK komutu
ile yürütülür. <o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo2; text-indent: -18.0pt;">
<!--[if !supportLists]--><span style="font-family: "Arial","sans-serif"; mso-fareast-font-family: Arial;">5.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Hata işleme gerçekleştirilir ve
RESUME_TASK ile hatalı yığınlar tekrardan çalıştırılır. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: "Arial","sans-serif";">Aşağıdaki
örnekte ilk adımda ilgili görev oluşturulmaktadır.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: "Courier New";">DBMS_PARALLEL_EXECUTE.CREATE_TASK
(dbms_prl_task1);<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: "Arial","sans-serif";">Ardından
ROWID’ye dayalı yığınlar oluşturulur. Örne şema HR ve tablo ise EMP tablosudur.
<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: "Courier New";">DBMS_PARALLEL_EXECUTE.CREATE_CHUNKS_BY_ROWID
(task_name => <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: "Courier New";"> dbms_prl_task1<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: "Courier New";">, table_owner
=> HR<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: "Courier New";">, table_name
=> 'EMP'<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: "Courier New";">, by_row =>
TRUE<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: "Courier New";">, chunk_size
=> 1000);<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: "Arial","sans-serif";">Son adımda
ise oluşturulan yığınlar üzerinden 4 paralel proses ile çalışanların maaşlarını
%10 artıran UPDATE işlemi alttaki gibi yapılmaktadır. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: "Courier New";">DBMS_PARALLEL_EXECUTE.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: "Courier New";">RUN_TASK
(task_name => dbms_prl_task1<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: "Courier New";">, sql_stmt =>
'UPDATE HR.EMP e<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: "Courier New";"> SET e.salary = e.salary *0.10<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: "Courier New";"> WHERE rowid BETWEEN 1 AND 12000’<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: "Courier New";">, language_flag
=> DBMS_SQL.native<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: "Courier New";">, parallel_level
=> 4);<o:p></o:p></span></div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-55329976353574883552012-04-18T16:35:00.000+03:002012-04-28T21:52:52.258+03:00Trace Analyzer aracı ile izleme dosyalarının analizi<br />
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;">Ham
formattaki izleme dosyalarını okunabilir formata dönüştürmek için kullanılan en
yaygın araç olan TKPROF ne yazıkki bind değişkenlerini rapora ekleyememektedir.
Ayrıca TKPROF içinde aynı anda birden
fazla işlem tarafından kullanılan bloklar listelenmemektedir. Bu gibi
kısıtlamalar sebebiyle, TKPROF aracına alternatif olarak Oracle’ın ücretsiz bir aracı
olan “Trace Analyzer” aracı Oracle Metalink’ten indirilip kullanılabilir. Böylece,
aynı anda birden fazla işlem tarafından kullanılan ve kilite sebebiyet veren
segmentler ve ilgili sıcak bloklarda raporlandığı gibi, ilgili SQL komutlarının hash değerleri ve kullanılan farklı bind değerlerinin yaptığı
bekleme istatsitikleri ve yürütme planı bilgilerinide görme imkanına sahibiz.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;">“Trace
Analyzer” aracı ile tek bir ham izleme dosyası analiz edilebildiği gibi,
istenirse birden fazla ham izleme dosyasıda tek bir rapor gövdesinde
alınabilmektedir. Analiz işlemi sonunda elde edilen zip dosyada TKPROF raporu
yer aldığı gibi, çok kapsamlı bir HTML formatta raporda yer almaktadır. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;">Trace
Analyzer aracı ile izleme analizinin raporlanması işleminden önce aşağıdaki
adımların sırasıyla uygulanması gerekmektedir.</span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"></span></div>
<a name='more'></a><br />
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo1; text-indent: -18.0pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">1. </span><span style="font-family: Arial, Helvetica, sans-serif;">İlk aşamada; Trace
Analyzer aracının Oracle Metalink’ten indirilmesinden sonra SQL*Plus komut
satırından SYS ile oturum açıp TRCA aracı aşağıdaki gibi kurulmalıdır. Benim
trca dosyalarım C:\trca altında yer almaktadır.</span><span style="font-family: Arial, sans-serif; font-size: 10pt;"><o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt;">
<br /></div>
<div class="MsoNoSpacing" style="margin-left: 35.4pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">SQL> @C:\trca\install\tacreate.sql<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing" style="margin-left: 35.4pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">Kurulum esnasında bazı sorulara cevap
verilmelidir:<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 35.4pt;">
<br /></div>
<div class="MsoNoSpacing" style="margin-left: 71.4pt; mso-list: l0 level1 lfo2; text-indent: -18.0pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">· <i>Optional Connect
Identifier:</i>
Bazı kısıtlamalı sistemlerde @<instance_adı> şeklinde belirtilir.
Opsiyoneldir. Eğer gerekli değilse boş bırakıp
enter tuşuna basın.<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 71.4pt; mso-list: l0 level1 lfo2; text-indent: -18.0pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">· <i>TRCANLZR password:</i> Trace Analyzer
aracını çalıştırmak için şifre. Opsiyoneldir.<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 71.4pt; mso-list: l0 level1 lfo2; text-indent: -18.0pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">· <i>TRCANLZR default
tablespace:</i>
Trace Analyzer kurulumunda gerekli olan tablo ve görünümlerin kurulacağı
varsayılan tablespace ismi. USERS tablespace varsayılandır.<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 71.4pt; mso-list: l0 level1 lfo2; text-indent: -18.0pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">· <i>TRCANLZR Temporary
Tablespace:</i>
Trace Analyzer çalışırken bilgilerin tutulacağı geçici tablespace. Varsayılan
olarak TEMP dir.<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 71.4pt; mso-list: l0 level1 lfo2; text-indent: -18.0pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">· <i>Type of large objects
in TRCA repository:</i>
TRCA ambarında büyük objelerin geçici veya kalıcı olarak tutulma seçeneği. T
olarak geçici olması tavsiye edilir. <o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo1; text-indent: -18.0pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">2. Oturum bazlı
izlemenin etkinleştirilmesi gerekmektedir. İzleme dosyaları varsayılan olarak
udump dizini altında yer almaktadır ve izleme açıldığında çok sayıda izleme
dosyası oluşturulacağından, hangi dosyanın bizim izlemek istediğimiz kullanıcının
SQL işlemlerini içeren izleme dosyası olduğunun belirlenmesinde sıkıntı
olacağından, başlayacak olan izleme dosyasına bir IZLEME1 önekli bir “isim
tanımlayıcı” ekliyorum.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing" style="margin-left: 35.4pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">SQL> ALTER SESSION SET
tracefile_identifier='IZLEME1';<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 35.4pt;">
<br /></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo1; text-indent: -18.0pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">3. </span><span style="font-family: Arial, Helvetica, sans-serif;">Ardından izlenmesini
istediğimiz oturumun SID ve SERIAL# değerleriyle birlikte bekleme ve bind
değişkenlerininde izleme dosyasında tutulmasını istediğimizden aşağıdaki izleme
komutunu devreye sokuyoruz. Örneğimde 10 numaralı SID ve serial numarası ise
115.</span><span style="font-family: Arial, sans-serif; font-size: 10pt;"><o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt;">
<br /></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">SQL>exec dbms_support.start_trace(sid=> 10,
serial#=>115, waits=>true,binds=>false);<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt;">
<br /></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt;">
<span style="font-family: Arial, Helvetica, sans-serif;">NOT: İlgili kullanıcının hangi SID ve SERIAL#
değerine sahip olduğunu bulmak için aşağıdaki sorgu kullanılabilir.Aşağıda TEST
domainindeki UGUR adlı aktif durumdaki windows kullanıcısının SID ve SERIAL#
değerini buluyorum.<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt;">
<br /></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">SQL>
SELECT OSUSER, SID, SERIAL#, USERNAME, STATUS<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; text-indent: 34.8pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">FROM v$SESSION where
UPPER(OSUSER) = 'TEST\UGUR’<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; text-indent: 34.8pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">AND status = 'ACTIVE';<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo1; text-indent: -18.0pt;">
<span style="font-family: Arial, sans-serif;">4.<span style="font-family: 'Times New Roman';"> </span></span><span style="font-family: Arial, sans-serif;">SQL*Plus ekranından
SYS kullanıcısı ile oturum açıp aşağıdaki gibi Trace Analyzer aracı ile <i>“nunicist_ora_656_IZLEME1.trc”</i> adlı izleme
dosyasının analizini yapıyorum. Sonuç olarak zip uzantılı bir dosya
oluşturulacaktır. <span style="font-size: x-small;"><o:p></o:p></span></span></div>
<div class="MsoNoSpacing" style="margin-left: 36.0pt;">
<br /></div>
<div class="MsoNoSpacing" style="margin-left: 35.4pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">SQL> @C:\trca\run\trcanlzr.sql nunicist_ora_656_IZLEME1.trc<o:p></o:p></span></div>
<div class="MsoNoSpacing" style="margin-left: 35.4pt;">
<br /></div>
<div class="MsoNoSpacing" style="margin-left: 35.4pt;">
<span style="font-family: Arial, sans-serif;">Eğer birden fazla izleme dosyasının
analizinitek raporda yapmak istersek, bu durumda udump dizininde control_file.txt
adında bir text dosya oluşturup, analizinin yapılmasını istediğimiz tüm izleme
dosyalarının adlarını bu text dosya içine alta alta yazıyoruz. Bu durumda
aşağıdaki gibi çalıştırıldığında control_file.txt dosyası içindeki izleme
dosyaları TRCA tarafından okunur, analiz edilir ve tek bir rapor formatında
listelenir.<span style="font-size: x-small;"><o:p></o:p></span></span></div>
<div class="MsoNoSpacing" style="margin-left: 35.4pt;">
<br /></div>
<div class="MsoNoSpacing" style="margin-left: 35.4pt;">
<span style="font-family: 'Courier New'; font-size: 10pt;">SQL> @C:\trca\run\trcanlzr.sql control_file.txt</span></div>
<br />
<div class="MsoNoSpacing">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXN-5oClbnDzsc1VhZMhxsb8S5-1lSs6KPWVYP3ghF2ilKOICIy6No7KNwHLhddR_ZJ6PTbTEPXHt9mqMaY4_CfINNQj3796BxLy0NQXmojpe_8mE09nG6ilwDCoLN5Z3uoZiWnVucDwBh/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"></span></a></div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">Aşağıda Oracle 10.2.0.5 sürümü üzerinde “Trace Analyzer” aracı ile sekiz adet ham izleme dosyasının birleştirilip
analiz edilerek elde edilen raporda yer alan kısımları ele alacağım.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<span style="font-family: Arial, Helvetica, sans-serif;">Bu
analiz raporun ilk kısmında yer alan <i>“Response
Time Summary” </i>bölümünde izleme dosyasındaki işlemlerin toplam CPU kullanım
süresi, yüzdesel cevap süresi, toplam işlem süresi, boşta bekleme süresi gibi
genel değerler yer almaktadır.</span><br />
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><v:shapetype coordsize="21600,21600" filled="f" id="_x0000_t75" o:preferrelative="t" o:spt="75" path="m@4@5l@4@11@9@11@9@5xe" stroked="f">
<v:stroke joinstyle="miter">
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0">
<v:f eqn="sum @0 1 0">
<v:f eqn="sum 0 0 @1">
<v:f eqn="prod @2 1 2">
<v:f eqn="prod @3 21600 pixelWidth">
<v:f eqn="prod @3 21600 pixelHeight">
<v:f eqn="sum @0 0 1">
<v:f eqn="prod @6 1 2">
<v:f eqn="prod @7 21600 pixelWidth">
<v:f eqn="sum @8 21600 0">
<v:f eqn="prod @7 21600 pixelHeight">
<v:f eqn="sum @10 21600 0">
</v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:formulas>
<v:path gradientshapeok="t" o:connecttype="rect" o:extrusionok="f">
<o:lock aspectratio="t" v:ext="edit">
</o:lock></v:path></v:stroke></v:shapetype><v:shape id="Picture_x0020_1" o:spid="_x0000_i1034" style="height: 213pt; mso-wrap-style: square; visibility: visible; width: 417.75pt;" type="#_x0000_t75">
<v:imagedata o:title="" src="file:///C:\Users\GCNGI\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png">
</v:imagedata></v:shape><o:p></o:p></span></div>
<div class="MsoNoSpacing">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXN-5oClbnDzsc1VhZMhxsb8S5-1lSs6KPWVYP3ghF2ilKOICIy6No7KNwHLhddR_ZJ6PTbTEPXHt9mqMaY4_CfINNQj3796BxLy0NQXmojpe_8mE09nG6ilwDCoLN5Z3uoZiWnVucDwBh/s1600/1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="324" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXN-5oClbnDzsc1VhZMhxsb8S5-1lSs6KPWVYP3ghF2ilKOICIy6No7KNwHLhddR_ZJ6PTbTEPXHt9mqMaY4_CfINNQj3796BxLy0NQXmojpe_8mE09nG6ilwDCoLN5Z3uoZiWnVucDwBh/s640/1.jpg" width="640" /></a><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;">Hem
recursive(özyinelemeli) hemde non-recursive işlemlerin genel anlamda
çözümleme(parse), çalıştırma(execute), satır alıp getirme(fetch)
istatistikleriyle birlikte genel bekleme istatistiki bilgileri yer almaktadır.
Aşağıda non-recursive ile ilgili bilgilerin olduğu snapshot yer almaktadır.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5H1G77AU9HJBciZL3oN2VUHohetPafN27VQ1Sur8MihQiHkg-LkKi_YA8fOJgx2In2f8m8eijkenlPLXlmIjDg5mWhKaqUztIE-IfL9lZexExM0av8AsD9Vk94TQlfuhx7hsGnl7NHYiF/s1600/2.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="444" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5H1G77AU9HJBciZL3oN2VUHohetPafN27VQ1Sur8MihQiHkg-LkKi_YA8fOJgx2In2f8m8eijkenlPLXlmIjDg5mWhKaqUztIE-IfL9lZexExM0av8AsD9Vk94TQlfuhx7hsGnl7NHYiF/s640/2.jpg" width="640" /></span></a></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><v:shape id="Picture_x0020_2" o:spid="_x0000_i1033" style="height: 315.75pt; mso-wrap-style: square; visibility: visible; width: 453.75pt;" type="#_x0000_t75">
<v:imagedata o:title="" src="file:///C:\Users\GCNGI\AppData\Local\Temp\msohtmlclip1\01\clip_image002.png">
</v:imagedata></v:shape><o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;">Bu
kısımların altında rapor kapsamında yer alan izleme dosyalarının(veya
dosyasının) içinde, %10 eşik değerini toplam cevap süresinde, işlem süresinde
ve CPU süresinde aşan SQL komutları sırasıyla
yer almaktadır. SQL Text kısmında ilgili SQL cümlesinin üzerine mouse
ile geldiğinize o SQL cümlesinin bütününü görebilmektesiniz.</span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKSB_0-5h-F3bf44qH2wRoGgpWVNRimTlcEzhCqkj4x7CGc92VRl8Q7_5Rs0om83p1DEPUyrjmHCWbRfEpe_jW2Yplpm_adp5nvUz0332bO_IS2mf69H2uLW4qsMbJ1sVSstA4_VySdRNZ/s1600/3.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="385" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKSB_0-5h-F3bf44qH2wRoGgpWVNRimTlcEzhCqkj4x7CGc92VRl8Q7_5Rs0om83p1DEPUyrjmHCWbRfEpe_jW2Yplpm_adp5nvUz0332bO_IS2mf69H2uLW4qsMbJ1sVSstA4_VySdRNZ/s640/3.jpg" width="640" /></span></a></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><i>“SQL Genealogy”</i> kısmında rapor
kapsamındaki tüm SQL komutlarını çalıştırılma sayısı, recursive cevap süresi ve
bireysel cevap süresi gibi kriterlerde görebiliriz.</span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJi8zpuLw_mWme_eYWoAV_vgU6tvTlptXCWGjdWtSZsqllmr4GcfEbAqMUVeagSynSFaSVzuQxCsVYtgoj1pgK0lAk_yILCTKSP0GvlVkCShr_SSJkQkLThtewB70K5WHbEfuxYMfsxFKn/s1600/4.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="168" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJi8zpuLw_mWme_eYWoAV_vgU6tvTlptXCWGjdWtSZsqllmr4GcfEbAqMUVeagSynSFaSVzuQxCsVYtgoj1pgK0lAk_yILCTKSP0GvlVkCShr_SSJkQkLThtewB70K5WHbEfuxYMfsxFKn/s640/4.jpg" width="640" /></span></a></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><v:shape id="Picture_x0020_5" o:spid="_x0000_i1031" style="height: 120pt; mso-wrap-style: square; visibility: visible; width: 453.75pt;" type="#_x0000_t75">
<v:imagedata o:title="" src="file:///C:\Users\GCNGI\AppData\Local\Temp\msohtmlclip1\01\clip_image004.png">
</v:imagedata></v:shape><o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><i>“SQL Self – Time,
Totals, Waits, Binds and Row Source Plan”</i> bölümü altından hash değerlerine göre
SQL komutlarının bireysel olarak bekleme istatistikleri, aldıkları bind
değerleri ile ilgili bilgiler, satır kaynak planları yer almaktadır. </span><br />
<br />
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;">Aşağıdaki
gibi çalıştırılan SQL komutunun yürütme planı ve bekleme istatistikleri yer
alacaktır. Burada her bir WHERE şartında geçen kıyaslamaların hangi satır
kaynak işlemini yaptığı, indeks kullanıp kullanmadığı, Full Table Scan yapıp
yapmadığı görülebildiği gibi her bir satırın ne kadar kaynak tükettiği ve ne tür bekleme olayına sebebiyet verdiği
gözlemlenebilmektedir. </span><o:p></o:p></div>
</div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhAd9NkQuh89dMKLzDp4Vug4LVGVXQL69gxETkl87n4JdC-YK9MyEJPtFNTbD6lzn8PYUM4Jb69QAS0GmVKB31nc4llIt8R8xQzoOtprzh0s9TrJVGH13-jxIRtn0KxMzbdqN8ra9q73_y/s1600/5.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="468" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhAd9NkQuh89dMKLzDp4Vug4LVGVXQL69gxETkl87n4JdC-YK9MyEJPtFNTbD6lzn8PYUM4Jb69QAS0GmVKB31nc4llIt8R8xQzoOtprzh0s9TrJVGH13-jxIRtn0KxMzbdqN8ra9q73_y/s640/5.jpg" width="640" /></span></a></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<br />
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;">Bunun
ardından yer alan <i>“Relevant Executions”</i>
kısmında ise bu SQL komutunun benzer şekilde çalıştırıldığı farklı bind
değerleri ile ilgili genel liste yer almaktadır. Burada hangi bind değerinin ne
kadar SQL cevap süresine sahip olduğu, ne kadar sürede işlmein tamamlandığı ve
işlem süresince ne kadar CPU tükettiği gibi istatistiksel bilgiler yer
almaktadır.<o:p></o:p></span></div>
</div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJUiNbB0i4ts3XdvA1EbhyTSo2nOkACZZt2tLSfV-jUMZMvOsIpZiLGythwZYV1RgLNEFkloxEGGhz8kMv35nAdworqfu9zPCnrx_KZjAm24FQiqOa_lDXtn8fnP-qp4jvVUXyYeQAWurG/s1600/6.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJUiNbB0i4ts3XdvA1EbhyTSo2nOkACZZt2tLSfV-jUMZMvOsIpZiLGythwZYV1RgLNEFkloxEGGhz8kMv35nAdworqfu9zPCnrx_KZjAm24FQiqOa_lDXtn8fnP-qp4jvVUXyYeQAWurG/s640/6.jpg" width="640" /></span></a></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><v:shape id="Picture_x0020_8" o:spid="_x0000_i1029" style="height: 135pt; mso-wrap-style: square; visibility: visible; width: 453.75pt;" type="#_x0000_t75">
<v:imagedata o:title="" src="file:///C:\Users\GCNGI\AppData\Local\Temp\msohtmlclip1\01\clip_image006.png">
</v:imagedata></v:shape><o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><i>“Rank”</i> kolonundan hangi
bind değerinin ne kadar yanıt süresi verdiği yüzdesel görülmektedir. <i>“Rank”</i> kolonundaki değerlere
tıklandığında ise ilgili bind değerinin execute-fetch istatistiği, bekleme
bilgileri ve bind değişkenin veri tipleri, veri uzunluğu ve aldığı değerler
listelenmektedir. <o:p></o:p></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoMNNq5Za1LVr_5o2AM1iw25O_XutagrSfi0Evls8KY4b5FCG29LHNsRFCtwMUJvR8bPuAs6f-FoM1uPtRSsDl5zetByo_LVWeuig-DxzCCd8h6GZhzamo_mGsscWWEIvk7J8H_eTxA-Pl/s1600/ddd.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="579" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoMNNq5Za1LVr_5o2AM1iw25O_XutagrSfi0Evls8KY4b5FCG29LHNsRFCtwMUJvR8bPuAs6f-FoM1uPtRSsDl5zetByo_LVWeuig-DxzCCd8h6GZhzamo_mGsscWWEIvk7J8H_eTxA-Pl/s640/ddd.jpg" width="640" /></a></div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><v:shape id="Picture_x0020_9" o:spid="_x0000_i1028" style="height: 336pt; mso-wrap-style: square; visibility: visible; width: 453.75pt;" type="#_x0000_t75">
<v:imagedata o:title="" src="file:///C:\Users\GCNGI\AppData\Local\Temp\msohtmlclip1\01\clip_image007.png">
</v:imagedata></v:shape><o:p></o:p></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtG_TvJ_Mb0KRBgyyIsw-9l-t3a3NrLRZcJgGphq2OkOKGzCHydkZhpb1Wb3_s3zzFs8rdkUlw6NibaIliJSftVgls27Ucj1x4sVQX8eJBWx5-_orykzJidnvuOymzltF7nX1GY_jWmsSP/s1600/7.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"></span></a></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;">Daha
sonraki kısımda ise izleme dosyasındaki işlemler tarafından kullanılan
segmentlerin I/O istatistik bilgileri yer almaktadır. Buradan hangi objenin
hangi I/O bekleme olayına sebebiyet verdiği görülebilmektedir. </span><span style="font-family: Arial, Helvetica, sans-serif;">Tablo ve indekslerin hem obje bazımda hemde bağlı oldukları blok sayısı olarak
hangi bekleme olayına sebebiyet verdiği, ne kadar süre bekleme yaptığı gerek
toplam, gerekse ortalama bazda listelenmektedir.</span><br />
<div class="MsoNoSpacing">
<span style="font-family: Arial, sans-serif; font-size: 10pt;"><o:p></o:p></span></div>
</div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><v:shape id="Picture_x0020_10" o:spid="_x0000_i1027" style="height: 261.75pt; mso-wrap-style: square; visibility: visible; width: 453.75pt;" type="#_x0000_t75">
<v:imagedata o:title="" src="file:///C:\Users\GCNGI\AppData\Local\Temp\msohtmlclip1\01\clip_image008.png">
</v:imagedata></v:shape><o:p></o:p></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW6vXTiJWpEhIDW_IEqFGIsqQScH8-Z8rHDwNNG-No_ccSf872SrAfvehCDyLO4mWWcUr6X8xZBWIp_H9Cmiz-vTMg_V-5z7gSyJVU_X8BucEl_pbCO5AQ3sa72dIs2KVVJ5TUe752KvO0/s1600/8.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="368" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW6vXTiJWpEhIDW_IEqFGIsqQScH8-Z8rHDwNNG-No_ccSf872SrAfvehCDyLO4mWWcUr6X8xZBWIp_H9Cmiz-vTMg_V-5z7gSyJVU_X8BucEl_pbCO5AQ3sa72dIs2KVVJ5TUe752KvO0/s640/8.jpg" width="640" /></span></a></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;">Bunun
ardından ise en fazla dokunulan <i>“sıcak </i>bloklar" dosya numarası,segment ismi ve blok id leri ile birlikte ne kadar bekleme yaptığı ayrı ayrı listelenir.<o:p></o:p></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><v:shape id="Picture_x0020_11" o:spid="_x0000_i1026" style="height: 258.75pt; mso-wrap-style: square; visibility: visible; width: 363pt;" type="#_x0000_t75">
<v:imagedata o:title="" src="file:///C:\Users\GCNGI\AppData\Local\Temp\msohtmlclip1\01\clip_image009.png">
</v:imagedata></v:shape><o:p></o:p></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOB6Kx9RLKBf9YdgjoTpK5EwPlAuvSjmXi9JtJK7qKqu1ic833gXToF5j16id_RAkjDFwaXxu3rUlRhZ77VXK94j61-ySr1GCcVGsVl0IImDV1zdpF1Cdy0ehyphenhyphenLBqcW0UdgYS3754Qw8Q_/s1600/9.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOB6Kx9RLKBf9YdgjoTpK5EwPlAuvSjmXi9JtJK7qKqu1ic833gXToF5j16id_RAkjDFwaXxu3rUlRhZ77VXK94j61-ySr1GCcVGsVl0IImDV1zdpF1Cdy0ehyphenhyphenLBqcW0UdgYS3754Qw8Q_/s640/9.jpg" width="640" /></span></a></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;">Ardından
SQL işlemlerinde varsa alınan ORA hataları kodu, meydana gelme zamanı ve ilgili
SQL Text ile birlikte raporlanır, ayrıca birden fazla izleme dosyası trace
analyzer ile tek raporda alındıysa her bir izleme dosyasının işlem özet
bilgiside <i>“Transaction Summary”</i>
kısmında yer alır.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0Io0E4uTwpPTB7oSDiJcrkwmwWsYyxxmhdrQyEB_p-C_OkXnsHVmL8VAb97-TSRoYo1O6Uy-B1M3OoZvHzL4smYSnrdnrAjjE8n7zlS6Sc41LJhYHpRj9kWgNmlXyHB_T-bXDwX4DWKVY/s1600/10.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0Io0E4uTwpPTB7oSDiJcrkwmwWsYyxxmhdrQyEB_p-C_OkXnsHVmL8VAb97-TSRoYo1O6Uy-B1M3OoZvHzL4smYSnrdnrAjjE8n7zlS6Sc41LJhYHpRj9kWgNmlXyHB_T-bXDwX4DWKVY/s640/10.jpg" width="640" /></span></a></div>
<div class="MsoNoSpacing">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="MsoNoSpacing">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;">Trace
Analzer aracı özet olarak; performans sorunu yaşanan uygulamalarda, gerek oturum
bazlı, gerekse veritabanı bazlı yapılan izlemeler sonucu tüm SQL işlemlerinin
hem bekleme istatistiklerini, hem çalıştırma
planı bilgilerini ve hemde farklı bind değişkenlerinin performans değişimlerini ham izleme dosyaları içinden kolayca, profesyonelce ve detaylı analiz ederek oldukça geniş bakış açıları sunmakta ve oluşturulan
zengin içerikli HTML raporu ile gerçek darboğazların tespitinde tüm Oracle
DBA’lere oldukça faydalı olmaktadır. Diğer bir önemli özelliği ise Oracle
tarafından müşterilerine ücretsiz olarak sunulmasıdır.</span></div>
<div class="MsoNoSpacing">
<v:shape id="Picture_x0020_12" o:spid="_x0000_i1025" style="height: 324pt; mso-wrap-style: square; visibility: visible; width: 453.75pt;" type="#_x0000_t75">
<v:imagedata o:title="" src="file:///C:\Users\GCNGI\AppData\Local\Temp\msohtmlclip1\01\clip_image010.png">
</v:imagedata></v:shape><span style="font-family: Arial, sans-serif; font-size: 10pt;"><o:p></o:p></span></div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-11193175189770602332012-03-15T10:00:00.002+02:002012-03-15T10:27:49.607+02:00Standalone Oracle 10g veritabanının 10g RAC veritabanına dönüştürülmesi<div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Standalone Oracle 10g veritabanın Oracle 10g RAC veritabanına dönüştürülmesi işlemi öncesinde tüm düğümlerde clusterware yazılımının kurulmuş olması ve sunucuların RAC yapısında hizmet verecek şekilde fiziksel olarak yapılandırılmış olması gerekmektedir. Bu kurulum öncesi işlemlerin tamamlandığından emin olunduktan sonra daha önceden stand alone olarak hizmet veren bir Oracle 10g veritabanının RAC veritabanına dönüştürme işlemi için aşağıdaki adımların uygulanması yeterli olacaktır.</span><br />
<a name='more'></a><o:p></o:p><br />
<div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Arial, sans-serif;">1.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><span style="font-family: Arial, sans-serif;">Stand alone veritabanının yedeğinin alınması ve bu işlemler öncesinde paylaşımlı alanda geri yükleme işleminin yapılması gerekmektedir. Ayrıca her iki düğümdede listener.ora ve tnsnames.ora dosyalarının RAC yapısında hizmet vermek üzere birebir aynı yapılandılmış olması gerekmektedir. Senaryoda rac1 ve rac2 adlı fiziksel hostlar, ORCL1 ve ORCL2 olarak adlandırılan RAC instance'lar ve ORCL adlı RAC veritabanı mevcuttur.<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Arial, sans-serif;">2.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><span style="font-family: Arial, sans-serif;">İlk olarak her bir ilave RAC instance için redo log thread'lerin oluşturulması gerekmektedir. Eğer thread 1 için 4 adet redo log grup mevcutsa, (ikinci instance’taki) ikinci thread içinde 4 adet redo log grup oluşturulmalıdır. İkinci RAC instance için aşağıdaki gibi redo log grupları oluşturulur:<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">SQL></span><span style="font-family: 'Courier New';"> </span><span style="font-family: 'Courier New';">alter database add logfile thread 2 group 5<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">('/u04/oradata/ORCL/ORCL2_redo_01a.rdo',<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">'/u03/oradata/ORCL/ORCL2_redo_01b.rdo') size 200m;<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">SQL></span><span style="font-family: 'Courier New';"> </span><span style="font-family: 'Courier New';">alter database add logfile thread 2 group 6<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">('/u05/oradata/ORCL/ORCL2_redo_02a.rdo',<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">'/u02/oradata/ORCL/ORCL2_redo_02b.rdo') size 200m;<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">SQL></span><span style="font-family: 'Courier New';"> </span><span style="font-family: 'Courier New';">alter database add logfile thread 2 group 7<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">('/u04/oradata/ORCL/ORCL2_redo_03a.rdo',<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">'/u03/oradata/ORCL/ORCL2_redo_03b.rdo') size 200m;<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">SQL></span><span style="font-family: 'Courier New';"> </span><span style="font-family: 'Courier New';">alter database add logfile thread 2 group 8<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">('/u05/oradata/ORCL/ORCL2_redo_04a.rdo',<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">'/u02/oradata/ORCL/ORCL2_redo_04b.rdo') size 200m;<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: Arial, sans-serif;">ASM üzerindeki RAC veritabanları içinde sentaks benzerdir, ancak <i>db_create_file_dest</i> ve <i>db_create_online_log_dest_1</i> parametrelerinin ilgili ASM instance’ını işaret etmesi gerekmektedir(‘+DATA’ gibi), ardından ASM ortamında redo log grupları ilave düğüm için aşağıdaki gibi oluşturulur.<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">SQL></span><span style="font-family: 'Courier New';"> </span><span style="font-family: 'Courier New';">alter database add logfile thread 2 group 5 size 200m;<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">SQL></span><span style="font-family: 'Courier New';"> </span><span style="font-family: 'Courier New';">alter database add logfile thread 2 group 6 size 200m;<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">SQL></span><span style="font-family: 'Courier New';"> </span><span style="font-family: 'Courier New';">alter database add logfile thread 2 group 7 size 200m;<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">SQL></span><span style="font-family: 'Courier New';"> </span><span style="font-family: 'Courier New';">alter database add logfile thread 2 group 8 size 200m;<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: Arial, sans-serif;">Redo log gruplar oluşturulduktan sonra ikinci thread’ın aktive edilmesi gerekmektedir.<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">SQL> alter database enable thread 2;<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Arial, sans-serif;">3.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><span style="font-family: Arial, sans-serif;">Her bir thread için bir redo grubu oluşturduktan sonra ilave her RAC instance için undo tablespace oluşturulmalıdır.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">SQL> create undo tablespace undo_rac2<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">datafile '/u02/oradata/ORCL/undo_rac2_01.dbf' size 3000m;<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Arial, sans-serif;">4.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><span style="font-family: Arial, sans-serif;">Her bir RAC düğümünde oturum açıp RAC düğümler hakkında teker teker bilgi almak yerine, <i>$ORACLE_HOME/rdbms/admin </i>dizininden <i>sysdba</i> hakkı ile <i>catclust.sql </i>scripti çalıştırılarak RAC görünümleri oluşturulmalıdır. Bu script çalıştırıldıktan sonra sisteme yüklenecek olan sistem görünümleri ile, örneğin tüm RAC instance’lar üzerinde aktif oturumlar hakkında bilgi almak için her bir düğümde V$SESSION görünümü yerine sadece GV$SESSION görünümüne sorgu çekilebilecektir.<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">SQL> @$ORACLE_HOME/rdbms/admin/catclust.sql;<o:p></o:p></span><br />
<span style="font-family: 'Courier New';">SQL> CREATE PFILE='/tmp/</span><span style="font-family: 'Courier New';">initORCL.ora' FROM SPFILE;</span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Arial, sans-serif;">5.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><span style="font-family: Arial, sans-serif;">RAC veritabanının açılışta tanınabilmesi için spfile dosyasının güncellenmesi gerekmektedir. Bu işlem yukardaki gibi spfile dosyasından oluşturulan pfile dosyası üzerinde aşağıdaki gibi yapılmalıdır:<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">*.cluster_database_instances=2<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">*.cluster_database=true<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">ORCL1.thread=1<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">ORCL1.instance_number=1<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">ORCL1.undo_tablespace='UNDO_RAC1'<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">ORCL1.local_listener=’listener_rac1’<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">ORCL1.remote_listener=’listener_rac2’<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';"># İkinci düğüm<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">ORCL2.thread=2<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">ORCL2.instance_number=2<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">ORCL2.undo_tablespace='UNDO_RAC2'<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">ORCL2.local_listener=’listener_rac2’<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">ORCL2.remote_listener=’listener_rac1’<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">*.remote_login_passwordfile='exclusive'<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';"># ASM kullanıldığında geçerli olacak <o:p></o:p></span><span style="font-family: 'Courier New';">10g parametreleri</span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">*.db_create_file_dest='+DATA'<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">*.db_create_online_log_dest_1='+DATA'<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Arial, sans-serif;">6.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><span style="font-family: Arial, sans-serif;">Pfile dosyasından veritabanı birinci instance üzerinden açıldıktan sonra, tüm RAC instance’lar tarafından erişilebilir olan bir lokasyonda spfile dosyası oluşturulmalıdır.<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 18.0pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">SQL>STARTUP FROM PFILE='/tmp/initORCL.ora';<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">SQL>CREATE SPFILE ='/u02/dbs/spfile_ORCL.ora' FROM PFILE;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Arial, sans-serif;">7.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><span style="font-family: Arial, sans-serif;">Her bir düğümde $ORACLE_HOME/dbs içinde paylaşımlı spfile dosyasına link verilmesi gerekmektedir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">$ cd $ORACLE_HOME/dbs<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">$ ln -s </span><span style="font-family: 'Courier New';">/u02/dbs/</span><span style="font-family: 'Courier New';">spfileORCL.ora spfileORCL1.ora<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: Arial, sans-serif;">İkinci düğümde;<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">$ cd $ORACLE_HOME/dbs<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">$ ln -s </span><span style="font-family: 'Courier New';">/u02/dbs</span>/<span style="font-family: 'Courier New';">spfileORCL.ora spfileORCL2.ora<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Arial, sans-serif;">8.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><span style="font-family: Arial, sans-serif;">Her bir instance için RAC Oracle Home dizini altında ORCL1 instance için password dosyası oluşturulur. Aynısı “orapwORCL2” olarak diğer düğümdede oluşturulacaktır.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">$ orapwd file=orapwORCL1 password=testRACdb123<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: Arial, sans-serif;">İkinci düğümde;<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">$ orapwd file=orapwORCL2 password=testRACdb123<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Arial, sans-serif;">9.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><span style="font-family: Arial, sans-serif;">SRVCTL komutu kullanılarak RAC veritabanının OCR’ye kayıt edilmesi gerekmekte, ardında RAC veritabalarının yeniden başlatılması gerekmektedir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">SQL></span><span style="font-family: 'Courier New';"> </span><span style="font-family: 'Courier New';">srvctl add database -d ORCL -o /app/oracle/10.2.0/ORCL<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">SQL></span><span style="font-family: 'Courier New';"> </span><span style="font-family: 'Courier New';">srvctl add instance -d ORCL -i ORCL1 -n rac1<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: 'Courier New';">SQL></span><span style="font-family: 'Courier New';"> </span><span style="font-family: 'Courier New';">srvctl add instance -d ORCL -i ORCL2 -n rac2<o:p></o:p></span></div></div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com1tag:blogger.com,1999:blog-2000514949047523591.post-10375064637737373592012-03-12T10:00:00.000+02:002012-03-12T10:00:09.203+02:00Veritabanındaki en son bekleme olaylarının analizi<div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Oracle 11g veritabanında en son bekleme olaylarını gerek kullanıcılar, gerek SQL komutları ve gerekse objeler bazında gözlemlemek ve analiz etmek için V$ACTIVE_SESSION_HISTORY görünümü kullanılabilir. Bu sistem görünümü ile veritabanında oturumların en son bekleme olayları ile ilgili istatistik bilgilerine erişilebilmektedir. Bu görünümün V$SESSION ve DBA_USERS gibi sistem görünümü ve tabloları ile birleşimi sonucu elde edilen ve faydalı olacağına inandığım bazı analiz sorguları aşağıda yer almaktadır;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
<a name='more'></a></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Son 15 dakika içindeki en önemli bekleme olaylarının tespit edilmesi;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">select event,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">sum(wait_time + time_waited) total_wait_time<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">from v$active_session_history<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">where sample_time between sysdate – 30/2880 and sysdate<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">group by event order by total_wait_time desc;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Son 15 dakika içinde hangi kullanıcıların en çok bekleme olayına sebebiyet verdiğinini tespit edilmesi;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">select s.sid, s.username,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">sum(a.wait_time + a.time_waited) total_wait_time<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">from v$active_session_history a,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">v$session s<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">where a.sample_time between sysdate – 30/2880 and sysdate<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">and a.session_id=s.sid<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">group by s.sid, s.username<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">order by total_wait_time desc;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Son 15 dakika içinde en fazla bekleme olayına sebebiyet veren SQL komutlarının tespit edilmesi;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">select a.user_id,u.username,s.sql_text,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">sum(a.wait_time + a.time_waited) total_wait_time<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">from v$active_session_history a,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">v$sqlarea s, dba_users u<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">where a.sample_time between sysdate – 30/2880 and sysdate<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">and a.sql_id = s.sql_id<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">and a.user_id = u.user_id<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">group by a.user_id,s.sql_text, u.username;<o:p></o:p></span></div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com3tag:blogger.com,1999:blog-2000514949047523591.post-1166372188438219652012-03-09T10:00:00.019+02:002012-03-09T20:48:20.906+02:00Oracle 11.2.0.2 Clusterware ortamında kayıp OCR ve voting disklerin yedekten geri yüklenmesi<div class="MsoNoSpacing"></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Bu yazıda Oracle 11.2.0.2 Clusterware platformunda OCR ve voting diskin kaybedildiği durumda sisteme nasıl geri yükleneceği anlatılmaktadır. Ocssd.bin başlatıldığında, GPnP profili, network ve voting disklerde var olmalıdır. Eğer minimum sayıda gereksinim duyulan voting dosyaları varolmazsa , bu durumda ocssd.bin başlatılamaz. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">OCR varolmadan crsd prosesi başlatılamaz ve ocssd.bin de aktif olmaz. OCR, CRS tarafından kullanılır, bu da OCR kayıp olduğunda crsd.bin in aktif olamayacağı anlamına gelmektedir. CRSD aktif olmazsa, bu sorunlu düğüm kümeye dahilde olamaz. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Oracle Clusterware her 4 saatte bir OCR'nin yedeğini almaktadır. OCR içinde voting diskin yedeği bulunmaktadır. Bu sebeple voting diski geri yüklemek için var olan bir OCR yedeği yeterlidir. Şimdi bu geri yükleme olayını, OCR'nin yer aldığı ASM disk grubundaki(senaryomda +DATA) disklerde fiziksel bir çökme nedeniyle erişilemez olduğu senaryo çerçevesinde adım adım işleyelim. İlk etapta küme katmanını çalıştırarak sorunun olduğunu gözlemleyelim. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">[root@rac1 ~]# crsctl start cluster<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2672: Attempting to start ‘ora.cssdmonitor’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2676: Start of ‘ora.cssdmonitor’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2672: Attempting to start ‘ora.cssd’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2672: Attempting to start ‘ora.diskmon’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2676: Start of ‘ora.diskmon’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><b><span style="font-family: 'Courier New', Courier, monospace;">CRS-2674: Start of ‘ora.cssd’ on ‘rac1′ failed</span><o:p></o:p></b></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Bu adımda neyin yanlış olduğunu teyit etmek için log dosyalarına bakılması gerekmektedir. Clusterware'nin alert.log dosyasında aşağıdaki gibi bir hata mesajına rastlanılacaktır.</span></div><a name='more'></a><o:p></o:p><br />
<div class="MsoNoSpacing"><o:p> </o:p><span style="font-family: 'Courier New', Courier, monospace;">cssd(6263)]CRS-1714:Unable to discover any voting files, retrying discovery in 15 seconds; Details at (:CSSNM00070:) in /u01/app/11.2.0/grid/log/rac1/cssd/ocssd.log</span></div><div class="MsoNoSpacing"><o:p></o:p></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Votedisk ve OCR varolmadığından dolayı ayrıca ora.crsd kaynağıda başlatılmamış, böylece mevcut başlatılmış proseslerde durdurulamamaktadır, çünkü bu da CRSD’nin yeniden başlatılmasını gerektirmektedir. Bu noktada, sunucunun clusterware yazılımının EXCLUSIVE modda başlatılması gerekecektir. Ancak, bir yeniden başlatma işleminden önce, clusterware’nin otomatik başlatılmasını devredışı bırakmak gerekmektedir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">[root@rac1 rac1]# <b>crsctl disable crs</b><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-4621: Oracle High Availability Services autostart is disabled. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">[root@rac1 rac1]# <b>reboot -n</b><o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">[root@rac1 ~]# <b>crsctl check crs</b><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-4639: Could not contact Oracle High Availability Services<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">[root@rac1 ~]# <b>crsctl start crs -excl</b><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-4123: Oracle High Availability Services has been started.<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2672: Attempting to start ‘ora.mdnsd’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2676: Start of ‘ora.mdnsd’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2672: Attempting to start ‘ora.gpnpd’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2676: Start of ‘ora.gpnpd’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2672: Attempting to start ‘ora.cssdmonitor’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2672: Attempting to start ‘ora.gipcd’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2676: Start of ‘ora.cssdmonitor’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2676: Start of ‘ora.gipcd’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2672: Attempting to start ‘ora.cssd’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2672: Attempting to start ‘ora.diskmon’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2676: Start of ‘ora.diskmon’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2676: Start of ‘ora.cssd’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2672: Attempting to start ‘ora.ctssd’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2672: Attempting to start ‘ora.drivers.acfs’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2672: Attempting to start ‘ora.cluster_interconnect.haip’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2676: Start of ‘ora.ctssd’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2676: Start of ‘ora.drivers.acfs’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2676: Start of ‘ora.cluster_interconnect.haip’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2672: Attempting to start ‘ora.asm’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2674: Start of ‘ora.asm’ on ‘rac1′ failed<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2673: Attempting to stop ‘ora.cluster_interconnect.haip’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2677: Stop of ‘ora.cluster_interconnect.haip’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2673: Attempting to stop ‘ora.drivers.acfs’ on ‘rac1′</span><o:p></o:p></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Duruma göre, pfile kullanarak ASM instance’nın yeniden başlatılması gerekliliği olabilecektir, özellikle ASM diskgrup artık yer almıyorsa. Bu durumda bu disk grup yeniden oluşturulmalıdır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">[grid@rac1 trace]$ <b>cat /tmp/asm_pfile.ora</b><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">large_pool_size = 12M<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">instance_type = “asm”<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">remote_login_passwordfile= “EXCLUSIVE”<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">asm_diskstring = “/dev/sd[c-g]1″<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">asm_diskgroups = “”<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">asm_power_limit = 1<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">diagnostic_dest = “/u01/app/grid”<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
<span style="font-family: Arial, sans-serif;">ASM instance pfile dosyasından başlatılmaya çalışılıyor. Ancak, DATA diskgrubundaki diskler artık varolmadığından hata mesajı alınıyor.</span><br />
<span style="font-family: Arial, sans-serif;"><br />
</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">[grid@rac1 ~]</span><span style="font-family: 'Courier New', Courier, monospace;">$ set ORACLE_SID=+ASM1</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">[grid@rac1 ~]</span><span style="font-family: 'Courier New', Courier, monospace;">$ sqlplus / as sysdba</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br />
</span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">SQL> <b>startup pfile=’/tmp/asm_pfile.ora’</b><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">ASM instance started<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">Total System Global Area 283930624 bytes<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">Fixed Size 2225792 bytes<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">Variable Size 256539008 bytes<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">ASM Cache 25165824 bytes<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">ORA-15032: not all alterations performed<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">ORA-15017: diskgroup “DATA” cannot be mounted<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">ORA-15063: ASM discovered an insufficient number of disks for diskgroup “DATA”<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
<span style="font-family: Arial, sans-serif;">Bu noktada ilgili ASM diskgrubuna ait fiziksel disklere "reinitialize" işlemi yapılmalı ve akabinde Oracle sistemden düşürülmelidir.</span><br />
<br />
<pre style="background-color: #fafafa; white-space: pre-wrap;"><span style="background-color: transparent; font-family: 'Courier New', Courier, monospace;">[root@rac1 ~]# </span>dd if=/dev/zero of=/dev/sdc1 bs=8192 count=12800</pre><pre style="background-color: #fafafa; white-space: pre-wrap;"><pre style="white-space: pre-wrap;"><span style="background-color: transparent; font-family: 'Courier New', Courier, monospace;">[root@rac1 ~]# </span>dd if=/dev/zero of=/dev/sdd1 bs=8192 count=12800</pre><pre style="white-space: pre-wrap;"><span style="background-color: transparent; font-family: 'Courier New', Courier, monospace;">[root@rac1 ~]# </span>dd if=/dev/zero of=/dev/sde1 bs=8192 count=12800</pre></pre><br />
<span style="font-family: 'Courier New', Courier, monospace;">SQL> </span><b style="font-family: 'Courier New', Courier, monospace;">drop diskgroup DATA force including contents;</b></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">SQL> <b>create diskgroup DATA normal redundancy disk ‘/dev/sdc1′,’/dev/sdd1′,’/dev/sde1′ attribute ‘compatible.asm’=’11.2.0.0.0′,’compatible.rdbms’=’11.2.0.0.0′ ;</b><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">Diskgroup created.</span><o:p></o:p></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Clusterware’in EXCLUSIVE modda başlatılmasının sebebi, voting diski yeniden yüklemeyi mümkün kılmak için uygun bir voting disk için hiçbir onaylamanın yapılmadığından emin olmak içindir. Voting diskler mevcut olduğunda, ocssd.bin yeniden başlayacaktır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">SQL> <b>create spfile=’+DATA’ from pfile=’/tmp/asm_pfile.ora’;</b><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">File created.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">SQL> <b>shutdown</b><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">ASM diskgroups dismounted<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">ASM instance shutdown<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">SQL> <b>startup</b><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">ASM instance started<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">Total System Global Area 283930624 bytes<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">Fixed Size 2225792 bytes<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">Variable Size 256539008 bytes<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">ASM Cache 25165824 bytes<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">ASM diskgroups mounted</span><o:p></o:p></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Bu noktadan itibaren OCR ve voting diskin geri yüklenmesi mümkün olacaktır. İlk önce hangi yedeklerin olduğuna bakalım ve bunlardan hangisinin en güncel olduğunu belirleyelim. Ardından geri yükleme işlemini ve yeniden yerleştirme işlemini yapalım.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">[root@rac1 ~]# <b>ocrconfig –showbackup<o:p></o:p></b></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">rac1 2012/02/22 13:05:22 /u01/app/crs/cdata/crs<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">rac1 2012/02/22 09:05:22 /u01/app/crs/cdata/crs<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">rac1 2012/02/22 05:05:22 /u01/app/crs/cdata/crs<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">rac1 2012/02/28 05:05:21 /u01/app/crs/cdata/crs<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">rac1 2012/02/22 05:05:13 /u01/app/crs/cdata/crs<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">[root@rac1 ~]# <b>ls -l $ORA_CRS_HOME/cdata/crs</b><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">total 242<o:p></o:p></span></div><div class="MsoNoSpacing"><b><span style="font-family: 'Courier New', Courier, monospace;">-rw-r--r-- 1 root root 8654848 Feb 29 13:05 backup00.ocr <o:p></o:p></span></b></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">-rw-r--r-- 1 root root 8654848 Feb 29 09:05 backup01.ocr<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">-rw-r--r-- 1 root root 8654848 Feb 29 05:05 backup02.ocr<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">-rw-r--r-- 1 root root 8654848 Feb 29 05:05 day_.ocr<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">-rw-r--r-- 1 root root 8654848 Feb 28 05:05 day.ocr <o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">-rw-r--r-- 1 root root 8654848 Feb 29 05:05 week_.ocr<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">-rw-r--r-- 1 root root 8654848 Feb 22 05:05 week.ocr <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">[root@rac1 ~]# <b>ocrconfig -restore</b><b> /u01/app/11.2.0/grid/cdata/rac1/backup00.ocr</b><o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">[root@rac1 ~]# <b>crsctl replace votedisk +DATA</b><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">Successful addition of voting disk 4474a6e7d0024f24bfb1d439e967e0y5.<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">Successful addition of voting disk 3c52445bc6d74f04bf7f8shdfl93c5r4.<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">Successful addition of voting disk 5d3c34ecc7124f13bfkgb1d794316ds2.<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">Successfully replaced voting disk group with +DATA.<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-4266: Voting file(s) successfully replaced</span><o:p></o:p></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Artık voting disk ve OCR geri yüklendiğinden dolayı clusterware’in otomatik olarak başlatılmasını yeniden devreye sokabiliriz. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">[root@rac1 ~]# <b>crsctl enable crs</b><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-4622: Oracle High Availability Services autostart is enabled.</span><o:p></o:p></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">En son adımda, clusterware yeniden başlatılacak, EXCLUSIVE mod durdurulup normal modda çalışmaya devam etmesi sağlanacaktır. Bunun için yeniden başlatma en kolay yoldur. yeniden başlatma sonrasında herşeyin düzgün şekilde çalıştığının doğrulamasıda yapılmaktadır. Eğer yeniden başlatma yapmak istenmiyorsa, aşağıdaki komutlarla bu işlemler gerçekleştirilebilir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">[root@rac1 ~]# <b>crsctl start cluster</b><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2672: Attempting to start ‘ora.evmd’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2676: Start of ‘ora.evmd’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2672: Attempting to start ‘ora.crsd’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2676: Start of ‘ora.crsd’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">[root@rac1 ~]# <b>crsctl check crs</b><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-4638: Oracle High Availability Services is online<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-4692: Cluster Ready Services is online in exclusive mode<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-4529: Cluster Synchronization Services is online<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">[root@rac1 ~]# <b>crsctl stop crs -f</b><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2791: Starting shutdown of Oracle High Availability Services-managed resources on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2673: Attempting to stop ‘ora.crsd’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2677: Stop of ‘ora.crsd’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2673: Attempting to stop ‘ora.mdnsd’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2673: Attempting to stop ‘ora.ctssd’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2673: Attempting to stop ‘ora.evmd’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2673: Attempting to stop ‘ora.asm’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2673: Attempting to stop ‘ora.drivers.acfs’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2677: Stop of ‘ora.evmd’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2677: Stop of ‘ora.asm’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2673: Attempting to stop ‘ora.cluster_interconnect.haip’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2677: Stop of ‘ora.cluster_interconnect.haip’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2677: Stop of ‘ora.ctssd’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2673: Attempting to stop ‘ora.cssd’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2677: Stop of ‘ora.cssd’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2673: Attempting to stop ‘ora.diskmon’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2673: Attempting to stop ‘ora.gipcd’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2677: Stop of ‘ora.mdnsd’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2677: Stop of ‘ora.gipcd’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2673: Attempting to stop ‘ora.gpnpd’ on ‘rac1′<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2677: Stop of ‘ora.diskmon’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2677: Stop of ‘ora.gpnpd’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2677: Stop of ‘ora.drivers.acfs’ on ‘rac1′ succeeded<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-2793: Shutdown of Oracle High Availability Services-managed resources on ‘rac1′ has completed<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-4133: Oracle High Availability Services has been stopped.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">[root@rac1 ~]# <b>crsctl start crs</b><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New', Courier, monospace;">CRS-4123: Oracle High Availability Services has been started.</span><o:p></o:p></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Bir sonraki adım kümedeki diğer düğümleride başlatmaktır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNormal"><br />
</div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com2tag:blogger.com,1999:blog-2000514949047523591.post-82144539177970250362012-03-08T10:00:00.005+02:002012-03-08T10:00:00.180+02:00Bilgi İşlem Merkezi Yöneticileri (BIMY) Semineri 2012<div style="background-color: white; text-align: left;"></div><div class="MsoNoSpacing">Bilişim Sektörünün değerli çalışanları, sektörümüze katkı sağlayan bilişim dostları,<o:p></o:p></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, Helvetica, sans-serif;">Bilindiği üzere Türkiye Bilişim Derneği, Bilişim Sektörünün gelişmesi amacıyla tam 40 yıldır çalışmalarına aralıksız devam etmektedir. Bu kapsamda her yıl düzenlenen ve gelenekselleşen TBD etkinlikleri sizlerin de katkısıyla markalaşmış, sektörel bir sahiplikle sektör zirvesi ve şenliği haline gelmiştir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, Helvetica, sans-serif;">Bilgi Teknolojilerinde yaşanan değişimler toplumların yaşam biçimlerini, kurumların ve sektörlerin birbirleriyle iletişimlerini etkilemektedir. Sektörlerin birbirleriyle etkileşimi yerel düzeyde rekabet koşullarını artırmakta, istihdam açısından önemli katkılar sağlanmaktadır. Bu doğrultuda Bilişim Sektöründe çalışan üst ve orta düzey yöneticilerin mesleki gelişimi ve dayanışmalarını geliştirmek amacıyla ana teması “Bilişim Teknolojileri ve Gelecek Öngörüleri” olan “Bilgi İşlem Merkezi Yöneticileri Semineri (BİMY)” düzenlenecektir. Bu yıl 19.sunun yapılması planlanan BİMY etkinliği 29 Mart - 01 Nisan 2012 tarihleri arasında Gloria Golf Resort Hotel' de gerçekleştirilecektir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, Helvetica, sans-serif;">Detaylı bilgi ve kayıt için : <a href="http://bimy.tbd.org.tr/">http://bimy.tbd.org.tr/</a></span><o:p></o:p></div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-81870095286694919802012-03-07T10:00:00.002+02:002012-03-07T10:00:08.152+02:00Oracle 11.2.0.2 sürümünde Flashback Transaction Query<div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Flashback Transaction Query, işlem seviyesinde veritabanında yapılan değişiklikleri göstermeyi sağlayan kullanışlı bir Oracle aracıdır. Flashback Transaction Query, bir işlem tarafından yapılan tüm değişikliklerin görülmesini sağlayan bir SQL eklentisidir. Örneğin;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">SELECT UNDO_SQL<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">FROM FLASHBACK_TRANSACTION_QUERY<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">WHERE XID = '000200030000002D';<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Yukardaki komut bu işlemde sonuçlanan tüm değişiklikleri göstermektedir. İlaveten, yerini dolduran tüm SQL komutlarıda döner ve bu işlem tarafından tüm satırlara yapılan değişiklikler geri alınabilir. Flashback Transaction Query gibi hassas bir araç kullanarak, veritabanı yöneticileri ve uygulama geliştiriciler veritabanı veya uygulamadaki mantıksal problemleri kesin olarak teşhis edip gerekli düzeltmeleri yapabilirler. </span></div><a name='more'></a><o:p></o:p><br />
<div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Bunu bir örnekle açıklamak gerekirse; IK müdürünün, veritabanı yöneticisini arayarak bir çalışanın maaşında çelişkili bir durum olduğunu rapor ettiğini düşünelim. Örneğin; sabah 9.00 öncesinde Ahmet adlı çalışanın maaşı 5,000TL ye yükseltilmiş, IK departmanı bu işlemin nasıl meydana geldiğinden emin değil ve bu çalışanın maaşının ne zaman değiştirildiğini bilmek istiyor. İlaveten, IK müdürü departman çalışanlarına bu kişinin maaşının önceki haline değiştirilmesini talep ediyor. Bu işlemde sabah 09.20 civarında gerçekleşiyor.</span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Aşağıdaki adımlar bu probleme nasıl yaklaşılacağını adım adım göstermektedir;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Arial, sans-serif;">1.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><span style="font-family: Arial, sans-serif;">Önce problem değelendirilir. </span><span style="font-family: Arial, sans-serif;">İyiki IK müdürü değişikliğin ne zaman yapıldığı ile bilgi vermiştir. İşlem saat 09.00 sıralarında olduğundan Flashback Query aracı ile sorgu çekilir ve saat 9.00 itibariyle AHMET adlı çalışanın maaşının 5000 TL olduğu teyit edilir</span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">SELECT EMP_NO, EMP_NAME, EMP_SAL<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">FROM EMP_TBL<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">AS OF TIMESTAMP TO_DATE('28-JAN-12 09:00','dd-Mon-yy hh24:mi')<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">WHERE EMP_NAME = 'AHMET';<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">EMP_NO EMP_NAME EMP_SAL<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">---------- ---------- ----------<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">243 AHMET 5000<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Arial, sans-serif;">2.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><span style="font-family: Arial, sans-serif;">Verinin önceki versiyonları ve önceki satırlarına sorgu çekilerek işlem bilgisi elde edilir. Buna rağmen, satır versiyon bilgisini belirli bir tarih veya SCN aralığı ile kısıtlamakta mümkündür. Flashback Version Query kullanılarak AHMET adlı çalışan için uygun olan tüm satır bilgilerini aşağıdaki gibi elde etmekte mümkündür. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">SELECT EMP_NO, EMP_NAME, EMP_SAL, VERSIONS_STARTTIME, VERSIONS_ENDTIME, VERSIONS_XID<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">FROM EMP_TBL<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">WHERE EMPNO = 243<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">ORDER BY NVL(VERSIONS_STARTSCN,1);<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">EMP_NO EMP_NAME EMP_SAL VERSIONS_STARTTIME VERSIONS_ENDTIME VERSIONS_XID<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">----- ------ --- ------------------- ------------------ --------------<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">243 AHMET 2200 28-JAN-12 08.48.43AM 28-JAN-12 08.56.45AM 0006000800000086<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">243 WARD 5000 28-JAN-12 08.56.35AM 28-JAN-12 09.20.05AM 0009000500000089<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">243 WARD 2200 28-JAN-12 09.10.09AM 000800050000008B<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: Arial, sans-serif;">Yukarda görüldüğü üzere çalışanın maaşı saat 08.56 da 5000 TL sına artırılmış, daha sonra aynı gün saat 09.20 de ise yeniden 2200 TL sına getirilmiştir. Ayrıca, çalışanın maaşını 5000TL’ya artıran hatalı işlemin ID side görülmektedir(0009000500000089).<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Arial, sans-serif;">3.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><span style="font-family: Arial, sans-serif;">Şimdi hatalı işleme ve bunun etkisinin kapsamına sorgu çekilecektir. İşlem bilgisi ile (VERSIONS_XID takmakolonu ile), Flashback Transaction Query kullanılarak işlem kapsamını belirlemek için veritabanına sorgu çekilecektir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">SELECT UNDO_SQL<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">FROM FLASHBACK_TRANSACTION_QUERY<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">WHERE XID = HEXTORAW('0009000500000089');<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">UNDO_SQL<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">----------------------------------------------------------------------------<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">update "IK"."EMP_TBL" set "SAL" = '1800' where ROWID = 'AAACV4AAFAAAAKtAAL';<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">update "IK"."EMP_TBL" set "SAL" = '2400' where ROWID = 'AAACV4AAFAAAAKtAAJ';<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">update "IK"."EMP_TBL" set "SAL" = '5000' where ROWID = 'AAACV4AAFAAAAKtAAF';<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">update "IK"."EMP_TBL" set "SAL" = '2200' where ROWID = 'AAACV4AAFAAAAKtAAE';<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">update "IK"."EMP_TBL" set "SAL" = '2100' where ROWID = 'AAACV4AAFAAAAKtAAB';<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">6 rows selected.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 35.4pt;"><span style="font-family: Arial, sans-serif;">Yukarda görüldüğü üzere bu işlem içinde meydana gelen tek değişiklik AHMET adlı çalışanın maaş değişikliği değildir. Bu noktada, IK müdürüne diğer dört çalışanın maaş değişikliklerininde gözden geçirilmesi için bilgilendirme yapmak iyi olacaktır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Arial, sans-serif;">4.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><span style="font-family: Arial, sans-serif;">Düzeltici komutların çalıştırılıp çalıştırılmayacağı belirlenmelidir. Eğer IK müdürü UNDO_SQL kolonu tarafından tavsiye edilen düzeltici değişikliklerinin doğruluğuna karar verirse, bu durumda veritabanı yöneticisi bu düzeltici komutları bireysel olarak çalıştırabilir. <o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Arial, sans-serif;">5.<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><span style="font-family: Arial, sans-serif;">FLASHBACK_TRANSACTION_QUERY görünümüne sorgu çekilerek ilave işlem bilgisi görüntülenebilir. Örneğin; hatalı UPDATE işlemini yapan kullanıcının belirlenmesi için aşağıdaki sorgu kullanılabilir. Aşağıda görüldüğü üzere bu hatalı güncelleme işlemini DENIZ adlı kullanıcı yapmıştır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">SELECT LOGON_USER FROM FLASHBACK_TRANSACTION_QUERY<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">WHERE XID = HEXTORAW('0009000500000089');<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">LOGON_USER<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">----------------------------<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">DENIZ<o:p></o:p></span></div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-67760217077350319672012-03-05T10:00:00.037+02:002012-03-05T10:43:38.541+02:00Clustering factor hakkında bir inceleme<div class="MsoNoSpacing"><span lang="EN" style="font-family: Arial, sans-serif;">ERP alt sisteminde geçtiğimiz aylarda indeksler için yapılan iyileştirme çalışması sonucunda, bazı indekslerin hala oldukça yüksek “clustering_factor”<i> </i>değeri ürettiğini gözlemledim. Aşağıda bu sorunlu indekslerden birisi yer almakta<i>.</i></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><i><span lang="EN" style="font-family: 'Courier New';"><span style="font-size: x-small;"> BTREE LEAF DISTINCT CLUSTERING INDEX TABLE TABLE<o:p></o:p></span></span></i></div><div class="MsoNoSpacing"><i><span lang="EN" style="font-family: 'Courier New';"><span style="font-size: x-small;">INDEX NAME LEVEL BLOCKS KEYS FACTOR NUM ROWS NUM BLKS NUM ROWS<o:p></o:p></span></span></i></div><div class="MsoNoSpacing"><i><span lang="EN" style="font-family: 'Courier New';"><span style="font-size: x-small;">---------- ----- ------ ---------- ---------- ---------- -------- ----------<o:p></o:p></span></span></i></div><div class="MsoNoSpacing"><i><span lang="EN" style="font-family: 'Courier New';"><span style="font-size: x-small;">CUSTID_IDX 3 778150 77,842,100 17,163,350 77,842,100 865,805 77,043,200 <o:p></o:p></span></span></i></div><div class="MsoNoSpacing"><i><span lang="EN" style="font-family: 'Courier New';"><span style="font-size: x-small;">… </span></span><span lang="EN" style="font-family: 'Courier New'; font-size: 10pt;"> <o:p></o:p></span></i></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Yukardaki </span><i style="font-family: Arial, sans-serif;">CUSTID_IDX</i><span style="font-family: Arial, sans-serif;"> indeksi gibi, oldukça yüksek </span><i style="font-family: Arial, sans-serif;">clustering_factor</i><span style="font-family: Arial, sans-serif;"> değerini -aynen- muhafaza eden indeskler yüzünden, bu indeksler üzerinde aralıklı taramaların</span><i style="font-family: Arial, sans-serif;">(index range scan)</i><span style="font-family: Arial, sans-serif;"> kullanıldığı sorgular çok yavaş çalışmaktaydı, çünkü tablodan oldukça fazla sayıda blok ziyaret edilmekteydi. Peki böyle bir durumda ne yapılması gerekmekte?</span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN" style="font-family: Arial, sans-serif;">Bu soru, bazı önemli noktaların tekrardan gözden geçirilmesini zorunlu kılmaktadır. Başlangıç detayı olarak eklenmesi gereken nokta; indeksteki satır sayısının tablodaki satır sayısından daha fazla olmasıdır. Bununda sebebi, istatistik toplamasında %100 altında bir örnekleme değerinin ve <i>“cascade”</i> seçeneğinin kullanılmış olmasıdır. Oracle, sıklıkla indekslerde tabloda belirtilen örnekleme değerinden daha geniş bir değer kullanmaktadır.</span></div><a name='more'></a><i><o:p></o:p></i><br />
<div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Bu aslında, biraz daha az tercih edilen tekil olmayan(</span><i style="font-family: Arial, sans-serif;">non-unique</i><span style="font-family: Arial, sans-serif;">) indeskleri kullanan birincil anahtar(</span><i style="font-family: Arial, sans-serif;">primary key</i><span style="font-family: Arial, sans-serif;">) indekslerini açık şekilde kullanmak zorunda olan sorguların bulunduğu bir noktada, tablonun satır sayısını aşan bir </span><i style="font-family: Arial, sans-serif;">clustering_factor</i><span style="font-family: Arial, sans-serif;"> değerine sahip olmadığı takdirde büyük bir mesele değildir. Bu durum, indeks uygunluğu değerlendirmesinde </span><i style="font-family: Arial, sans-serif;">selectivity[tb_sel] * clustering_factor</i><span style="font-family: Arial, sans-serif;"> </span><span style="font-family: Arial, sans-serif;">deyimini kullanan maliyet hesaplamasının yan etkisi olmaktadır.</span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN" style="font-family: Arial, sans-serif;">Eğer birincil anahtar <i>clustering_factor</i> değeri tablonun satır sayısından daha büyükse, o zaman tekil kolon indekslerinde, bu aynı zamanda kolonun “<i>distinct</i>” sayısından daha büyük olacak ve <i>selectivity[tb_sel] * clustering_factor </i>deyimi de <i>primary_key_col=<sabit bir değer></i> yüklemine sahip değerden daha büyük olacaktır.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN" style="font-family: Arial, sans-serif;">İlk baştaki asıl soruya gelirsek; <i>clustering_factor</i> değeri devamlı büyüyen bir indekse sahip olunduğunda ne yapılması gerekmektedir? Aslında bu soru dahada önemli bir soruyu doğurmaktadır. Gerçekten clustering_factor değeri doğruyumu söylemektedir? Gerçekten var olan veri serpiştiricisi bir modellemedir, ve sorgu geliştirici bunun böyle olduğunu düşünen diğer bir modellemedir ve belkide veri serpiştiricisine sorgu geliştiricinin böyle düşünmesi gerektiği bilgisini yanlış olarak veren başka bir modellemede mevcuttur. Bu cümle biraz karışık oldu, açalım isterseniz…<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN" style="font-family: Arial, sans-serif;">Eğer veriniz oldukça iyi kümelenmişse, bu durumda <i>clustering_factor</i> değeri düşük olacak ve sorgu geliştiricide büyük olasılıkla bu indeksi kullanacaktır. Verinin oldukça iyi şekilde kümelendiği, ancak bir şekilde <i>clustering_factor</i> değeri aşırı genişlemişse, bu durumda sorgu geliştirici sizin bu indeksin sorguda mutlaka kullanılması gerektiğini bilmenize rağmen bu indeksi görmezden gelecektir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN" style="font-family: Arial, sans-serif;">Eğer veriniz çok kötü kümelenmişse, bu durumda <i>clustering_factor</i> değeri büyük olacak ve sorgu geliştici sadece unique tarama, indeks salt ve bitmap dönüşüm yolu gibi özel durumlarda indeksi kullanacaktır, ancak bu da kesin değildir. Eğer veriniz çok kötü kümelenmiş ancak <i>clustering_factor</i> değeri küçükse (bu durum ancak tablo istatistiklerine </span><br />
<pre style="display: inline !important;">D</pre><pre style="display: inline !important;">BMS_STATS.set_table_stats </pre><span style="font-family: Arial, sans-serif;">ile manuel </span><span style="font-family: Arial, sans-serif;">manipülasyon yapıldığında olacaktır), sorgu geliştirici bu indeksi kullanacak ve sonuçta aşırı miktarda mantıksal I/O’ya sebebiyet verecektir. </span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN" style="font-family: Arial, sans-serif;">Benim örneğimde <b><i>clustering_factor</i></b> değeri oldukça yüksek ve Oracle tablodan oldukça fazla sayıda blok ziyaret ettiği için, kullanıcılar indeks aralık taramalarının(index range scans) kullanıldığı sorguların çok yavaş çalıştığından şikayet etmekteler. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN" style="font-family: Arial, sans-serif;">Bu durumda muhtemelen <i>clustering_factor</i> ile ilgili bir problem yoktur; eğer veri için tabloya gitmek gerekiyorsa, veriyi almak için mutlaka tabloya gidilecektir, yani bundan kaçış yoktur. Buna rağmen, <i>clustering_factor</i> değeri küçük olabilir ki aslında zaman geçtikçe bu daha sıkı çalışmalar sonunda ilgili sorgular için kullanılan indeksin uygun olarak tanımlanmadığı anlamına gelir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN" style="font-family: Arial, sans-serif;">Bu noktayı basit bir örnekle açıklarsak, müşteri verilerini içeren bir sorgu düşünün. Her zaman bir müşterinin son 4 haftasının verilerini elde etmek istediğimizi düşünün; <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN" style="font-family: 'Courier New';"> select ard.*<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN" style="font-family: 'Courier New';"> from customer_ent ard<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN" style="font-family: 'Courier New';"> where ard.cust_id = 4274<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN" style="font-family: 'Courier New';"> and ard.ord_date > trunc(sysdate) - 30<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN" style="font-family: 'Courier New';"> order by ard.ord_date desc;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN" style="font-family: Arial, sans-serif;">Eğer (cust_id) kolonunda bir indeks mevcutsa, zaman geçtikçe Oracle daha çok tablo bloklarını ziyaret edecek ve tabloyu ziyaret ettikten sonra ancak çok eski kayıtları dışarı atacaktır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN" style="font-family: Arial, sans-serif;">Eğer (cust_id,ord_date) kolonları üzerinde bir indeks mevcut olursa, zaman geçtikçe tablo ziyareti esnasındaki işyükü sabit kalacaktır, çünkü sorgulanan verinin hacmi oluşturulan geçmiş veri büyüklüğünden bağımsız olmaktadır. Bu noktada sorgudaki filtre kolon sırasına göre indeksin oluşturulması gerekmektedir (i.e cust_id, ord_date)<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN" style="font-family: Arial, sans-serif;">Elbette, örnekte kullanılan tablo (cust_id) kolonu üzerinde indeks-cluster olarak yeniden oluşturulursa, aşırı ziyaret edilen blok sayısı azaltılmış olur(buna rağmen hala aşırı sayıda satır ziyaret edilecek) ve bunun belki faydasıda olabilir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN" style="font-family: Arial, sans-serif;">Alternatif olarak, eğer tablo (ord_date) kolonundan bölümlendirilirse(partition), sorgu bölümlendirme eliminasyonunu kullanarak ve (cust_id) kolonu üzerindeki tekil indeksi kullanarak gereksiz blok ziyaretini azaltacaktır. Buna rağmen geniş sayıda bölümlendirme kullanılıyorsa, bu durum indeks blok ziyaretini istenmeyen seviyelere yükseltebilir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN" style="font-family: Arial, sans-serif;">Sonuçta, <i>clustering_factor</i> kolayca çok geniş boyuta ulaşabilir ve veri serpiştirici modellemesini doğru şekilde yansıtmayabilir, bu da sorgu geliştiricinin indeksin kullanılması gereken durumlarda bu indeksin kullanımını göz ardı etmesine sebebiyet verebilir. İlgili tablo her ne kadar yeniden oluşturulsada, bu sadece tek bir indeksin <i>clustering_factor</i> değerinin düşük değerde olmasını sağlayacak, ancak bu tablonun üzerindeki diğer indeksler hala oldukça yüksek <i>clustering_factor </i>değerine sahip olacaktır. Eğer clustering_factor değeri gerçekten veri serpiştiriciyi yansıtmazsa, tablo içinde daha çok blok ziyaret edildiğinden dolayı sorgular yavaşlayacaktır. Bu durumda, tablodaki ziyaret sayısını azaltmak üzere ilgili sorgunun filtre kısmında kullanılan diğer kolonlarınında bir bütün olarak indekse dahil edilerek oluşturulması ihtiyacı doğacaktır. Ayrıca, bu tablolarda bölümlendirmeninde <i>(partitioning)</i> bir çözüm olduğu unutulmamalıdır.</span></div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-63310979818636847672012-02-29T11:59:00.002+02:002012-03-02T10:23:08.642+02:00Ortalama aktif oturumlar(Average Active Sessions - AAS) ile ani yüklerin zaman aralıklarının bulunması<div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">“Ortalama Aktif Oturumlar”(Average Active Session - AAS) metriği, Oracle veritabanının tüm çalışma performansının ölçümünde olağandışı bir şekilde basit ve bir o kadar kullanışlı şekilde hizmet sunmaktadır. AAS metriği, kısaca <i>“DB Time”</i> değerinin <i>“işlem süresi-elapsed time”</i> değerine bölünmesiyle tanımlanmaktadır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Sırayla, <i>“DB Time”,</i> hem CPU üzerinde hemde boşta olmayan bekleme durumlarında sıkışmış tüm oturumlar tarafından harcanan zaman olarak tanımlanmaktadır. Diğer bir deyişle, <i>“DB Time”</i> tüm aktif oturumlar tarafından harcanan zamanların toplamı olarakta düşünülebilir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Mesela, bir dakikalık gözlem süresince aktif olan dört oturum olduğunu düşünelim. Her bir oturum toplamda dört dakikalık <i>“DB Time”</i> değerini vercek şekilde numeratörde birer dakikalık toplam “DB Time” değerine karşılık gelecektir. Bu örnekte, <i>“geçen süre”</i> paydası bir dakikadır. Her iki değerin bölümü AAS değeri olarak 4 sonucunu vermektedir. Bu örnektende görüldüğü gibi, 4 AAS metriği 4 aktif oturuma sahip olmaya karşılık gelmektedir. Bu örnekte, ortalama olarak dört aktif oturum bulunmaktadır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Eğer bu örneği çeşitli dönemlerde aktif durumda olan daha fazla oturum ilave ederek genelleştirirsek, AAS metriğinin hesaplaması gözlem periyodu süresince hala ortalama sayıda aktif oturumlar hakkında bir fikir verecektir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">AAS metriği CPU sayısı ile kıyaslandığında oldukça kullanışlı olmaktadır. Eğer AAS metriği CPU sayısını çok aşarsa, bu durumda veritabanı performansı zarar görecektir. Öte yandan, eğer AAS metriği belirgin şekilde CPU sayısından düşükse, o zaman veritabanı performansı iyi olacaktır. Veritabanı perfomansını sekteye uğratan üst sınırdaki AAS metriğinin eşikdeğeri, uygulamanın davranışına ve son kullanıcıların beklentilerine bağlıdır. Bu yüzden, bu eşikdeğeri uygulama bağlamında belirlenmelidir. AAS eşikdeğeri belirlendiğinde, bu metrik oldukça güvenilir, hazır biçimde bütün veritabanı performans sorunlarının teşhisinde hizmet verecektir. Aslında, “DB Time“ metriğinin düşürülmesi Oracle ADDM iyileştirme aracının yegane hedefi olmaktadır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
<a name='more'></a></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Bu AAS metriği tam olarak eksiksiz hesaplanmalı, veya aşağıda belirtileceği gibi tahmin edilmelidir. Bütün metotlar, hem tahminleri kullanarak hemde kesin hesaplamaları kullanarak, <i>“işlem süresi”</i> paydasınının seçimine bağlı olmaktadır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><u><span style="font-family: Arial, sans-serif;">İşlem süresi paydası ve anti homojenlik</span></u></b></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">AAS doğal bir kümedir veya ortalama bir metriktir. Ortalama tabanlı metrikler, temel verinin homojen olmayan durumunu her zaman gizlerler. Sıklıkla, bu gizli anti-homojenlik aslında Oracle performans probleminin anlaşılmasında en önemli bilgi kaynağı olmaktadır. İşte bu sebeple metriğin etkili kullanımı, anti-homojenliğin tespitini ve anlaşılmasını gerektirmektedir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Bazı Oracle uzmanları, homojen olmayan herhangi bir tipi adlandırmak için <i>“eğrilik-skew”</i> tanımı kullanmaktadır. Eğriliğin istatistiksel tanımı, aslında belirli bir tip anti-homojenlik ile sınırlandırılmıştır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Aşağıdaki örneklerde de görüleceği üzere, <i>“işlem süresi”</i> paydası eğriliğin tespitinde çok önemlidir. Daha geniş <i>“işlem süresi”</i> (mesela bir saat), nispeten birkaç satıra bakılması gerekeceğinden kullanım için daha uygundur. Ayrıca, saatlik ortalama pek çok uygulama ve çalışma için daha uygun olabilir. Ancak, daha düşük <i>“işlem süresi”</i> (mesela bir dakika), kısa anlık tepkilerin açığa çıkarılmasında faydalı olabilmektedir, ancak bu da yoğun bir veri hacmi oluşturacaktır. En iyi yaklaşım, kolaylık için mümkünse daha geniş <i>“işlem süresi”</i> kullanmak, ancak kısa anlık tepkilerin açığa çıkarılması gerektiği durumalarda ise daha kısa <i>“işlem süresi” </i>metriklerinin kullanılmasıdır.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><u><span style="font-family: Arial, sans-serif;">ASH raporlarını kullanarak AAS tahmin metotları </span></u></b><span style="font-family: Arial, sans-serif;"><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">AWR verisinden AAS metirklerini tahmin etmek için metodu belirleme noktasında kullanılan mantık ve matematik sırasıyla artalan biçimde aşağıdaki adımlarda yer almaktadır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><span style="font-family: Arial, sans-serif;">Adım 1 – Her bir gözlem için aktif oturum hesabı <o:p></o:p></span></b></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Oracle, aktif oturumlar için temel durumları saniyede birkez kaydeder ve gözlemlerinin geçmiş bilgilerini V$ACTIVE_SESSION_HISTORY sistem tablosunda saklar. Her bir gözlem örneği SAMPLE_ID kolonu tarafından belirlenir. Verilen SAMPLE_ID için bu tablodaki satır sayısı, esasen bu gözlem için aktif oturum miktarıdır. Aşağıdaki örnek, her bir ASH gözlemi için 2 den 12 ye kadar aktif oturumların miktarını sorgu sonucu olarak getirmektedir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">AAS tahmini için gerekmemesine rağmen, aşağıdaki sorgu, CPU üzerinde olduğunu düşündüğü bekleme durumundaki oturumları birbirinden ayırmaktadır. Bu ilave analiz sıklıkla faydalıdır, ancak gereklide değildir. </span><o:p></o:p></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">select<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_id,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_time,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sum(decode(session_state, 'ON CPU', 1, 0)) as on_cpu,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sum(decode(session_state, 'WAITING', 1, 0)) as waiting,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> count(*) as active_sessions<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">from<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> v$active_session_history<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">where<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> <i><span style="color: red;">-- en son 15 saniye</span><o:p></o:p></i></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_time > sysdate - (0.25/1440)<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">group by<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_id,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_time<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">order by<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_id;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: x-small;"> SAMPLE_ID SAMPLE_TIME ON_CPU WAITING ACTIVE_SESSIONS</span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: x-small;">---------- ------------------------- ---------- ---------- ---------------<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: x-small;"> 25325213 24-NOV-11 15.32.03.078 PM 3 9 12<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: x-small;"> 25325214 24-NOV-11 15.32.04.085 PM 1 6 7<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: x-small;"> 25325215 24-NOV-11 15.32.05.095 PM 0 4 4<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: x-small;"> 25325216 24-NOV-11 15.32.06.105 PM 1 2 3<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: x-small;"> 25325217 24-NOV-11 15.32.07.115 PM 0 3 3<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: x-small;"> 25325218 24-NOV-11 15.32.08.125 PM 0 2 2<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: x-small;"> 25325219 24-NOV-11 15.32.09.135 PM 3 1 4<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: x-small;"> 25325220 24-NOV-11 15.32.10.155 PM 0 4 4<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: x-small;"> 25325221 24-NOV-11 15.32.11.165 PM 1 2 3<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: x-small;"> 25325222 24-NOV-11 15.32.12.175 PM 0 4 4<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: x-small;"> 25325223 24-NOV-11 15.32.13.185 PM 1 2 3<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: x-small;"> 25325224 24-NOV-11 15.32.14.195 PM 1 3 4<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: x-small;"> 25325225 24-NOV-11 15.32.15.205 PM 1 4 5<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: x-small;"> 25325226 24-NOV-11 15.32.16.215 PM 1 2 3<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: x-small;"> <o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">14 rows selected.</span></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Bunu bir kenara bırakırsak, aktif bir oturumun ASH tanımının V$SESSION_STATE görünümü değeri ile tam olarak eşleşmesi çokta gerekli değildir. Ayrıca, bazen ASH <i>“idle”</i> bekleme durumundaki oturumları, aktif olacaklarını normalde beklemesekte, kaydeder. Ancak, hiçbir ikincil düşünce bu yaklaşımın gereksiz olduğunu pekiştirmez. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><span style="font-family: Arial, sans-serif;">Adım 2 – Bir zaman aralığı boyunca aktif oturum sayısını bulmak </span></b><span style="font-family: Arial, sans-serif;"><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Adım 1’deki sorguda, belirli zaman aralığında ASH tarafından kayıt edilen herbir gözlem için oturumların sayısı tespit edildi. Aktif oturumların ortalama sayısını hesaplamak için Adım 1’deki sorguyu bir satır içi görününüm ile altsorguya dönüştürüp, ortalamasını alacak bir dış sorgu ile saracağız. Bu örnekte, ortalamaları tekli ondalığa yuvarlayacak ve ortalamaları altsorgudaki en erken zaman mühürü ile ilişkilendireceğim.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">select<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> to_char(min(sub1.sample_time), 'YYYY-MM-DD HH24:MI:SS') as sample_time,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> round(avg(sub1.on_cpu),1) as cpu_avg,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: red;">round(avg(sub1.waiting),1) as wait_avg,<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="color: red; font-family: 'Courier New'; font-size: 10pt;"> round(avg(sub1.active_sessions),1) as act_avg<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">from<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> ( <span style="color: red;">-- altsorgu 1: saniye başı bir satır, SAMPLE_TIME çözümü</span><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> select<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_id,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_time,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sum(decode(session_state, 'ON CPU', 1, 0)) as on_cpu,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sum(decode(session_state, 'WAITING', 1, 0)) as waiting,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> count(*) as active_sessions<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> from<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> v$active_session_history<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> where<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_time > sysdate - (0.25/1440)<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> group by<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_id,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_time<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> ) sub1;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">SAMPLE_TIME CPU_AVG WAIT_AVG ACT_AVG<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">------------------- ---------- ---------- ----------<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">2011-11-24 15:45:30 .7 2.8 3.8<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">1 row selected.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Yukarıdaki sorgu sonucu ortalaması veritabanı boştayken çekilen ASH snapshotlarından herhangi bir veri içermemektedir. ASH aktif olmayan oturumlar olarak bulunan gözlemler için bir satır kaydetmez. Bu yüzden, bu şekilde hesaplanan ortalamalar, aktif oturumlar olmadan gözlemler içeren bu aralıklar için yapay olarak çok yüksek olacaktır(çünkü AVG() fonksiyonu için N=örnekler paydası yapay olatak çok düşüktür). Ancak, ilgilenilen periyotlar genellikle performans krizlerini kapsadığından, pratikte bu önemli bir mesele değildir. Belli ki, ilgilenilen pek çok periyot bolca aktif oturumu kapsamakta, tipik olarakta CPU dan daha fazla aktif oturum kapsamaktadır.</span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><span style="font-family: Arial, sans-serif;">Adım 3 - Çarpıklık bulmak için ortalaması ile bölünmüş varyans eklemek<o:p></o:p></span></b></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Adım 2’deki sorguya , ortalama için hem varyans hemde varyans oranı eklenir. Yüksek oran çarpıklığı işaret etmektedir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">select<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> to_char(min(sub1.sample_time), 'YYYY-MM-DD HH24:MI:SS') as sample_time,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> round(avg(sub1.on_cpu),1) as cpu_avg,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> round(avg(sub1.waiting),1) as wait_avg,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> round(avg(sub1.active_sessions),1) as act_avg,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> <span style="color: red;">round(variance(sub1.active_sessions),1) as act_var,<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="color: red; font-family: 'Courier New'; font-size: 10pt;"> round( (variance(sub1.active_sessions)/avg(sub1.active_sessions)),1) as act_var_mean</span><span style="font-family: 'Courier New'; font-size: 10pt;"><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">from<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> (-- altsorgu 1: saniye başı bir satır, SAMPLE_TIME çözümü<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> select<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_id,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_time,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sum(decode(session_state, 'ON CPU', 1, 0)) as on_cpu,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sum(decode(session_state, 'WAITING', 1, 0)) as waiting,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> count(*) as active_sessions<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> from<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> v$active_session_history<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> where<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_time > sysdate - (0.25/1440)<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> group by<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_id,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_time<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> ) sub1;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">SAMPLE_TIME CPU_AVG WAIT_AVG ACT_AVG ACT_VAR ACT_VAR_MEAN<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">------------------- ---------- -------- ---------- --------- ------------<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">2011-11-24 15.47:10 .7 2.8 3.8 5.8 1.4<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">1 row selected.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><span style="font-family: Arial, sans-serif;">Adım 4 – Birden fazla zaman aralıkları için tahmin</span></b></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Adım 3’teki sorguya aşağıdaki değişiklikler yapılarak bu yaklaşımı birçok ardışık zaman aralığına genişletiyoruz. Aşağıdaki sorguda birer dakika aralığını seçiyorum.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><span style="font-family: Arial, sans-serif;">round(sub1.sample_time, 'MI') fonksiyonu ile GROUP BY temeli oluşturulur.<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><span style="font-family: Arial, sans-serif;">Bir sqlplus yer değiştirme değişkeni eklenerekk ilgilenilen genel bir zaman aralığı belirtilir.<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><span style="font-family: Arial, sans-serif;">Varyans kolonu sadece hata ayıklama ile ilgilendiği için kaldırıldı.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;">select<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> to_char(round(sub1.sample_time, 'MI'), 'YYYY-MM-DD HH24:MI') as sample_minute,<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> round(avg(sub1.on_cpu),1) as cpu_avg,<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> round(avg(sub1.waiting),1) as wait_avg,<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> round(avg(sub1.active_sessions),1) as act_avg,<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> round( (variance(sub1.active_sessions)/avg(sub1.active_sessions)),1) as act_var_mean<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;">from<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> ( </span><span style="font-family: 'Courier New'; font-size: 10pt;">-- altsorgu 1: saniye başı bir satır, SAMPLE_TIME çözümü</span><span style="font-family: 'Courier New'; font-size: 10pt;"><o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> select<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_id,<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_time,<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> sum(decode(session_state, 'ON CPU', 1, 0)) as on_cpu,<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> sum(decode(session_state, 'WAITING', 1, 0)) as waiting,<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> count(*) as active_sessions<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> from<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> v$active_session_history<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> where<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_time > sysdate - (&dakika/1440)<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> group by<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_id,<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_time<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> ) sub1<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;">group by<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> round(sub1.sample_time, 'MI')<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;">order by<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> round(sub1.sample_time, 'MI');<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">old 18: sample_time > sysdate - (&dakika/1440)<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">new 18: sample_time > sysdate - (<b>1</b>/1440)<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">SAMPLE_MINUTE CPU_AVG WAIT_AVG ACT_AVG ACT_VAR_MEAN<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">-------------------- ---------- ---------- ---------- ------------<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">2011-11-24 16.15:00 1.8 3.3 4.9 .5<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">2011-11-24 16:16:00 1 3.4 4.5 .4<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">2011-11-24 16:17:00 .6 2.8 3.6 .3<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">2011-11-24 16:18:00 1 3.7 4.5 .5<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">2011-11-24 16:19:00 .7 3.2 4.3 .3<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">2011-11-24 16:20:00 .8 3.5 4.4 .4<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">2011-11-24 16:21:00 1 2.5 3.5 .4<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">2011-11-24 16:22:00 .6 1.8 2.3 .3<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">8 rows selected.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><span style="font-family: Arial, sans-serif;">Adım 5 – Daha uzun zaman gemişi için AWR oluşturmak (saatlik)<o:p></o:p></span></b></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Adım 4’ deki sorguyu, V$ACTIVE_SESSION_HISTORY tablosundan alınacak veriler yerine daha uzun zaman aralıklarına genişleme yapabilmek için aşağıdaki hale dönüştürüyorum.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo2; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><span style="font-family: Arial, sans-serif;">Yuvarlamayı dakika yerine saate çevirdik.<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo2; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font-family: 'Times New Roman'; font-size: 7pt;"> </span></span><span style="font-family: Arial, sans-serif;">Eski veriyi elde etmek için DBA_HIST_ACTIVE_SESS_HISTORY görünümünü referans aldık.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;">column sample_hour format a17<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;">select<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> to_char(round(sub1.sample_time, 'HH24'), 'YYYY-MM-DD HH24:MI') as sample_hour,<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> round(avg(sub1.on_cpu),1) as cpu_avg,<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> round(avg(sub1.waiting),1) as wait_avg,<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> round(avg(sub1.active_sessions),1) as act_avg,<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> round( (variance(sub1.active_sessions)/avg(sub1.active_sessions)),1) as act_var_mean<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;">from<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> ( </span><span style="font-family: 'Courier New'; font-size: 10pt;">-- altsorgu 1: saniye başı bir satır, SAMPLE_TIME çözümü</span><span style="font-family: 'Courier New'; font-size: 10pt;"><o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> select<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_id,<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_time,<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> sum(decode(session_state, 'ON CPU', 1, 0)) as on_cpu,<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> sum(decode(session_state, 'WAITING', 1, 0)) as waiting,<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> count(*) as active_sessions<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> from<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> dba_hist_active_sess_history<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> where<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_time > sysdate - (&saat/24)<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> group by<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_id,<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> sample_time<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> ) sub1<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;">group by<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> round(sub1.sample_time, 'HH24')<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;">order by<o:p></o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"> round(sub1.sample_time, 'HH24');<o:p></o:p></span><br />
<span style="font-family: 'Courier New'; font-size: 10pt;"><br />
</span><br />
<br />
<div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Bunun yanında </span><a href="http://www.rahul.net/abe/blog/downloads/cputime-dbtime-usercalls-gets-awr-daytime.sql.txt">cputime-dbtime-usercalls-gets-awr-daytime.sql.txt</a> <span style="font-family: Arial, Helvetica, sans-serif;">sorgusu ile AWR raporundan her saat çekilen snapshotlar kullanılarak birer saatlik dilimlerde CPU kaynak tüketimi, bekleme süresi ve “buffer gets” ile “user calls” işyükü metirlkleri aşağıdaki gibi elde edilebilir.</span><o:p></o:p></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 9pt;">SNAP_ID BEGIN_HOUR DB_CPU DB_TIME PCNT_CPU WAIT_ USER_CALLS BUFFER_<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 9pt;"> _CSPH _CSPH _UTILIZE CSPH _PH GETS_PH<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 9pt;">------ --------------- ------- ------- -------- ------ ---------- -------<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 9pt;">16554 2011-12-22 08:00 1251 375846 0 374595 133809 157182<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 9pt;">16555 2011-12-22 09:00 1288 373080 0 371792 98995 175902<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 9pt;">16556 2011-12-22 10:01 7847 399668 1 391821 65215 1578118<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 9pt;">16557 2011-12-22 11:00 798 370192 0 369394 55754 212906<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 9pt;">16558 2011-12-22 12:00 4249 403034 0 398785 247632 504779<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 9pt;">16559 2011-12-22 13:00 10796 479532 1 468736 400502 1215195<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 9pt;">16560 2011-12-22 14:00 7820 572684 1 564864 420180 542239<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 9pt;">16561 2011-12-22 15:00 7555 476859 1 469304 458131 574445<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 9pt;">16562 2011-12-22 16:00 6633 472670 0 466037 356792 421098<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 9pt;">16563 2011-12-22 17:00 4724 423283 0 418559 282467 310253<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 9pt;">16578 2011-12-23 08:00 2267 391711 0 389444 208237 336309<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 9pt;">16579 2011-12-23 09:00 2677 404537 0 401860 325800 202084<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 9pt;">16580 2011-12-23 10:00 3254 441378 0 438124 202435 278814<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;"><br />
</span></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Bununda yanında, aşağıdaki sorgu kullanılarak belirli bir toplam işyükü yüzdesi üzerinde </span><i style="font-family: Arial, sans-serif;">“DB CPU” </i><span style="font-family: Arial, sans-serif;">süresine sahip snapshot aralıkları tespit edilebilir. Ortalama zaman ile ilgilenilmeyip, soruna ilk teşhis amacıyla yaklaşılacağı zamanlarda oldukça faydalı bir sorgudur ve AWR raporundan %45 üzerinde beklemeye sebebiyet veren </span><i style="font-family: Arial, sans-serif;">“DB CPU”</i><span style="font-family: Arial, sans-serif;"> ile bekleme olaylarını getirmektedir. Sonuçtanda görüleceği üzere 24 ve 25 Aralık tarihlerinde 22.00 sırasında oldukça yüksek <i>"DB CPU"</i> beklemeleri olmuştur ve bu süreyi analiz edip neyin buna sebebiyet verdiğinin incelenmesi gerekecektir.</span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">select s.begin_interval_time,m.* from <o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">(select ee.instance_number,ee.snap_id,ee.event_name,round(ee.event_time_waited/1000000) event_time_waited,ee.total_waits,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">round((ee.event_time_waited*100)/et.total_time_waited,1) pct,round((ee.event_time_waited/ee.total_waits)/1000) avg_wait<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">from (select ee1.instance_number,ee1.snap_id,ee1.event_name,ee1.time_waited_micro-ee2.time_waited_micro event_time_waited,<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> ee1.total_waits - ee2.total_waits total_waits<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">from dba_hist_system_event ee1 join dba_hist_system_event ee2 <o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> on ee1.snap_id = ee2.snap_id+1 and ee1.instance_number = ee2.instance_number and ee1.event_id = ee2.event_id<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> and ee1.wait_class_id <> 2723168908 and ee1.time_waited_micro-ee2.time_waited_micro > 0<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> union <o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> select st1.instance_number,st1.snap_id,st1.stat_name event_name,st1.value - st2.value event_time_waited,1 total_waits<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> from dba_hist_sys_time_model st1 join dba_hist_sys_time_model st2 on st1.instance_number = st2.instance_number<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> and st1.snap_id = st2.snap_id + 1 and st1.stat_id = st2.stat_id and st1.stat_name='DB CPU' <o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> and st1.value - st2.value > 0) ee join<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">(select et1.instance_number,et1.snap_id,et1.value - et2.value total_time_waited<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">from dba_hist_sys_time_model et1 join dba_hist_sys_time_model et2 on et1.snap_id=et2.snap_id+1<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">and et1.instance_number = et2.instance_number and et1.stat_id = et2.stat_id and et1.stat_name='DB time'<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">and et1.value - et2.value > 0 ) et<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">on ee.instance_number = et.instance_number and ee.snap_id = et.snap_id) m join dba_hist_snapshot s on m.snap_id = s.snap_id<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;"> where <b>event_name like 'DB CPU'</b> and<span style="color: red;"> pct>45</span><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New'; font-size: 10pt;">order by m.instance_number,m.snap_id,event_time_waited desc;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">BEGIN_INTERVAL_TIME INSTANCE_NUMBER SNAP_ID EVENT_NAME EVENT_TIME_WAITED TOTAL_WAITS PCT AVG_WAIT<o:p></o:p></span></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">23-DECEMBER -2011 06:00:48,005 1 16576 DB CPU 12 1 55,2 12219<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">23-DECEMBER -2011 18:00:42,468 1 16588 DB CPU 6 1 76,8 5594<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">24-DECEMBER -2011 02:00:06,020 1 16596 DB CPU 5 1 69,7 4969<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">24-DECEMBER -2011 09:00:47,738 1 16603 DB CPU 5 1 74,9 5328<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">24-DECEMBER -2011 13:00:22,603 1 16607 DB CPU 6 1 77,7 6391<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">24-DECEMBER -2011 17:01:03,253 1 16611 DB CPU 6 1 71,5 6000<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">24-DECEMBER -2011 21:00:43,758 1 16615 DB CPU 7 1 76,8 7047<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;"><span style="color: red;">24-DECEMBER -2011 22:00:23,115 1 16616 DB CPU 101 1 73,2 100594</span><o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">25-DECEMBER -2011 06:00:49,762 1 16624 DB CPU 6 1 76,2 6359<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">25-DECEMBER -2011 10:00:30,452 1 16628 DB CPU 5 1 66,4 5234<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">25-DECEMBER -2011 14:00:05,864 1 16632 DB CPU 6 1 70,8 6016<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">25-DECEMBER -2011 17:00:07,622 1 16635 DB CPU 2 1 46,4 2234<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">25-DECEMBER -2011 18:00:47,090 1 16636 DB CPU 3 1 57,5 2703<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;"><span style="color: red;">25-DECEMBER -2011 22:00:21,855 1 16640 DB CPU 105 1 76,1 104766</span><o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">26-DECEMBER -2011 02:00:53,972 1 16644 DB CPU 6 1 65,2 6344<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">26-DECEMBER -2011 06:00:26,805 1 16648 DB CPU 5 1 67,4 5328<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">26-DECEMBER -2011 10:00:02,420 1 16652 DB CPU 5 1 57,3 5391<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">26-DECEMBER -2011 18:00:26,902 1 16660 DB CPU 3 1 65,1 3125<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">26-DECEMBER -2011 19:00:06,399 1 16661 DB CPU 2 1 53,8 2328<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">27-DECEMBER -2011 03:00:11,050 1 16669 DB CPU 7 1 70,1 6656<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">27-DECEMBER -2011 07:00:57,589 1 16673 DB CPU 6 1 76,2 5969<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">27-DECEMBER -2011 19:00:45,861 1 16685 DB CPU 7 1 83 7281<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">27-DECEMBER -2011 23:00:21,132 1 16689 DB CPU 7 1 54,8 7250<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">28-DECEMBER -2011 03:00:56,765 1 16693 DB CPU 6 1 63,6 5859<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">28-DECEMBER -2011 18:00:55,270 1 16708 DB CPU 6 1 66,8 6078<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">29-DECEMBER -2011 01:00:34,398 1 16715 DB CPU 4 1 49,8 3797<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">29-DECEMBER -2011 02:00:11,066 1 16716 DB CPU 7 1 68 6500<o:p></o:p></span></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';"><span style="font-size: x-small;">29-DECEMBER -2011 09:00:53,304 1 16723 DB CPU 5 1 50,2 5297 <o:p></o:p></span></span></div></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><span style="font-family: 'Courier New'; font-size: 10pt;"><br />
</span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;"><b><i>Referans:</i></b><u><o:p></o:p></u></span></div><div class="MsoNoSpacing"><i><span style="font-family: Arial, sans-serif;">1)Method-Gapp UKOUG 2011 - Predicting and Profiling of End-User Performance while Focussing on AWR Data</span></i></div><div class="MsoNoSpacing"><i><span style="font-family: Arial, sans-serif;">2)</span></i> <i><span style="font-family: Arial, sans-serif;">A Tour of the AWR Tables, Northern California Oracle Users' Group (NoCOUG) Summer Conference 2008, August 21 2008, Dave Abercrombie<o:p></o:p></span></i></div><div class="MsoNoSpacing"><i><span style="font-family: Arial, sans-serif;">3)</span></i> <i><span style="font-family: Arial, sans-serif;">Oracle Wait Interface: A Practical Guide to Performance Diagnostics & Tuning,</span></i> <i><span style="font-family: Arial, sans-serif;">Published 2004 McGraw-Hill Professional, 2004,</span></i> <i><span style="font-family: Arial, sans-serif;">Richmond Shee, Kirtikumar Deshpande, K. Gopalakrishnan<b><o:p></o:p></b></span></i></div><div class="MsoNoSpacing"><i><span style="font-family: Arial, sans-serif;">4)</span> </i><i><span style="font-family: Arial, sans-serif;">Average Session Load (ASL)The Golden Metric? , </span></i><i><span lang="EN-US" style="font-family: Arial, sans-serif;">Kyle Hailey</span></i><i><span style="font-family: Arial, sans-serif;"><o:p></o:p></span></i></div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-23169996007267988612012-02-02T16:13:00.000+02:002012-02-02T16:13:12.385+02:00Oracle 11.2.0.2 Data Guard performansını genel olarak değerlendirmek<div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Oracle 11.2.0.2 Data Guard standby veritabanlarını yapıya ilave ettikten sonra birincil veritabanı performansını doğru şekilde değerlendirmek için, </span><span style="font-family: Arial, sans-serif;"> </span><span style="font-family: Arial, sans-serif;">aynı uygulama profili ve yüklemesiyle Dataguard yapılandırmasının öncesinin ve </span><span style="font-family: Arial, sans-serif;"> </span><span style="font-family: Arial, sans-serif;">sonrasının V$SYSMETRIC_SUMMARY </span><span style="font-family: Arial, sans-serif;"> </span><span style="font-family: Arial, sans-serif;">görünümünden ve AWR snapshotlarından alınacak istatistik geçmişleriyla kıyaslanması gerekmektedir.</span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Data Guard standby uygulaması öncesinde ve sonrasında uygulama profilini değerlendirmek için aşağıdaki istatistikler kıyaslanabilir:<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l2 level1 lfo1; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">İşlem başına fiziksel okuma <o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l2 level1 lfo1; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">İşlem başına fiziksel yazma <o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l2 level1 lfo1; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">İşlem başına CPU kullanımı <o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l2 level1 lfo1; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">İşlem başına redo üretimi <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Uygulama performansını değerlendirmek için aşağıdaki istatistikler kıyaslanabilir:<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l3 level1 lfo2; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Saniye başı redo üretimi veya redo oranı<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l3 level1 lfo2; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Saniye başı kullanıcı commit işlemi veya saniye başı işlem <o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l3 level1 lfo2; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Saniye başı veritabanı zamanı <o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l3 level1 lfo2; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">İşlem başına yanıt süresi <o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l3 level1 lfo2; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">SQL servisi yanıt süresi<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";"><o:p></o:p></span></div><a name='more'></a><br />
<div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Eğer her iki senaryo arasında uygulama profili değişmişse bu adil bir karşılaştırma olmayacaktır. Bu durumda testin yeniden yapılması gerekmekte ve buna göre iyileştirme işlemlerine başlanmalıdır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Eğer uygulama profili benzerse ve birincil veritabanında çıktıdaki bir düşüş veya yanıt süresinde bir artış sebebiyle uygulama performansında değişmeler gözlemleniyorsa, o zaman aşağıdaki genel problem alanlarının değerlendirmeye alınması gerekecektir:<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo3; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">CPU kullanımı<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Eğer yüksek yükleme(%90 üzerinde aşırı CPU kullanımı, paging veya swapping) yaşanıyorsa, Data Guard ile devam etmeden önce sistemin iyileştirilmesi gerekmektedir. Bu amaçla, işletim sisteminden sistem kullanım istatistiklerini izlemek için V$OSSTAT görünümü veya $SYSMETRIC_HISTORY görünümü kullanılabilir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo3; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Çok yüksek I/O bekleme olayları<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Eğer , log yazıcı veya veritabanı yazıcı proseslerinden kaynaklanan çok yüksek I/O bekleme olayları yaşanıyorsa, o halde bu durum çıktı ve yanıt süresine olumsuz etki edecektir. I/O etkisini gözlemlemek için aşağıdaki bekleme olaylarının geçmiş verilerine bakmak gerekecektir:<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">– Log dosyası paralel yazmalar <o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">– Log dosyası sıralı okumalar (sequential reads)<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">– Log dosyası paralel okumalar <o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">– Veri dosyası paralel yazmalar <o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">– Veri dosyası sıralı okumalar paralel yazmalar <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">SYNC taşımasıyla, “commit” işlemleri daha uzun zaman almaktadır, çünkü ilgili prosesler “commit” işleminin tamamlandığıyla ilgili LGWR prosesinden bir geri bildirim almadan önce, redo verisinin standby veritabanında geçerli durumda olmasını garantileme ihtiyacı duymaktadır. Bir LGWR proses işlemi aşağıdaki bekleme olaylarını içermektedir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo3; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Log dosyası paralel yazma ( LGWR prosesi için lokal yazma)<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo3; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">SENDREQ’da LGWR beklemesi<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Bu bekleme olayı şunları içermektedir:<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">– Paketi ağa koymak için gereken zaman<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">– Paketi standby veritabanına göndermek için gereken zaman <o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">– RFS yazması veya RFS I/O bekleme olayı içeren standby redo log dosyasına standby yazması<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">– Birincil veritabanına alındı bilgisini geri iletmek için gereken süre (mesela tek bir yolculuğun gecikme süresi)<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">LGWR prosesi için daha uzun “commit “ süreleri daha uzun yanıt sürelerine ve daha düşük çıktılara sebebiyet verecektir, özellikle küçük süre hassasiyetindeki işlemlerde... Ancak, log yazıcı lokal yazmasını(Log Dosyası Paralel Yazma bekleme olayı) veya SENDREQ bekleme olayındaki LGWR beklemesini kapsayan çeşitli bileşenleri iyileştirerek yeterli bir gelişime ulaşılabilir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Disk yazma I/O performansını iyileştirmek için (Log Dosyası Paralel Yazması veya RFS I/O), I/O bant genişliği arttırılmalıdır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Ağ zamanını azaltmak için:<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo4; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Oracle Net gönderme ve alma tampon boyutları iyileştirilmelidir.<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo4; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">SDU boyutu 65535 olarak ayarlanmalıdır.<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo4; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Eğer ağ bant genişliğinde doyma varsa bant genişliği arttırılmalıdır. <o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo4; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Ağ gecikmesini azaltmak için mümkünse yakın bir site bulunmalıdır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">ASYNC taşımasıyla, LGWR prosesi mevcut log dosyasına “commit” kayıtının yazılmasından önce ağ sunucu prosesleri için hiç bir zaman beklemez. Ancak, eğer ağ sunucu prosesleri geriye düşmüşse ve taşınması gereken redo verisi log tamponundan silinmişse, o zaman ağ sunucu prosesi online redo dosyasından okuma yapar. Bu da, daha fazla I/O içeriği ve muhtemelen log yazıcı proses yazmaları(Log Yazma Paralel Yazma beklemesi) için daha uzun bekleme süresi anlamına gelmektedir. Eğer yeterli I/O bant genişliği tahsis edilmemişse, log dosyası paralel yazmaları ve log dosyası sıralı okumaları artacaktır ve böylece çıktı ve yanıt süresi performansı olumsuz etkilecektir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-36594424495881144342012-01-20T13:13:00.001+02:002012-01-20T13:29:03.889+02:00Birleşmelerde sorgu geliştiricinin uygun yürütme planını seçmesi<div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Sorgu geliştirici, bir yürütme planının seçilmesi esnasında aşağıdakileri değerlendirmeye almaktadır: <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l2 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Arial, sans-serif;">Sorgu geliştirici, önce en azından bir veya birden fazla tablo birleşmesinin kesinlikle en az bir satır içeren bir satır kaynağı olarak sonuçlanıp sonuçlanmayacağını belirler. Sorgu geliştirici, bu gibi durumları tablodaki UNIQUE ve PRIMARY KEY kısıtlamalarına bağlı olarak tanımaktadır. Eğer böyle bir durum mevcutsa, o zaman sorgu geliştirici bu tablolaları ilk olarak birleşme sırasına göre yerleştirir. Ardından, geri kalan tablo kümelerinin birleşmesi işlemine gelinir. <o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l2 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Arial, sans-serif;">Dış<i>(outer)</i> birleşme durumları ile birleşme komutları için, dış birleşme operatörü olan tablo, birleşme sırasında bu durum için diğer tablodan daha sonra gelmelidir. Sorgu geliştirici, bu kuralı ihlal eden birleşme sıralarını değerlendirmeye almaz. Benzer olarak, bir altsorgu yarı birleşme ve anti birleşmelere dönüştürüldüğünde, bu alt sorgunun tabloları dış sorgu bloğunda bağlı olunan veya ilişkideki tablolardan daha sonra gelmelidir. Ancak, bazı durumlarda karma<i>(hash)</i> anti birleşmelerin ve yarı birleşmelerin<i>(semijoins)</i> bu sıralama durumunu geçersiz kılması mümkün olmaktadır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Sorgu geliştirici ile muhtemel birleşme sırasına, birleşme metoduna ve uygun erişim yollarına bağlı olarak bir yürütme planı kümesi oluşturulur. Ardından, herbir planın maliyeti değerlendirilir ve en düşük maliyete sahip olan seçilir. Sorgu geliştirici, bu maliyetleri aşağıdaki şekillerde değerlendirmeye almaktadır:</span></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;"><o:p></o:p></span></div><a name='more'></a><br />
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo3; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Arial, sans-serif;">İçiçe döngü<i>(nested loops)</i> işlemlerinin maliyeti, dış tablodan seçilen herbir satırın ve her bir dış satırın iç tablodan eşleştiği satırların belleğe okunma maliyetine dayalıdır. Sorgu geliştirici, data dictionary’deki istatistikleri kullanarak bu maliyetleri değerlendirir.<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo3; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><i><span style="font-family: Arial, sans-serif;">“Sort merge join”</span></i><span style="font-family: Arial, sans-serif;"> tipi birleşmenin maliyeti, tüm kaynakların belleğe okunması ve bellekten sort edilmesi işlemine bağlıdır.<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l3 level1 lfo2; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><i><span style="font-family: Arial, sans-serif;">“Karma(merge) birleşme”</span></i><span style="font-family: Arial, sans-serif;"> tipi birleşmenin maliyeti, birleşmeye giriş tarafının bir tarafında bir karma tablo oluşturup, birleşmenin diğer tarafındaki satırları kullanarak derinlemesine araştırma yapma maliyetine dayalıdır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Sorgu geliştirici, herbir işlemin maliyetini belirlerken aşağıdaki gibi çeşitli faktörleride değerlendirmeye almaktadır.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l4 level1 lfo4; text-indent: -18.0pt;"><span style="font-family: Arial, sans-serif;">1.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Arial, sans-serif;">Daha küçük bir sort alan büyüklüğü, <i>“sort merge join”</i> için maliyeti muhtemelen yükseltir, çünkü daha küçük sort alanında sort işlemi daha fazla CPU zamanı kullanır. <o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l4 level1 lfo4; text-indent: -18.0pt;"><span style="font-family: Arial, sans-serif;">2.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Arial, sans-serif;">Daha geniş bir çoklu blok okuması, muhtemelen bir <i>“sort merge join” </i>işleminin içiçe döngü birleşmesi işlemiyle ilgili maliyetini azaltacaktır. Eğer, veritabanı tekli bir I/O içinde diskten daha büyük ardışık blokları okursa, o zaman içiçe döngü birleşmesi için iç tablodaki indeks muhtemelen tam tablo taraması üzerinden performansı artıracaktır. Çoklu blok okuması sayısı, DB_FILE_ MULTIBLOCK_READ_COUNT başlangıç parametresince tanımlanmaktadır.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Sorgu geliştiricinin birleşme sırası seçimini geçersiz kılmak için sorguda ORDERED hinti kullanılabilir. Eğer, ORDERED hinti dış birleşme için kuralı ihlal eden bir birleşme sırasını belirtirse, bu durumda geliştirici bu hinti değerlendirmeye almaz ve kendi belirlediği birleşme sırasını seçer. Ayrıca, hintler ile geliştiricinin birleşme metodu seçimleride geçersiz kılınabilir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><span style="font-family: Arial, sans-serif;">Nested Loop Joins (İçiçe döngü birleşmeleri)<o:p></o:p></span></b></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">İçiçe döngü, küçük veri alt kümelerinde birleşmelerde kullanışlıdır. İç tablonun, dış tablodan bağımlı olarak sevk edildiğinden emin olunması önemlidir. Eğer iç tablonun erişim yolu dış tablodan bağımsızsa, bu durumda dış döngünün her bir tekrarı için aynı satırlar döndürülerek, bu bloklar tekrar tekrar yeniden ziyaret edildiğinden dolayı daha düşük mantıksal I/O performansı oluşmaktadır. Bu gibi durumlarda, iki bağımsız satır kaynağını birleştiren karma(<i>hash</i>) birleştirmeler daha iyi performans gösterecektir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Bir içiçe döngü birleşmesi aşağıdaki adımları kapsamaktadır:<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">1. Sorgu geliştirici sevk edici tabloyu belirler ve bu tabloyu dış tablo olarak atar.<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">2. Diğer tablo iç tablo olarak tanımlanır.<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">3. Dış tablodaki herbir satır için, Oracle iç tablodaki tüm satırlara erişir. Dış döngü, dış tablodaki her bir satır içindir, iç döngüde iç tablodaki her bir satır içindir. Dış döngü, aşağıdaki gibi yürütme planında iç döngü öncesinde ortaya çıkar.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">NESTED LOOPS<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">dış döngü (outer_loop)<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: 'Courier New';">iç döngü (inner_loop)<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Oracle 11g itibariyle fiziksel I/O için tüm gecikmeleri azaltmak için içiçe döngü birleşmelerinde yeni bir uygulama mevcuttur. Buffer cache içinde bir indeks veya tablo bloğu yoksa ve birleşmenin gerçekleşmesi için bu indeks veya tablo blokları gerekliyse, fiziksel I/O işlemi yapılmalıdır. Oracle 11g birçok fiziksel I/O talebini yığınlamaktadır ve bunları tek bir seferde işlemek yerine, taşıyıcı I/O kullanarak bunları işlemeyi tercih eder. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">İçiçe döngü birleşmelerinde yeni uygulamanın bir parçası olarak, iki içiçe birleşme satır kaynağı yürütme planında görülebilmektedir, daha önceki sürümlerde sadece bir tanesi görülebilmekteydi. Bu gibi durumlarda, Oracle bir içiçe döngü birleşme satır kaynağını, birleşmenin dış tarafındaki tablonun değerlerini iç taraftaki indeks ile birleştirmek için tahsis etmektedir. İkinci satır kaynağı, birleşmenin iç tarafındaki tablo ile indekslerde saklanan satır idlerini<i>(rowid) </i>içeren ilk birleşmenin sonucunu birleştirmek için tahsis edilir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><span style="font-family: Arial, sans-serif;">Sorgu geliştiricinin içiçe döngü birleşmelerini kullanması <o:p></o:p></span></b></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Sorgu geliştirici içiçe döngü birleşmelerini, iki tablo arasında iyi sevk şartları içerecek az sayıda satırların birleşmesinde tercih etmektedir. Dış döngüden iç döngüye doğru sevk olmaktadır, böylece yürütme planında tabloların sıralaması önem kazanmaktadır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Dış döngü kaynak satırını sevk eder. Birleşme koşullarını sevk ettirmek için bir satır kümesi oluşturulur. Satır kaynağı, bir indeks taraması veya full tablo taraması kullanılarak erişilen bir tablo olabilir. Ayrıca, satırlar başka bir işlem tarafındanda oluşturulabilir. Örneğin; içiçe döngü birleşmesinin çıktısı, başka bir içiçe döngü birleşmesi için kaynak satırı olarak hizmet verebilir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">İçiçe döngü, dış döngüden dönen(bilhassa indeks taramasıyla) her bir satır için tekrarlanmaktadır. Eğer iç döngü için erişim yolu dış döngüyle bağımlı değilse, o zaman kartezyen birleşme ile sonlandırılabilir, yani dış döngünün her bir tekrarı için iç döngü aynı satır kümesini oluşturacaktır. Bu sebeple, iki bağımsız satır kaynağı birbiriyle birleşeceğinde, başka bir birleşme metodunun kullanılması gerekmektedir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><span style="font-family: Arial, sans-serif;">İçiçe döngü birleşmesi hintleri <o:p></o:p></span></b></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Eğer geliştirici başka bir bir birleşme metodu kullanma eğilimindeyse, o zaman USE_NL(tablo1 tablo2) hinti kullanılarak ilgili tablolar içiçe döngü birleşmesi metoduyla birleştirilmeye zorlanabilir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><span style="font-family: Arial, sans-serif;">Karma(hash) birleşmeler<o:p></o:p></span></b></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Karma birleşmeler, büyük veri kümelerinin birleştirilmesinde kullanılmaktadır. Geliştirici, iki tablonun enküçüğünü veya veri kaynağının en küçüğünü, bellek içinde birleşme anahtarında bir karma tablo inşa etmek için kullanır. Ardından büyük tabloyu tarayarak karma tabloda sondaj ile birleşecek satırları bulur. Bu metot küçük tablonun bellek içine sığabildiği durumlarda oldukça kullanışlıdır. Maliyet ise, iki tablonun verisi üzerinden tek okumanın geçmesi ile sınırlandırılır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><span style="font-family: Arial, sans-serif;">Sorgu geliştiricinin karma birleşmelerini kullanması <o:p></o:p></span></b></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Sorgu geliştirici, eğer iki tablo eşit birleşme kullanarak birleşiyorsa veya aşağıdaki durumlardan birisi oluştuğunda, karma birleşmesini kullanmaktadır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo5; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Arial, sans-serif;">Büyük miktarda veri birleşmek zorunda olduğunda.<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo5; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Arial, sans-serif;">Küçük tablonun büyük bir bölümü birleştirildiğinde.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">USE_HASH hinti sorguya eklenerek iki tablonun birleşmesinde geliştiricinin karma birleşmeyi zorunlu kılması sağlanabilir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><span style="font-family: Arial, sans-serif;">“Sort Merge” Birleşmeler<o:p></o:p></span></b></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><i><span style="font-family: Arial, sans-serif;">“Sort merge”</span></i><span style="font-family: Arial, sans-serif;"> birleşme, iki bağımsız kaynaktan satırları birleştirmektedir. Karma birleşmeler genellikle “<i>sort merge</i>” birleşmelerden daha iyi performans gösterir. Ancak, aşağıdaki durumlarda “<i>sort merge</i>” birleşmeler karma birleşmelerden daha iyi performans gösterir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l5 level1 lfo6; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Arial, sans-serif;">Satır kaynaklarına halihazırda sort edilmişse.<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l5 level1 lfo6; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Arial, sans-serif;">Yapılacak bir sort işlemi bulunamamışsa.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Ancak, eğer bir <i>“sort merge” </i>birleşmesi, daha yavaş bir erişim metodunu( indeks taraması yerine full tablo taraması) seçimini gerektiriyorsa, o zaman <i>“sort merge”</i> kullanımının faydası kaybolabilir.<i> “Sort merge” </i>birleşmeleri, iki tablo arasındaki birleşme koşulunun eşitsizlik durumu olduğu durumlarda(<, <=, >, veya >=) kullanışlıdır. <i>“Sort merge”</i> birleşmeler geniş veri kümeleri için içiçe döngü birleşmelerinden daha performanslıdır. Karma birleşmeler eşitlik koşulu olmadan kullanılamaz.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><i><span style="font-family: Arial, sans-serif;">“Merge”</span></i><span style="font-family: Arial, sans-serif;"> birleşmelerde sevk tablosu konsepti yoktur. Birleşme aşağıdaki gibi 2 adımdan oluşur.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">1. Sort birleşme işlemi: Her iki giriş birleşme anahtarı üzerinde sort edilir.<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">2. Merge birleşme işlemi: Sort edilen listeler birbiriyle kaynaşır.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Eğer giriş birleşme kolonunca sort edilirse, o zaman bu satır kaynağı için bir sort birleşme işlemi gerçekleşmez. Ancak, bir <i>“sort merge”</i> birleşme her zaman birleşmenin sağ tarafı için konumlandırılabilir bir sort tamponu oluşturur, böylece birleşmenin sol tarafından gelen duplike birleşme anahtar değerler geldiği en son eşleşilen durumu geri arayabilecektir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><span style="font-family: Arial, sans-serif;">Sorgu geliştiricinin “sort merge” birleşmelerini kullanması <o:p></o:p></span></b></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Geliştiricinin <i>“sort merge“</i> birleşmeyi zorunlu kılması için sorguda USE_MERGE hinti kullanılabilir. Ayrıca hintlerde zorlanılacak erişim yoluda belirtilebilir. Geliştiricinin USE_MERGE hinti ile geçersiz olacağı bazı durumlarda mevcuttur, örneğin geliştirici tabloda full tarama seçebilir ve sorguda sort işlemini önleyebilir. Ancak, full tablo taraması üzerinden hızlı erişim yerine indeks üzerinden geniş tablo erişimi ve tekli blok okumaları yüzünden artan bir maliyet olacaktır. <o:p></o:p></span></div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-65771625705515435812012-01-17T10:10:00.000+02:002012-01-17T10:10:04.641+02:00“Oracle Database Smart Flash Cache” özelliğinin yapılandırılması<div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">AWR raporunun daha fazla buffer cache ihtiyacı olduğuna işaret ettiğini düşünelim. Paylaşımlı havuzun doğru şekilde ayarlandığından eminsiniz. Buffer cache miktarını, paylaşımlı havuzdaki bellek tahsisini azaltarak, daha yüksek bir minimum seviyeye çıkaramıyorsunuz ve ilave olarak Oracle’a tahsis edeceğiniz daha fazla fiziksel bellek imkanıda bulunmuyor.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">İşte bu sıkıntılı durumda, işletim sistemine bağlı olarak, Oracle 11.2 sürümü ile yeni gelen <i>“Oracle Database Smart Flash Cache</i></span><i style="font-family: Arial, sans-serif;">”</i><span style="font-family: Arial, sans-serif;"> özelliği ile, buffer cache için daha fazla miktarda bellek gerektiğini işaret eden durumlarda, harici olarak ekstra bellek genişletmesi yapılabilir. Bu özellik şu an sadece Solaris ve Oracle Linux işletim sistemleri ile sınırlıdır. </span><span style="font-family: Arial, sans-serif;"> </span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Flash cache özelliğini devreye almak için aşağıdaki parametrelerin ayarlanması gerekmektedir:</span></div><a name='more'></a><o:p></o:p><br />
<div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><i><span style="font-family: "Arial","sans-serif";">DB_FLASH_CACHE_FILE:</span></i><span style="font-family: "Arial","sans-serif";"> Bu parametre, flash cache için yol adını ve dosya ismini ayarlar. Flash cache dosyası için bir flash cihaz kullanılmalı ve işletim sisteminde, raw diskte veya bir Oracle ASM disk grubunda aşağıdaki örnekte olduğu gibi bulundurulmalıdır. <o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt;"><span style="font-family: "Arial","sans-serif";">DB_FLASH_CACHE_FILE= "/dev/sdc" <o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt;"><span style="font-family: "Arial","sans-serif";">DB_FLASH_CACHE_FILE = "/export/home/oracle/file_raw" /* <i>--raw dosya</i><o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt;"><span style="font-family: "Arial","sans-serif";">DB_FLASH_CACHE_FILE = "+dg1/file_asm" /* <i>--ASM diskgrubu kullanılır.<o:p></o:p></i></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><i><span style="font-family: "Arial","sans-serif";">DB_FLASH_CACHE_SIZE:</span></i><span style="font-family: "Arial","sans-serif";"> Bu parametre flash cache depolama alanını belirler. <o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt;"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt;"><span style="font-family: "Arial","sans-serif";">DB_FLASH_CACHE_SIZE = 8GB<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Flash cache etkin bir sistem ve etkin olmayan bir sistem arasında kolayca geçiş yapmak için, aşağıdaki komutlar kullanılır.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">SQL> alter system set db_flash_cache_size = 0; /* <i>--flash cache devredışı kalır.</i><o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">SQL> alter system set db_flash_cache_size = 8G; /* <i>-- flash cache tekrar devreye sokulur.</i><o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Yukardaki örneklemede görüldüğü üzere flash cache dinamik olarak devredışı bırakılıp tekrar devreye alınabilmesine rağmen, Oracle bu metodu desteklememektedir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><i><span style="font-family: "Arial","sans-serif";">“Oracle Database Smart Flash Cache”,</span></i><span style="font-family: "Arial","sans-serif";"> Oracle 11.2 sürümünde Enterprise lisans içine dahildir. Flash Cache flash tabanlı cihazların I/O hızındaki avantajını kullanarak, disk tabanlı depolama birimlerinden çok daha iyi I/O performansına erişmektedir. Örneğin; küçük diskler 4 milisaniye okuma hızı sunarken, flash tabanlı cihazlar aynı okuma oranını sadece 0.4 milisaniyede gerçekleştirir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Flash Cache sadece salt okuma bir bellektir. Temiz(değişmemiş) veri blokları buffer cache’den disk alanı baskısı yüzünden tahliye edildiğinde, daha sonrasında bu bloklar flash cache içine taşınmaktadır. Sonradan, bu bloklara tekrardan gerek duyulursa, veritbanı bunları flash cache içinden SGA alanına taşıyacaktır.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Oracle veritabanının sınırsız belleğe erişmesini düşünmek her zaman gerçekçi olmaz. SGA alanı için maksimum 12 GB tahsis edebildiğinizi düşünün, eğer 50GB bir bellek olursa, o zaman veritabanı bütün olarak daha hızlı çalışacak anlamımı çıkar? Oracle Database Smart Flash Cache, bu gibi durumlar için dizayn edilmiştir. Oracle, flash cache boyutunun buffer cache boyutunun iki katı bir değere ayarlanmasını tavsiye etmektedir. Burada kesin ve katı bir kural yoktur, isterseniz kadame ekademe katlayarak artırın ve elde edilen performans gelişimini gözleyin. Tatmin eden bir noktada artırma işlemini sonlandırabilirsiniz. <o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Oracle ayrıca, eğer <i>“db file sequential read”</i> bekleme olayı top listesindeyse ve eğer yeterli CPU kapasitesi mevcutsa, flash cache özelliğinin kullanılmasının değerlendirmeye alınmasını tavisye etmektedir. Flash cache bir sefer devreye alındımı, Oracle veri bloklarını buffer cache içinden flash cache içine taşır ve veritabanı buffer cache içindeki bloklar hakkında metaveriyi saklar. Flash cache içine taşınan blok sayısına bağlı olarak, MEMORY_TARGET parametresinin değeri yükseltilebilir, böylece birikmiş metaveri diğer parçalar için kalan bellek miktarını etkilemez. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Oracle, flash cache depolama birimi için iki cihaz tavsiye etmektedir; bunlar Sun Storage F5100 Flash Array ve Sun Flash Accelerator F20 PCIe Card. Tek bir flash cihaz seçilebildiğinden dolayı, bir volume managerde gerekmektedir. Bu noktada da, Oracle ASM en iyi volume manager olarak öne çıkmaktadır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Eğer flash cache özelliği Oracle RAC ortamında kullanılacaksa, her bir instance için ayrı flash cache dosya yolu oluşturulmalı ve her bir instance’ın flash cache’i için farklı ASM disk grubu oluşturulması gerekmektedir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Oracle Database Flash Cache ile ilgili detaylı araştırma ve karşılaştırmalara aşağıdaki linklerden ulaşabilrsiniz.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><a href="http://www.oracle.com/technetwork/articles/servers-storage-admin/smart-flash-cache-oracle-perf-361527.html">http://www.oracle.com/technetwork/articles/servers-storage-admin/smart-flash-cache-oracle-perf-361527.html</a><o:p></o:p></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><a href="http://surachartopun.com/2010/02/oracle-11gr2-flash-cache.html">http://surachartopun.com/2010/02/oracle-11gr2-flash-cache.html</a><span style="font-family: "Arial","sans-serif";"><o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-68500616830435138752012-01-13T12:10:00.002+02:002012-01-13T12:10:41.169+02:00RMAN KEEP FOREVER, KEEP UNTIL TIME ve FORCE komutları<div class="MsoNormal"><span style="font-family: Arial, sans-serif; font-size: 11pt;">Oracle 11g’de KEEP FOREVER seçeneği Oracle 10g’deki yapısına göre oldukça geliştirilmiş ve online yedekleri sürekli tutmaya yarayan arşivlenmiş loglar muhafaza edilmiştir. Oracle 10g’de, yedek alındıktan sonra zaman noktasında geri kurtarmaya izin veren KEEP FOREVER </span><span style="font-family: Arial, sans-serif; font-size: 11pt;"> </span><span style="font-family: Arial, sans-serif; font-size: 11pt;">seçeneğiyle alınan bu yedek ileri sarılabilmekteydi. Oracle 11g’de, KEEP seçeneği sadece yedeği sürekli tutacak gerekli olan arşivlenmiş logları muhafaza edecektir, böylece sadece yedeğin alındığı noktaya kadar geri kurtarmak için gereken bu yedek kullanılabilir. Bu yedek tamamlandıktan sonra oluşturulan arşivlenmiş logların muhafazasına gerek kalmaz ve DELETE OBSOLETE komutu ile bunlar kullanılmaz olarak işaretlenebilir.</span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Arial","sans-serif"; font-size: 11.0pt;">Oysaki Oracle 10g’de, KEEP FOREVER komutuyla alınan yedeklerden sonra alınan bütün arşivlenmiş log yedeklerinin muhafaza edilmesi gerekmekteydi. KEEP FOREVER komutunun çalışması için RMAN kataloğunun kullanılması gerekirken, KEEP UNTIL TIME komutu katalog gerektirmez.</span></div><a name='more'></a><o:p></o:p><br />
<div class="MsoNormal"><span style="font-family: Arial, sans-serif; font-size: 11pt;">KEEP ve FORCE takıları kullanılarak her ikisi arasındaki farkları aşağıda örneklendirmeye çalışacağım. Muhafaza periyodunun(retention period) sadece 1 gün olarak tanımlandığını varsayarak, 6 Ocak’ta yedek alacağım. Bu durumda bu yedekler 7 Ocak tarihinde kullanılmaz duruma düşecektir.</span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">RMAN> <b>show retention policy;</b><o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">using target database control file instead of recovery catalog<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">RMAN configuration parameters for database with db_unique_name ORCL are:<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 1 DAYS;<o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Arial","sans-serif"; font-size: 11.0pt;">Şimdi bir yedek alacağım ve muhafaza periyodunu KEEP UNTIL TIME takısı kullanarak 2 gün olarak yapılandıracağım. <o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Arial","sans-serif"; font-size: 11.0pt;">Veritabanı yedeği ile birlikte bu yedeğin sürekli olması için arşivlenmiş loglarda otomatik olarak yedeklenecektir. Bu yedeği tanımlamak için ‘RETAIN’ etiketini ekleyeceğim.<o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">RMAN> <b>backup database format ‘/u02/oracle/backup/bkp.%U’ tag ‘retain’ keep until time ‘sysdate+2′;</b><o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">Starting backup at 06-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">current log archived<o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">using target database control file instead of recovery catalog<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">allocated channel: ORA_DISK_1<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: SID=11 device type=DISK<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">backup will be obsolete on date 08-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">archived logs required to recover from this backup will be backed up<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: starting full datafile backup set<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: specifying datafile(s) in backup set<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">input datafile file number=00002 name=/u01/oradata/orcl/sysaux01.dbf<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">input datafile file number=00001 name=/u01/oradata/orcl/system01.dbf<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">input datafile file number=00005 name=/u01/oradata/orcl/example01.dbf<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">input datafile file number=00003 name=/u01/oradata/orcl/undotbs01.dbf<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">input datafile file number=00004 name=/u01/oradata/orcl/users01.dbf<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">input datafile file number=00006 name=/u01/oradata/orcl/test01.dbf<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: starting piece 1 at 06-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: finished piece 1 at 06-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">piece handle=/u02/oracle/backup/bkp.0ilae8jn_1_1 tag=RETAIN comment=NONE<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: backup set complete, elapsed time: 00:00:46<o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">using channel ORA_DISK_1<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">backup will be obsolete on date 08-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">archived logs required to recover from this backup will be backed up<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: starting full datafile backup set<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: specifying datafile(s) in backup set<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">including current SPFILE in backup set<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: starting piece 1 at 06-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: finished piece 1 at 06-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">piece handle=/u02/oracle/backup/bkp.0jlae8l5_1_1 tag=RETAIN comment=NONE<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01<o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">current log archived<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">using channel ORA_DISK_1<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">backup will be obsolete on date 08-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">archived logs required to recover from this backup will be backed up<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: starting archived log backup set<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: specifying archived log(s) in backup set<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">input archived log thread=1 sequence=118 RECID=117 STAMP=835596523<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: starting piece 1 at 06-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: finished piece 1 at 06-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">piece handle=/u02/oracle/backup/bkp.0klae8l6_1_1 tag=RETAIN comment=NONE<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01<o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">using channel ORA_DISK_1<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">backup will be obsolete on date 08-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">archived logs required to recover from this backup will be backed up<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: starting full datafile backup set<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: specifying datafile(s) in backup set<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">including current control file in backup set<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: starting piece 1 at 06-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: finished piece 1 at 06-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">piece handle=/u02/oracle/backup/bkp.0llae8l7_1_1 tag=RETAIN comment=NONE<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">Finished backup at 06-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><b><span style="font-family: "Arial","sans-serif"; font-size: 11.0pt;">İKİNCİ DURUM</span></b><span style="font-family: "Arial","sans-serif"; font-size: 11.0pt;"><o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Arial","sans-serif"; font-size: 11.0pt;">Aynı gün FORCE takısı kullanarak başka bir yedek alacağım ve bu yedeği ‘FORCE‘ etiketiyle tanımlayacağım.<o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">RMAN> <b>backup database format ‘/u02/oracle/backup/bkp.%U’ tag ‘force’ force;<o:p></o:p></b></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">Starting backup at 06-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">using channel ORA_DISK_1<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: starting full datafile backup set<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: specifying datafile(s) in backup set<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">input datafile file number=00002 name=/u01/oradata/orcl/sysaux01.dbf<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">input datafile file number=00001 name=/u01/oradata/orcl/system01.dbf<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">input datafile file number=00005 name=/u01/oradata/orcl/example01.dbf<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">input datafile file number=00003 name=/u01/oradata/orcl/undotbs01.dbf<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">input datafile file number=00004 name=/u01/oradata/orcl/users01.dbf<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">input datafile file number=00006 name=/u01/oradata/orcl/example01.dbf<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: starting piece 1 at 06-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: finished piece 1 at 06-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">piece handle=/u02/oracle/backup/bkp.0mlae8p1_1_1 tag=FORCE comment=NONE<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: backup set complete, elapsed time: 00:00:35<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: starting full datafile backup set<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: specifying datafile(s) in backup set<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">including current control file in backup set<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">including current SPFILE in backup set<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: starting piece 1 at 06-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: finished piece 1 at 06-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">piece handle=/u02/oracle/backup/bkp.0nlae8q4_1_1 tag=FORCE comment=NONE<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">Finished backup at 06-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">RMAN> <b>list backup of database summary;</b><o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">List of Backups<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">===============<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">Key TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">---- -- -- - ----------- --------------- ------- ------- ---------- ---<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">12 B F A DISK 06-JAN-12 1 1 NO RETAIN<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">16 B F A DISK 06-JAN-12 1 1 NO FORCE<o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><b><span style="font-family: "Arial","sans-serif"; font-size: 11.0pt;">7 Ocak – Muhafaza periyodunun bir gün sonrasında varsayılan yedeğin geçerliliğini yitirdiği tarih;</span></b><span style="font-family: "Arial","sans-serif"; font-size: 11.0pt;"><o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Arial","sans-serif"; font-size: 11.0pt;">“1 gün” muhafaza periyodu sonunda geçerliliği yitirme ilkesi olsa bile, KEEP UNTIL takısı ile alınan yedekten, ki bu yedeğin 8 Ocak tarihinde geçersiz olacağı işaretlendiğinden dolayı, hala geri yükleme işlemi yapılabilmektedir. <o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">RMAN> <b>restore validate database from tag ‘retain’;</b><o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">Starting restore at 07-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">allocated channel: ORA_DISK_1<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: SID=11 device type=DISK<o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: starting validation of datafile backup set<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: reading from backup piece /u02/oracle/backup/bkp.0ilae8jn_1_1<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: piece handle=/u02/oracle/backup/bkp.0ilae8jn_1_1 tag=RETAIN<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: restored backup piece 1<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: validation complete, elapsed time: 00:00:16<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">Finished restore at 07-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><b><span style="font-family: "Arial","sans-serif"; font-size: 11.0pt;">8 Ocak – KEEP UNTIL TIME periyodunun geçerliliğini yitirdiği tarih (2 gün sonra)</span></b><span style="font-family: "Arial","sans-serif"; font-size: 11.0pt;"><o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Arial","sans-serif"; font-size: 11.0pt;">DELETE OBSOLETE komutu kullanılarak eskimiş yedekleri silme işlemini yapacağım. “RETAIN’ etiketli yedeğinde silindiği görülecektir. Şimdi 7 Ocakta kullanılan aynı RESTORE VALIDATE komutu çalışmayacaktır. <o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">RMAN> <b>restore validate database from tag ‘retain’;</b><o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">Starting restore at 08-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">using channel ORA_DISK_1<o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">RMAN-00571: ===========================================================<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">RMAN-00571: ===========================================================<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">RMAN-03002: failure of restore command at 01/08/2012 14:24:35<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">RMAN-06026: some targets not found - aborting restore<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">RMAN-06023: no backup or copy of datafile 6 found to restore<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">RMAN-06023: no backup or copy of datafile 5 found to restore<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">RMAN-06023: no backup or copy of datafile 4 found to restore<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">RMAN-06023: no backup or copy of datafile 3 found to restore<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">RMAN-06023: no backup or copy of datafile 2 found to restore<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">RMAN-06023: no backup or copy of datafile 1 found to restore<o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Arial","sans-serif"; font-size: 11.0pt;">Ancak, eğer aynı RESTORE VALIDATE komutu ‘RETAIN’ etiketi kullanılmadan çalıştırılırsa, başarılı şekilde çalışacak ve 1 günlük alıkoyma periyodu ilkesi ile DELETE OBSOLETE komutunun daha önceden çalıştırılmış olmasına rağmen, ‘FORCE’ etiketli yedekten geri yükleme işlemi yapılabilmektedir. <o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">RMAN> <b>restore validate database ;</b><o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">Starting restore at 08-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">using channel ORA_DISK_1<o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: starting validation of datafile backup set<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: reading from backup piece /u02/oracle/backup/bkp.0mlae8p1_1_1<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: piece handle=/u02/oracle/backup/bkp.0mlae8p1_1_1 <b>tag=FORCE</b><o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: restored backup piece 1<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">channel ORA_DISK_1: validation complete, elapsed time: 00:00:16<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 10.0pt;">Finished restore at 08-JAN-12<o:p></o:p></span></div><div class="MsoNormal"><br />
</div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-57857446203744044772012-01-11T13:54:00.002+02:002012-01-11T16:34:12.560+02:00SQL komutlarının ayrıştırılması safhası hakkında<div class="MsoNoSpacing"><span lang="EN-US" style="font-family: Arial, sans-serif;">SQL ile ilgili bir performans sorunu oluştuğunda,sorunu anlamak ve ardından bir çözüm bulabilmek için ilk olarak SQL komutlarının veritabanında nasıl işlendiğinin anlaşılması gerekmektedir. Uygulama, veritabanı instance’ına her bağlandığında, eninde sonunda veritabanı sunucusunda yaslı olan bir sunucu prosesine atanır. Bu sunucu prosesi, veritabanı ve son kullanıcı uygulaması arasındaki arayüzü desteklemektedir. Bu proses ayrıca SQL komutu sentaksını kontrol </span><span style="font-family: Arial, sans-serif;">etmek</span><span lang="EN-US" style="font-family: Arial, sans-serif;">, SQL komutunun nasıl yürütüldüğünün ve sonuçların son kullanıcı uygulamasına nasıl döndüğünün belirlenmesinden sorumludur. SQL komutu, sunucu prosesi tarafından alındığında, <i>“hafif ayrıştırma-soft parse”</i> meydana gelmektedir. Bu safhada komut sentaksı doğruluk için kontrol edilmekte, komut içinde referans verilen objelere kullanıcının erişim yetkisinin olduğu doğrulanmakta ve SQL <i>“karma”</i> değeri(<i>SHV-SQL hash value</i>) komut metninde hesaplanmaktadır. SHV, veritabanı içinde komutu kolayca belirlemek için kullanılan numerik bir değerdir. Ardından, SGA içindeki <i>“library cache”</i> de SHV in halen mevcut olup olmadığının belirlenmesi için araştırılır. Aynı yada diğer bir sunucu prosesi, benzer bir SQL komutunu halihazırda çalıştırdığında bu olay meydana gelir. Eğer SHV bulunursa, sunucu prosesi komut hakkında <i>“library cache” </i>içinde saklanan bilgiyi getirir. Bu, yürütme planı olarak bilinen, sorgu içinde çeşitli nesnelere erişim için kullanılan algoritmaları içermektedir. Komut alındıktan sonra, eğer bağlaç değişkenler(<i>bind variables</i>) komut içinde mevcutsa, aslına uygun değerler yerine geçer ve yürütme planı tarafından belirtilen işlemler sunucu prosesi tarafından yapılır. SQL komutlarını yürütürken bütünsel olarak en düşük kaynak maliyetini ürettiği ve en hızlı yanıt süresini verdiğinden dolayı bu arzu edilen bir olaylar dizisi olmaktadır.</span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: Arial, sans-serif;"><o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: Arial, sans-serif;"></span></div><a name='more'></a><br />
<div class="MsoNoSpacing"><span lang="EN-US" style="font-family: Arial, sans-serif;">Eğer SQL komutuna karşılık gelen SHV, <i>“soft parse” </i>esnasında <i>“library cache”</i> içinde bulunmazsa, sunucu prosesi komut üzerinde <i>“hard parse-katı ayrıştırma”</i> işlemi gerçekleştirmek zorundadır. Bu operasyon esnasında, komut için yürütme planı belirlenmeli ve sonuç “library cache” içinde saklanmalıdır. Bu genellikle pahalı bir hesaplama adımıdır ve bazı durumlar için oldukça yüksek zaman tüketebilir. Komutun kompleksliğine bağlı olarak, optimal yürütme planı keşfinden önce yüzlerce hatta binlerce farklı permutasyon denenebilir. Varsayılan olarak, geliştirici 80,000 gibi pekçok farklı yürütme planını test ederek bunların içinden en düşük kaynak maliyetinde bir yürütme planını bulacaktır. Yürütme planını saklamak için, belleğin <i>“library cache”</i> içinden tahsis edilmesi gerekir. Bu işlem esnasında, bir dizi mandal(<i>latches</i>) sonradan kazanılmalıdır ve sunucu prosesi tarafından tutulmalıdır. Mandallar, basit olarak, library, dictionary veya tampon bellek gibi belirli bir bellek objesine aynı anda sadece tek bir prosesin yazmasını güvenceye almak için, veritabanı içinde kullanılan semaforlar veya bayraklardır. Eğer pekçok oturum eşzamanlı olarak <i>“hard parse”</i> gerçekleştirirse, bu mandallar için çekişmeler meydana gelebilir. Bu da sorgu için yanıt süresini azaltacaktır. Eğer birçok oturum tarafından pekçok basit ve benzersiz SQL komutları yürütülürse, paylaşımlı havuz oldukça yüksek miktarda parçalanacaktır(fragmentation) ki, bu durumda ilerde mandal çekişmelerine sebebiyet verebilecektir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: Arial, sans-serif;">Aşırı durumlarda, bu tip mandal çekişmeleri <i>“library cache”</i>e yazmak için gerekli mandalları elde etmek için zamanının %50 sinden fazlasını beklemeyle tüketen oturumlar için oldukça iyi olabilir, Sorgular için yanıt süresi ve çıktı muhtemelen kabul edilemez olacaktır.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><span lang="EN-US" style="font-family: Arial, sans-serif;">Sorunun tespiti<o:p></o:p></span></b></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: Arial, sans-serif;">Aşırı ayrıştırma problemlerinin tespiti için birçok metot kullanılabilir. Aşağıdaki sorgu aşırı <i>“hard parse”</i> yapan sorunların tespiti için oldukça yararlıdır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">SELECT /*+ RULE */ s.program, COUNT(*) users,<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">SUM(t.value) parses, SUM(t.value)/COUNT(*) parses_per_session,<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">SUM(t.value)/(SUM(sysdate-s.logon_time)*24) parses_per_hour<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">FROM v$session s, v$sesstat t<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">WHERE t.statistic# = 153<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">AND s.sid = t.sid<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">GROUP BY s.program HAVING SUM(t.value)/COUNT(*) > 2.0<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">ORDER BY parses_per_hour DESC;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: Arial, sans-serif;">Bu sorgu program ismi tarafından toplanan bir takım ayrıştırma metrikleri üretmektedir. Parses kolonu toplam <i>“hard parse”</i> sayısını göstermekte, parses_per_session kolonu programı çalıştıran tüm oturumlar için ortalama ayrıştırma sayısı olurken, parses_per_hour kolonu ise programı çalıştıran tüm oturumlar için ortalama ayrıştırma sayı olmaktadır. Bu noktada parses_per_hour kolonundaki yüksek rakamların sebeplerine bakılmalıdır. OLTP programlar için 10 altındaki değerler makul değerlerdir. Batch programlar için daha yüksek değerler kabul edilebilir. 10 üzerindeki değerlere sahip programlar ise araştırılmalıdır. Eğer, bir batch program bağlaç değişkenleri düzgün şekilde kullanmıyorsa, binlerce değer olacaktır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: Arial, sans-serif;">Şüpheli programlar için aşağıdaki sorgu kullanılarak, çalıştırılan bu tarz SQL komutlarını belirlemek için <i>“library cache”</i> sorgulanabilir. Aşağıdaki bu belirleyici sorguda, şüphelenilen SQL komutunun SQL id isi filtreleme için kullanılacaktır.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">SELECT /*+ RULE */ t.sql_text<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">FROM v$sql t, v$session s<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">WHERE s.sql_address = t.address<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">AND s.sql_hash_value = t.hash_value<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">AND s.sid = <SQL sorgusunun SID si>;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: Arial, sans-serif;">Makül bir örnek alana kadar bu sorgu defalarca çalıştırılabilir ve komutların bağlaç değişkeni kullanıp kullanmadığının belirlenmesi için bu komutlarda incelenebilir. Bağlaç değişkenleri, <i>“library cache”</i> içinde bulunan sorgularda :b1,:b2 gibi tanımlanmaktadır. Yukardaki sorgu sonucu dönen değer aşağıdaki gibi gözükecektir:<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">SELECT employee_id, first_name, last_name, address<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">FROM hr.employees WHERE employee_id=<span style="color: red;">:b1</span>;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: Arial, sans-serif;">Eğer bu employee_id değeri aşağıdaki gibi bir değer almışsa, bu durumda bağlaç değişkeni kullanılmamış demektir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">SELECT employee_id, first_name, last_name, address<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">FROM hr.employees WHERE employee_id=<span style="color: red;">102</span>;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: Arial, sans-serif;">Bunun yanında bağlaç kullanılmayan SQL komutlarının hızlı yoldan ve kolayca tespiti için aşağıdaki sorguda kullanılabilir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">SELECT substr(sql_text,1,30) "SQL", <o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">count(*) , <o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">sum(executions) "TotExecs" <o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">FROM v$sqlarea <o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">WHERE executions < 5 <o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">GROUP BY substr(sql_text,1,30) <o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">HAVING count(*) > 30 <o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">ORDER BY 2<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: Arial, sans-serif;"><br />
</span><br />
<span lang="EN-US" style="font-family: Arial, sans-serif;">Hoşa gitmeyen programlar ve SQL komutları belirlendiğinde, bunların tüm veritbanına etkisi değerlendirmeye alınmalıdır. Eğer bu hoşa gitmeyen kod belirgin şekilde veritabanında negatif bir etki yapıyorsa, program katmanında düzeltme yapılana kadar, veritabanında kısmi bir iyileşme sağlanması için birtakım konfigürasyon parametre değerleri genişletilmelidir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: Arial, sans-serif;">Daha öncede belirtildiği gibi aşırı ayrıştırma, optimal CPU tüketiminden daha yüksek bir CPU tüketimi ile sonuçlanacaktır. Ancak, daha büyük etki muhtemelen paylaşımlı havuz içindeki kaynaklar için çekişme esnasında olacaktır. Eğer pekçok küçük komut katı şekilde ayrıştırılırsa(<i>hard parse)</i> bu durumda paylaşımlı havuz muhtemelen fragmente olacak ve paylaşımlı havuz fragmente oldukçada katı ayrıştırma için gereken zaman artacaktır. Pekçok benzersiz komutun yürütülmesi prosesi sürdükçe, kaynak çekişmesi kötüleşecektir. Bu kritik kaynaklar muhtemelen “<i>library cache</i>” içindeki bellek ile paylaşımlı havuzla ilişkili çeşitli mandallar olacaktır. Çekişmenin tespiti için oldukça kolay metotlar vardır. Aşağıdaki sorgu, devam etmeden once tamamlanmak için bekleyen oturumlardaki olayların listesini göstermektedir. v$session_wait görünümü her bir oturum için tek bir satır içerdiğinden, bu sorgu her bir olay için bekleyen oturumların toplam sayısını döndürecektir. Görünüm eş-zamanlı veri içerdiğinden, muhtemel sorunların tespiti için tekrar tekrar çalıştırılmalıdır.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">SELECT /*+ RULE */ SUBSTR(event,1,30) event, COUNT(*)<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">FROM v$session_wait<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">WHERE wait_time = 0<o:p></o:p></span></div><div class="MsoNoSpacing"><span lang="EN-US" style="font-family: 'Courier New';">GROUP BY SUBSTR (event,1,30), state;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-42225256300438320822012-01-10T12:14:00.000+02:002012-01-10T12:14:24.861+02:00Oracle 11.2 ile askıda tutulan istatistikler<div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Oracle 11g Sürüm 2 (11.2) itibariyle istatistik toparlarken aşağıdaki yeni özellikler işleme girmiştir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Toparlama işlemi sonunda istatistiklerin otomatik olarak yayınlanması(varsayılan işlem)<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: "Arial","sans-serif";">Yeni istatistikleri askıda tutacak şekilde saklamak<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Yeni istatistiklerin askıda tutulacak şekilde saklanması istatistik onaylanması işlemine izin verir ve sadece tatminkar olunduğu durumlarda bunlar yayınlanır. İstatistiklerin toparlanır toparlanmaz, otomatik olarak yayınlanıp yayınlanmayacağını kontrol etmek için aşağıdaki gibi DBMS_STATS paketi kullanılır: <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">SELECT DBMS_STATS.GET_PREFS('PUBLISH') PUBLISH FROM DUAL;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Yukardaki sorgu TRUE veya FALSE değerini döndürür. TRUE değeri, istatistiklerin toparlandığında yayınlanacağını gösterirken, FALSE değeri istatistiklerin askıda kalacak şekilde tutulacağını göstermektedir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">PUBLISH ayarı şema veya tablo seviyesinde değiştirilebilir. Örneğin, <i>HR</i> şemasında <i>employees</i> tablosunun PUBLISH ayarını FALSE olarak değiştirmek için aşağıdaki sorgu çalıştırılabilir:<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">Exec dbms_stats.set_table_prefs('HR', 'EMPLOYEES', 'PUBLISH', 'false');<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;"></span></div><a name='more'></a><br />
<div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Daha sonrasında artık <i>employees</i> tablosu için istatistik toparlama işlemi tamamlandığında bu istatistikler otomatik olarak yayınlanmayacaktır. Bunun yerine, yeni toparlanan bu istatistikler gözden geçirme ve değerlendirme içni USER_TAB_PENDING_STATS tablosunda muhafaza edilecektir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Varsayılan olarak, sorgu geliştirici data dictionary görünümlerde yayınlanan istatistikleri kullanır. Eğer, sorgu geliştiricinin yeni toplanmış askıdaki istatistikleri kullanması isteniyorsa, OPTIMIZER_USE_PENDING_STATISTICS başlangıç parametresinin TRUE olarak ayarlanması gerekmekte(varsayılan ayar FALSE’dur) ve ilgili tablo veya şemaya karşı işyükünün tekrar çalıştırılması gerekmektedir:<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">alter session set optimizer_use_pending_statistics = TRUE;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Sorgu geliştirici, SQL komutlarını derlerken, yayınlanan istatistikler yerine, askıda tutulan istatistikleri kullanacaktır. Eğer askıda tutulan istatistikler geçerliliğini muhafaza ediyorsa, bu durumda aşağıdaki komut çalıştırılarak bunlar <i>“public”</i> erişime açılabilir:<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">Exec dbms_stats.publish_pending_stats(null, null);<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Bununla beraber, aşağıdaki gibi belirli nesneler içinde askıda tutulan istatistikler yayınlanabilir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">Exec dbms_stats.publish_pending_stats('HR','EMPLOYEES');<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Eğer askıda tutulan istatistiklerin yayınlanması istenmiyorsa, aşağıdaki komut ile bunlar sistemden silinebilir:<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">Exec dbms_stats.delete_pending_stats('HR','EMPLOYEES');<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Askıda tutulan istatistikler DBMS_STATS.EXPORT_PENDING_STATS fonksiyonu yardımıyla export edilebilir. Test ortamına export edilen bu istatistikler ile yeni istatistiklere karşı tam işyükü çalıştırılmasına imkan sağlanabilir.<o:p></o:p></span></div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-17267051304645185502012-01-06T09:45:00.000+02:002012-01-06T09:45:00.466+02:00ASMLIB sürücüsünün “update-driver” komutu ile güncellenmesi<div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">ASMLib sürücüsünün bir ASM instance ını yönetmek için kullanıp kullanmamak hala tartışmalı bir konudur, ancak Oracle’ın bu konuda ısrarlı tavsiyeleri sonucunda Linux platformlarda kullanmayı şahsen ben tercih etmekteyim. Bu noktada, linux kernel güncellemesi öncesi veya sonrasında ASMLib sürücüsününde güncellenmesi gerekmektedir, aksi durumda sürücü uyumsuzluğu sebebiyle ASMLib modülü sisteme yüklenemez. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Bilindiği üzere ASMLib sürücüsü, kernel bağımlıdır ve aynı kernel versiyonunu ile eşleşmesi gerekmektedir. Bu noktada, Oracle web sitesinden ASMLib sürücüsünün güncel versiyonu bulunabilir, siteden ücretsiz olarak indirilip, Linux sisteme kurulabilir. Oracleasm-support 2.1.0 sürümünden itibaren <i>“update-driver”</i> gömülü komutu kullanılarak, hem zamandan tasarruf sağlanabilir, hemde ASMLib sürücüsü güncelleme işlemi basitleştirilebilir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Peki bu komut nasıl çalışmaktadır?Örnek olarak, kernel sürücüsünü 2.6.18-194.8.1.0.1.el5 x86_64 versiyonuna yükselttik, ancak ASMLib sürücüsü hala eski versiyonda. Neticede, açılış sonrasında ASMLib modülü yüklenirken aşağıdaki hata mesajı alınacak ve modul başlatılamayacaktır.</span></div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";"><o:p></o:p></span></div><a name='more'></a><span style="font-family: 'Courier New';"><br />
</span><div><span style="font-family: 'Courier New';">[root@linux1 ~]# /usr/sbin/oracleasm init</span><br />
<div class="MsoNoSpacing"><span style="font-family: "Courier New";">Creating /dev/oracleasm mount point: /dev/oracleasm<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">Loading module "oracleasm": failed<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">Unable to load module "oracleasm"<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Oracle web sitesinden ilgili kernel versiyonu ile eşleşen ASMLib sürücüsü indirildikten sonra, yeni ASMLib sürücüsü sadece <i>“oracleasm update-driver”</i> komutu ile aşağıdaki gibi yüklenebilir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">[root@linux1 ~]# /usr/sbin/oracleasm update-driver<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">Kernel: 2.6.18-194.8.1.0.1.el5 x86_64<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">Driver name: oracleasm-2.6.18-194.8.1.0.1.el5<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">Fetching Obsoletes list for channel: el5_x86_64_latest...<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">########################################<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">Fetching rpm headers...<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">########################################<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">Name Version Rel<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">----------------------------------------------------------<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">oracleasm-2.6.18-194.8.1.0.1.el5 2.0.5 1.el5 x86_64<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">Testing package set / solving RPM inter-dependencies...<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">########################################<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">oracleasm-2.6.18-194.8.1.0. ########################## Done.<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">Preparing ########################################### [100%]<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">Installing...<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">1:oracleasm-2.6.18-194.8.########################################### [100%]<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Sürücü kurulumundan sonra ASMLib aşağıdaki gibi sorunsuzca yüklenip çalıştırılacaktır.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">[root@linux1 ~]# /usr/sbin/oracleasm init<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">Loading module "oracleasm": oracleasm<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">Mounting ASMlib driver filesystem: /dev/oracleasm<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">[root@linux1 var]# /etc/init.d/oracleasm start<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">Initializing the Oracle ASMLib driver: [ OK ]<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">Scanning the system for Oracle ASMLib disks: [ OK ]<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">[root@db1 var]# /etc/init.d/oracleasm listdisks<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: "Courier New";">DATADISK1<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: "Arial","sans-serif";">Bu gömülü komuta aşağıdaki takılar ilave edilerekte çalıştırılabilir;<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><i><span style="font-family: "Arial","sans-serif";">-d</span></i><span style="font-family: "Arial","sans-serif";"> takısı ile sadece sürücüyü indirmeye izin verilir.<o:p></o:p></span></div><div class="MsoNoSpacing"><i><span style="font-family: "Arial","sans-serif";">-n</span></i><span style="font-family: "Arial","sans-serif";"> takısı ile hiçbir işlem yapmadan hangi sürücü sürümünün güncellenmesi gerektiğini belirler.<o:p></o:p></span></div></div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com0tag:blogger.com,1999:blog-2000514949047523591.post-46387968123230169992012-01-04T15:37:00.001+02:002012-01-04T16:51:32.750+02:00Sorgu geliştirici ile ilgili genel kavramlar<div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Sorgu geliştirici(query optimizer) ile ilgili kullanılan temel kavramlar aşağıda yer almaktadır.</span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><span style="font-family: Arial, sans-serif;">Değerlendirme(Estimation)<o:p></o:p></span></b></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Değerlendirici, verilen bir yürütme planının tüm maliyetini saptamaktadır. Bu hedefe ulaşmak için değerlendirici 3 değişik tipte ölçü üretmektedir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l2 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><u><span style="font-family: Arial, sans-serif;">Seçicilik(Selectivity)</span></u><span style="font-family: Arial, sans-serif;">: Bu ölçü, satır setinden satırların bir bölümünü temsil etmektedir. Seçicilik, sorgudaki city=’Pekin’ gibi bir yükleme veya (city=’’Pekin’ AND product=’tomato’) gibi yüklem kombinasyonlarına bağlıdır. <o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l2 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><u><span style="font-family: Arial, sans-serif;">Önem(Cardinality)</span></u><span style="font-family: Arial, sans-serif;">: Bu ölçü, satır setindeki satır sayısını temsil etmektedir.<o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l2 level1 lfo1; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><u><span style="font-family: Arial, sans-serif;">Maliyet(Cost)</span></u><span style="font-family: Arial, sans-serif;">: Bu ölçü, kullanılan kaynağın veya işin birimini temsil etmektedir.Sorgu geliştirici, iş birimi olarak disk I/O sunu, CPU kullanımını ve bellek kullanımını kullanır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Eğer istatistikler uygunsa, değerlendirici bu ölçümleri birbiriyle kıyaslamak için kullanır. İstatistikler, ölçümlerin doğruluk derecesini artırmaktadır. </span></div><a name='more'></a><o:p></o:p><br />
<div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Bir yüklem, bir satır setinden belirli sayıda satırı filtreler. Böylece, yüklem seçiciliği </span><span style="font-family: Arial, sans-serif;"> </span><span style="font-family: Arial, sans-serif;">ile yüklem testinden ne kadar satırın geçeceğini belirlenir. Seçicilik aralığı 0.0 dan 1.0 a kadardır. </span><span style="font-family: Arial, sans-serif;"> </span><span style="font-family: Arial, sans-serif;">0.0 değerinde bir seçicilik, satır setinden hiçbir satırın seçilmediğini gösterirken, 1.0 değeri ise tüm satırların seçileceği anlamına gelmektedir. Bir yüklem, 0.0 değerine yakınken daha çok seçici yaklaşımı gösterirken, 1,0 değerine yaklaştığında ise daha az seçici yaklaşımı göstermektedir. </span><span style="font-family: Arial, sans-serif;"> </span><span style="font-family: Arial, sans-serif;">Geliştirici, seçiciliği istatistiklerin uygun olup olmamasına bağlı olarak değerlendirmektedir.</span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo2; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><b><i><span style="font-family: Arial, sans-serif;">İstatistik mevcut değilse<o:p></o:p></span></i></b></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">OPTIMIZER_DYNAMIC_SAMPLING başlangıç parametresi değerine dayanarak, geliştirici, ya dinamik örneklemeyi kullanır ya da dahili varsayılan değeri kullanır. Veritabanı, yüklem tipine bağlı olarak değişik dahili varsayılanları kullanmaktadır. Örneğin; (city=’Pekin’) eşitlik yüklemi için dahili varsayılan değeri, (city>’Pekin’) gibi aralık yüklemine nazaran daha düşüktür, çünkü eşitlik yükleminin daha küçük bir satır bölümünü döndüreceği beklentisi vardır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo2; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><b><i><span style="font-family: Arial, sans-serif;">İstatistik mevcutsa<o:p></o:p></span></i></b></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">İstatistikler mevcutsa, değerlendirici bunları seçicilik değerlendirmesinde kullanmaktadır. 15 farklı şehir ismi olduğunu farzedelim; city=’Pekin’ eşitlik yüklemi için seçicilik, şehir isminin n sayıdaki farklı değerine karşılık gelmektedir, ki benim örneğimde sorgu 15 farklı değerden birine ait satırları seçtiğinden dolayı seçicilik değeride 1/15=0.06 olmaktadır.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Eğer “city” kolonu için histogram mevcutsa, bu durumda değerlendirici farklı değer sayısı yerine, histogramı kullanacaktır. Histogram, bir kolon için farklı değerlerin dağılımını yakaladığından dolayı, özellikle çarpık veriler içeren kolonlar için çok daha iyi seçicilik değerlendirmesi yapabilmektedir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo2; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><i><span style="font-family: Arial, sans-serif;">Önem(Cardinality):</span></i><span style="font-family: Arial, sans-serif;"> Cardinality, bir satır seti içindeki satır sayısını temsil etmektedir. Bu bağlamda, satır seti bir temel tablo veya görünüm olabileceği gibi, bir birleşme yada GROUP BY operatörü sonucuda olabilmektedir. <o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l0 level1 lfo2; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><i><span style="font-family: Arial, sans-serif;">Maliyet(Cost):</span></i><span style="font-family: Arial, sans-serif;"> Maliyet, bir operasyonda kullanılan kaynak veya iş birimini temsil etmektedir. Sorgu geliştirici, iş birimi olarak disk I/O sunu, CPU kullanımını ve bellek kullanımını kullanır. Operasyon, bir tablonun taranması, indeks kullanılarak tablodan satırlara erişilmesi, iki tablonun birleştirilmesi veya bir satır setine sort yapılması olabilmektedir. Maliyet, veritabanı sorguyu yürütürken ve sonucu oluştururken uğraması beklenen iş birimi sayısıdır. <o:p></o:p></span></div><div class="MsoNoSpacing" style="margin-left: 36.0pt;"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Erişim yolu(access path) temel tablodan veri almak için gereken iş birimi sayısını belirlemektedir. Erişim yolu, tablo taraması, hızlı tam indeks taraması(fast full index scan), veya bir indeks taraması olabilir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo3; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><i><span style="font-family: Arial, sans-serif;">Tablo taraması veya hızlı tam indeks taraması<o:p></o:p></span></i></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Bir tablo taraması veya hızlı tam indeks taraması esnasında, diskten tekli I/O yapısında birçok blok okunmaktadır. Bu sebeple, tarama maliyeti taranacak blok sayısına ve çoklu okumanın miktar değerine bağlı olmaktadır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing" style="margin-left: 36.0pt; mso-list: l1 level1 lfo3; text-indent: -18.0pt;"><span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><i><span style="font-family: Arial, sans-serif;">İndeks taraması<o:p></o:p></span></i></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">İndeks tarama maliyeti, B-tree içindeki seviyelere, taranacak indeks yaprak(leaf) blok sayısına ve indeks anahtarında ROWID kullanılarak alınıp getirilen satır sayısına bağlı olmaktadır. Bu arada, ROWID kullanarak alınıp getirilen satırların maliyetide indeks kümeleme faktörüne(index clustering factor) bağlı olmaktadır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Birleşme maliyeti, birleşecek iki satır setinin bireysel erişim maliyeti kombinasyonunu ile birleşme operasyonu maliyetini temsil etmektedir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><span style="font-family: Arial, sans-serif;">Plan Oluşturma<o:p></o:p></span></b></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Plan oluşturucu, farklı erişim yolları, birleşme metotları ve birleşme sıraları denemeleriyle bir sorgu bloğu için çeşitli planlar araştırmaktadır. Aynı sorgu sonucunu oluşturmak için kullanılmak üzere değişik erişim yolları, birleşme metotları ve birleşme sıralamasıyla ilgili çeşitli kombinasyonlar kullanılarak pek çok plan uygun olmaktadır. Plan oluşturucunun amacı, en düşük maliyete sahip planı seçmektir. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><u><span style="font-family: Arial, sans-serif;">Birleşme sırası</span></u></b><b><span style="font-family: Arial, sans-serif;">:</span></b><span style="font-family: Arial, sans-serif;"> Birleşme sırası, erişilen ve birlite birleştirilen tablolar gibi sırasıyla farklı birleştirme öğeleridir. Tablo1, Tablo2 ve Tablo3 ün birleştiğini varsayalım. Birleşme sırası muhtemelen aşağıdaki gibi olacaktır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">1. Veritabanı önce Tablo1 e erişir.<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">2. Veritabanı Tablo2 ye erişir ve kendi satırlarını Tablo1 ile birleştirir.<o:p></o:p></span></div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">3. Veritabanı Tablo3 e erişir ve Tablo1 ile Tablo2 arasında birleşme sonucunu kendi satırları ile birleştirir.<o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><u><span style="font-family: Arial, sans-serif;">Sorgu alt planları:</span></u></b><span style="font-family: Arial, sans-serif;"> Geliştirici, herbir içiçe(nested) alt sorguyu veya birleştirilmemiş (unmerged) görünümü ayrılmış bir sorgu bloğu ile temsil eder ve bir alt plan oluşturur. Veritabanı, sorgu bloklarını aşağıdan yukarıya ayrı ayrı en iyi duruma getirir. Böylece, veritabanı ilk olarak en içteki sorgu bloğunu en iyi duruma getirmekte ve bunun için bir alt plan oluşturmakta, ardındanda en sonunda bütün sorguyu temsil eden dış sorgu bloğunu oluşturmaktadır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><span style="font-family: Arial, sans-serif;">Bir sorgu bloğu için muhtemel plan sayısı FROM kısmındaki birleşme miktarı sayısı ile orantılıdır. Bu sayı birleşme miktarı sayısı ile katlanarak artmaktadır. Örneğin; beş tablonun birleşmesi için muhtemelen planlar, iki tablonun birleşmesi için muhtemel planlardan belirgin şekilde daha yüksek olacaktır. <o:p></o:p></span></div><div class="MsoNoSpacing"><br />
</div><div class="MsoNoSpacing"><b><u><span style="font-family: Arial, sans-serif;">Plan seçiminde kestirme yol:</span></u></b><span style="font-family: Arial, sans-serif;"> Plan oluşturucu, en düşük maliyetli planı ararken denediği planların sayısını azaltmak için dahili bir kestirme yol kullanmaktadır. Kestirme yol, mevcuttaki en iyi planın maliyetine dayanmaktadır. Eğer mevcuttaki en iyi maliyet büyükse, bu durumda plan oluşturucu en düşük maliyetli planı bulmak için alternatif planlar araştırır. Eğer mevcuttaki en iyi maliyet küçükse, daha fazla plan iyileştirme anlamlı olmayacağından plan oluşturucu bu hızlı aramayı sonlandırır. Eğer plan oluşturucu optimal seviyeye yakın maliyette plan oluşturan bir başlangıç birleştirmesi ile başlarsa, kestirme yol metodu çok iyi çalışır. Çünkü iyi bir başlangıç birleştirmesi bulmak oldukça zordur.<o:p></o:p></span></div>Ugur Inalhttp://www.blogger.com/profile/02025842456058582213noreply@blogger.com2