mercoledì 12 febbraio 2014

Hard parse e Soft parse

Quando un codice applicativo viene eseguito, Oracle verifica se questi sia già stato usato precedentemente verificandone la presenza nella library cache. Se esiste e può essere condiviso allora Oracle riusa il codice già esistente. Questo approccio è detto soft parse o library cache hit.
Se, al contrario, il codice non c'è, allora il database deve costruire un nuova versione eseguibile di tale codice. Questo approccio è detto hard parse o library cache miss.

Il library cache miss può verificarsi sia in fase di analisi che in fase di esecuzione. 

Quando un'applicazione effettua una parse call per uno statement, se la parsed representation dello statement non esiste nella library cache, allora Oracle analizza il nuovo statement e memorizza la sua parsed form nella shared pool. 

E' possibile ridurre il library cache miss sulle parse call assicurandosi che tutti gli statement SQL siano presenti nella shared pool, ogni volta che sia possibile.

Se un'applicazione esegue una execute call di un statement SQL e se la porzione eseguibile dello statement, costruita precedentemente, è stata deallocata dalla library cache per fare spazio a un altro statement, allora Oracle rianalizza lo statement implicitamente creando una nuova shared SQL area e quindi lo esegue.

E' possibile ridurre il library cache miss sulle execution calls allocando più memoria alla library cache.

L'hard parse consuma molte più risorse del soft parse.

Le risorse richieste per un soft parse sono:
CPU, library cache latch gets.

Le risorse richieste per un soft parse sono:
CPU, library cache latch gets, shared pool latch gets.

Schematicamente, si può così sintetizzare quanto detto:
1) parsing statement (controllo sintassi e semantica)
2) hashing statement (restituisce un hash value)
3) controllo esistenza hash value in library cash
..3.1) se l'hash value esiste allora Oracle verifica se lo statement in library cash è identico a quello in analisi
......3.1.1) i due statement sono identici:
soft parse: esegui lo statement mediante il piano di esecuzione già associato.
......3.1.2) i due statement non sono identici:
hard parse: genera alberatura e piano di esecuzione associato allo statement
..3.2) se l'hash value non esiste
hard parse: genera alberatura e piano di esecuzione associato allo statement
..3.3) esegui statement mediante piano di esecuzione associato.

Nessun commento:

Posta un commento