SQL Çalışma Planı (execution plan)
Çalışma Planının (Execution Plan) Alınması
SET AUTOTRACE ON ; Sorgu çıktısı , çalışma planı (execution plan) ve istatistik bilgileri getiri
SET AUTOTRACE ON EXP ; Çalışma planını getirir sorgu çıktısını getirmez.
SET AUTOTRACE ON STAT ; Sadece istatistik bilgileri getiri.
SET AUTOTRACE TRACE ; çalışma planı ve istatistik
set autotrace traceonly explain ; Sadece çalışma planını getirir.
"SET AUTOTRACE ON" bunu çalıştırabilmek için aşağıdaki scriptin çalıştırılması gerekebilir (sys kullanıcısı ile).
|
1 2 3 4 5 6 |
@/u01/app/oracle/product/10.2.0/db_1/sqlplus/admin/plustrce.sql grant plustrace to omar; as username omar [crayon-6906db6eeba7b465345872]@/u01/app/oracle/product/10.2.0/db_1/rdbms/admin/utlxplan.sql |
Halen aşağıdaki hatayı alıyorsanız haklar ile ilgilidir sorun olabilir.geçici olarak dba hakkı verilip geri alınabilir.
|
1 2 |
SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled SP2-0611: Error enabling STATISTICS report |
Örnek;
|
1 2 3 4 5 6 7 8 9 10 11 12 |
set timing on; set autotrace traceonly explain; select * from omar.emp; Elapsed: 00:00:00.02 Execution Plan ---------------------------------------------------------- Plan hash value: 3956160932 -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 30000 | 761K| 55 (0)| 00:00:01 | | 1 | TABLE ACCESS FULL| EMP | 30000 | 761K| 55 (0)| 00:00:01 | |
Sorguda veya indexlerde değişiklik yapıldıktan sonra Shared pool ve buffer cache boşaltılarak yapılan değişikliklerin etkisi görülebilir.
|
1 2 |
alter system flush shared_pool; alter system flush buffer_cache;(10G ile geldi, SGA'nın içindeki buffer cache bosaltır) |
Library cache in efektif kullanılması için bind variable kullanılması gerekir.
bind variable kullanılmamış sorgu
|
1 2 |
select count(*) from emp where personel_id = 5 |
bind variable kullanılmış sorgu
|
1 2 |
select count(*) from emp where personel_id = :x1 |
sqlplus ta bind variable kullanmak için aşağıdaki syntax kullanılır.
|
1 2 3 4 |
variable x1 number; variable y1 varchar2; execute :x1 := 5; execute :y1 := istanbul; |
