25/8/09

Oracle | Pinning de objetos

Performance - Pinning de Objetos

En Oracle a partir de la version 10g no se utiliza el pinning de objetos, la administracion de memoria compartida se hace en forma automatica
En Oracle los objetos de uso frecuente se suben a la Shared Pool que es parte de la SGA.
Si el Shared Pool no tiene espacio nos dara el error ORA-4031: Unable to allocate bytes of shared memory (no se pueden alocar bytes de la memoria compartida)

Los objetos se pueden mantener en la Shared Pool utilizando en package dbms_shared_pool que esta definido en el archivo dbmspool.sql

Ejemplo
execute dbms_shared_pool.keep('owner.object');

Para ver una lista de todos los objetos que se encuentran en la Shared Pool se utiliza la vista v$db_object_cache

select * from v$db_object_cache

select owner,name,type,sharable_mem from v$db_object_cache where kept='YES';


Para indentificar los objetos que mas se han cargado y cuales son los posibles objetos que deberian estar en la Shared Pool

select substr(owner,1,10)||'.'||substr(name,1,35) "ObjectName", type, sharable_mem,loads, executions, kept from v$db_object_cache where type in ('TRIGGER','PROCEDURE','PACKAGE BODY','PACKAGE') and executions >0 order by executions desc,loads desc,sharable_mem desc



select owner,name,type,sharable_mem from v$db_object_cache where kept='YES' order by owner desc



select substr(owner,1,10)||'.'||substr(name,1,35) "ObjectName", type, sharable_mem,loads, executions, kept
from v$db_object_cache
where type in ('TRIGGER','PROCEDURE','PACKAGE BODY','PACKAGE') and executions >0 order by executions desc,loads desc,sharable_mem desc


select * from sys.x$ksmlru;



SELECT owner,namespace,type,name,sharable_mem,loads,executions,locks,pins,kept
FROM v$db_object_cache
WHERE
type NOT IN ('NOT LOADED','NON-EXISTENT','VIEW','TABLE',
'SEQUENCE','INVALID TYPE')
AND loads>1 AND executions>loads AND executions>100 AND kept='NO'
ORDER BY owner,namespace,type,executions desc;


DBMS_SHARED_POOL

Para prevenir q los objectos sean removidos de la SHARED MEMMORY por el normal mecanismo (LRU)

- Se utiliza cuando grandes objetos como los paquetes STANDARD y DIUTIL
- Se utiliza para trigger que se utilizan constantemente. Se debe mantener los triggers mas utilizados en la Sahred Pool
- Soporta secuencias. Mantener las secuencias en la Shared Pool previene perder los numeros de secuencuias

Uso de DBMS_SHARED_POOL

1. decidir que package o cursos quedara en memoria (pin)
2. levantar la DB
3. llamar a DBMS_SHARED_POOL.KEEP para hacerle el PIN a los objetos


Subprogramas de DBMS_SHARED_POOL

SIZES - Procedure - muestra los objetos en la shared pool mayores a un tamaño especifico en kilobytes

DBMS_SHARED_POOL.SIZES ( minsize NUMBER);



DBMS_SHARED_POOL.KEEP(nombre,flag) - nombre: nombre del objeto, flag: P:para nombre de paquete(default), T:nombre del tipo, R: nombre del trigger, Q:nombre de la secuencia

DBMS_SHARED_POOL.UNKEEP(nombre,flag) - Saca los objetos de la shared memmory, los parametros son los mismos q para KEEP

DBMS_SHARED_POOL.ABORTED_REQUEST_THRESHOLD (threshold_size NUMBER) - Sets the aborted request threshold for the shared pool (bytes, range: 5000 to 2gb)

No hay comentarios:

Publicar un comentario