SQL Processing

SQL Processing işlemi parsing, optimization, row source generation ve execution adımlarından oluşur. Sql ifadesine göre bazı adımlar atlanabilir.



SQL Parsing:
Bir sql ifadesi çalıştırılacağı zaman veritabanı üzerinde parse call talebi ile vertabanı üzerinde cursor açılır. Bu cursor session bazlı açılır ve private SQL area üzerinde tutulur. Cursor ve private SQL area program global area (PGA) içindedir. Parse call işlemi 3 aşamadan oluşur. Syntax check, semantic check, shared pool check
Syntax Check adımında yazım kontrolü yapılır. örneğin from yerine form yazılan bir sorgu syntax hatası verecektir. Semantic check adımında mantıksal kontrol yapılır. örneğin yazılan tablo veya kolonun olmaması semantic hata verecektir. Her sql ifadesi için bir execution plan çıkarılır ve hash değeri üretilir. V$SQL.SQL_ID dictionary view üzerinde görülebilir. Aynı sql ifadesi için farklı planlarlar çıkarılabilir. Çıkarılan sql planları shared pool area üzerinde saklanır. Shared pool check adımında sql ifadesi için daha önce bir plan çıkarılmış mı bunun kontrolü yapılır. Eğer daha önce bir plan çıkarılmamışsa bu aşamaların hepsinin yapılmasına hard parse sadece varolan planın getirilmesine soft parse denir.

SQL Optimization: Var olan planlar içinden en iyisinin seçilmesine denir. Bir dml ifadesi için en az bir tane plan çıkarılmalıdır. DML alt sorugusu içermeyen DDL ifadeleri için optimization yapılmaz.
SQL Row Source Generation: Row source generation optimizer tarafından optimum execution'ı çıkarmak için kullanılan bir yazılımdır. SQL engine tarafından adım adım aşamalarla veri getirilir. Her adımda satır kümesi döner ve diğer adım için kullanılır. Her adımda döner bu satır kümesine row source denir. Row source bir tablo, view veya joinlenmiş veri grubu olabilir. Row source generator çıkarılan row sourcelardan oluşan execution plana row source tree denir. Row source tree içinde tablo sıralaması, adı geçen tablolar için erişim methodu(table access by index, table access full), join işlemleri için join methodu(hash join), filter sort veya aggregate gibi veri operasyon bilgileri içerir.

Aşağıda örnek bir execution planı yer almaktadır. Soyadı A ile başlayan tüm çalışanların last_name, job_title, department_name kolonlarının getirildiği bir select sorgusu inceleyelim.



SQL Execution: Row source generator tarafından üretilen tree üzerindeki her row source için SQL engine çalışır. Bu işlem DML işlemleri için zorunlu bir adımdır. Row source tree üzerindeki plan tersten okunur. Bottom up yaklaşımına göre execute edilir. SQL engine tarafından işletilen siyah kutu adımlarında fiziksel veri okunur. 6. adımda departments tablosundaki tüm satırlar full table scan yapılır. 5. adımda jobs tablosundaki tüm satırlar için full table scan yapılır. 4. adımda emp_name_ix indexi üzerinde A ile başlayan değerler için arama yapılır ve bulunan değerler için rowid döner. Örneğin Abdullah için AAAPzRAAFAAAABSAAe rowid değeri dönsün. Her rowid için employees tablosunda index üzerinden table access yapılır. SQL engine tarafından işletilen beyaz kutu adımlarında operasyonel işlemler yapılır. 2. adımda 3. ve 5. adımdaki row source içindeki her row için eşleşen kayıtlar 1. adım için döndürülür. 1. adımda 2. adımdaki row source ile 6. adımdaki row source içindeki rowlardan eşleşen row seti sonuç olarak döndürülür.

https://docs.oracle.com/database/121/TGSQL/tgsql_sqlproc.htm#TGSQL189
Share:
spacer

Hiç yorum yok:

Yorum Gönder