Tervek
Tervmagyarázó eszköz
EXPLAIN PLAN FOR <query / dll>- Elmenti a tervet a
plan_table-be- sorforrások + műveletek
plan_tablenézete, vagy külső eszköz teszi olvashatóvá
- Elmenti a tervet a
??? title="Jesus christ, ez a muki tényleg manuál nézetbe leírt egy tervet"
CREATE TABLE PLAN_TABLE(
statement_id varchar(30),
options varchar(30),
object_name varchar(30),
parent_id numeric,
cost numeric,
operation varchar(30),
object_owner varchar(30),
id numeric,
position numeric,
bytes numeric,
);
~~~sql
CREATE OR REPLACE VIEW PLANS(STATEMENT_ID, PLAN, POSITION) AS
SELECT statement_id, rpad('>', 2*level, '.') ||
operation ||
decode(options, NULL, '', '(') ||
nvl(options, ' ') ||
decode(options, NULL, '', ')') ||
decode(object_owner, NULL, '', object_owner || '.') ||
object_name plan,
position
FROM PLAN_TABLE
START WITH id=0
CONNECT BY PRIOR id=parent_id
AND PRIOR nvl(statement_id, 'NULL') = nvl(statement_id, 'NULL')
~~~
output példa:
~~~txt
>Filter
>.....NL
>..........TA-full
>..........TA-rowid
>...............index Uscan
>.....TA-full
~~~
RBO heurisztikák
Elérhető indexek rangsorolása:
- Egyenlőség egy mezős egyedi indexen
- Egyenlőség láncolt egyedi indexen
- Egyenlőség láncolt indexen
- Egyenlőség egy mezős indexen
- Korlátos intervallum keresés indexben (
like,between,leading-part,...) - Nem korlátos intervallum keresés indexen (
<,>=)
Azon felül hasraütés
CBO költségszámítás
Statisztikák különböző szinteken
- Tábla
num_rows,blocks,empty_blocks,avg_space
- Mező
num_values,low_value,high_value,num_nulls
- Index
distinct-keys,Blevel,avg_leaf_blocks_per_key,avg_data_blocks_per_key,leaf_blocks
Az egyes indexek kiválasztóképességének számításához használjuk
- Kiválasztóképesség = sorok hány %-át adja vissza
FTS-t is figyelembe vesszük itt
CBO - csomósodási tényező
Index szintű statisztika
- Mennyire jól rendezettek a sorok az indexelt értékhez képest?
- Átlagos blokkszám, hogy elérjünk egyetlen értéket
1asszondja, hogy az intervallumkeresés olcsó<táblasorok száma>azt jelenti, hogy drága az intervallumkeresés
- Több elérhető intervallumkeresés rangsorolására
Nyomkövető fájlok
- Tervmagyarázat - betekintés végrehajtás előtt
- Nyomkövetés - betekintés végrehajtás közben
- Felhasznált CPU idő
- Eltelt idő
- Fizikai blokk I/O száma
- Gyorsítótárazott blokk I/O száma
- Sorforrásonként feldolgozott sorok száma
- A munkamenetet nyomkövető módra kell állítani
ALTER SESSION SET sql_trace=true;EXEC dbms_system.set_sql_state_in_session(sid, s#, T/F);
- A nyomkövető fájl az adatbázisszerveren generálódik
- TKPROF eszközzel kell formázni
TKPROF <nyomkövető fájl> <tkp fájl> <user>/<pw>
- SQL utasításonként 2 szakasz
- TKPROF eszközzel kell formázni
call count cpu elapsed disk query current rows
------- ----- ------ -------- ---- ----- ------- ----
Parse 1 0.06 0.07 0 0 0 0
Execute 1 0.01 0.01 0 0 0 0
Fetch 1 0.11 0.13 0 37 2 2
------- ----- ------ -------- ---- ----- ------- ----
total 3 0.18 0.21 0 37 2 2
Tippek
- Kényszerítik az optimalizálót, hogy egy konkrét opció mellett döntsön
- Beágyazott megjegyzéssel valósítjuk meg
SELECT /*+<tipp>*/ ...
FROM ...
WHERE ...;
UPDATE /*+<tipp>*/ ...
WHERE ...;
DELETE /*+<tipp>*/ ...
WHERE ...;
INSERT (Id.SELECT)
Gyakori tippek
full (<tab>)index (<tab><ind>)index_asc(<tab><ind>)index_desc(<tab><ind>)ordereduse_nl(<tab><tab>)use_merge(<tab><tab>)use_hash(<tab><tab>)leading(<tab>)first_rows, all_rows, rule
Analyze
- Statisztikát időnként generálni kell
pl
ANALYZE TABLE emp SETIMATE STATISTICS SAMPLE 30 PERCENT;
Adattárház jellemzők
- Hagyományos
*lekérdezés - Bittérkép indexek
- Bittérkép egyesítése, átalakítása
rowid-ra - Egyetlen táblás lekérdezés
- Bittérkép egyesítése, átalakítása
*lekérdezés- Több táblás
The Tuning way
- Képes beolvasni tervet
- Képes átírni egy tervet 3GL programmá
- Ismerjük a sorforrás műveleteinket
- Képes beolvasni SQL-t
- Képes átalakítani az SQL-t üzleti lekérdezéssé
- Ismerjük az adatmodellünket
- Képes megítélni a kimenetelt
- Ismerjük az üzleti szabályokat / adatstatisztikákat
- Jobban, mint CBO
- Ismerjük az üzleti szabályokat / adatstatisztikákat
- Szakértők
- Optimalizáljuk az SQL-t már annak szerkesztésekor