Você está na página 1de 8

Compartir

Informar sobre mal uso

Siguiente blog

Crear un blog

Acceder

Bases de Datos Oracle


Con este espacio pretendo crear un rincn de informacin relacionda con las bases de datos Oracle, sus funcionalidades, caractersticas, noticias.... etc. Interar hacer pequeos artculos con ejemplos demostrativos para que resulte ms fcil leerlos. No dudis en mandar vuestros comentarios, crticas, aclaraciones... etc.

Informacin del Autor


Juan Lorenzo Arellano Llevo ms de diez aos trabajando como DBA Oracle en diferentes compaas y desde el 2004 lo hago de forma freelance a travs de una sociedad creada por m, Infor Consult Soluciones (http://www.inforconsult.es). Si tienes cualquier duda, comentario o propuesta que hacerme, no lo dudes. Ver todo mi perfil

Archivo del blog


2011 (1) 2009 (2) 2008 (2) 2007 (2) noviembre (2) Gestin automtica de la memoria PGA La papelera de reciclaje de Oracle10g: Recycle Bin...

viernes 23 de noviembre de 2007

Gestin automtica de la memoria PGA

Qu es la PGA?
Las siglas provienen de Program/Private Global Area, y es la memoria privada de cada proceso servidor. En esta memoria cada proceso almacena informacin que slo es necesaria para su propio

funcionamiento como por ejemplo sus variables globales, el estado actual de cada cursor (SQL) que se ejecuta... etc. La PGA se compone de: rea SQL privada: cada SQL que se ejecuta necesita de este espacio para poder llevar el control de las operaciones propias de la sentencia. Se asigna cuando se abre el cursor y se libera completamente cuando se cierra. Esta parte de memoria se subdivide en dos: a) area persistente: perdura durante toda la vida del cursor. Guarda las bind variables adems de otras cosas; b) area en tiempo de ejecucin: se libera cuando finaliza la ejecucin de la sentencia SQL (aunque no se haya cerrado el cursor ). Constituyen las reas de trabajo (working areas) que se explican ms adelante. El nmero mximo de cursores, y por tanto, el nmero mximo de reas SQL privadas, que un usuario puede tener abiertos al mismo tiempo se controla con el parmetro OPEN_CURSORS. Tambin hay que tener en cuenta que esta rea SQL privada se almacena en la PGA si la Instancia est configurada como servidores dedicados (dedicated servers). En caso de servidors compartidos (shared servers) se almacena en la SGA. Memoria de las sesiones: guarda informacin relativa a la sesin como el login, variables de sesin... etc. En servidores compartidos (shared servers) este rea pasa a ser pblica ya que diferentes usuarios comparten los mismos procesos servidores.

Qu son las reas de trabajo (working areas)?


Las rea de trabajo (working areas) son el espacio usado por el proceso servidor para realizar ordenaciones y clasificaciones como los ORDER BY, GROUP BY o HASH JOIN. Esta rea es la de mayor tamao y forma parte del rea en tiempo de ejecucin. Su tamao es determinante para obtener buenos tiempos de respuesta en operaciones de este tipo, ya que si el espacio se queda pequeo para realizar estas tareas es necesario liberar espacio usando el tablespace temporal del usuario. sta actividad de swapping afecta drsticamente al rendimiento y recibe el nombre de "extra pass".

Dnde se almacena la PGA?

La PGA se almacena en la memoria del servidor pero fuera de la SGA. Por tanto, para dimensionar ambas reas hay que tener en cuenta que la suma de las dos no supere los lmites especficos del servidor y la plataforma (tamao mximo memoria RAM, 2 GB en Windows sin /3GB, 3 GB en Windows con /3GB... etc.).

El tamao de la PGA es configurable?


S, pero nicamente es configurable el tamao de las reas de trabajo. Desde Oracle9i el DBA puede fijar el tamao mximo del cnjunto de todas las PGAs de la Instancia a travs del parmetro PGA_AGGREGATE_TARGET. De esta forma, Oracle dinmicamente gestiona el tamao de cada rea de trabajo para que la suma de todas las PGAs (no de todas las reas, que es un parte de la PGA como ya se ha indicado) no exceda del lmite impuesto. En versiones anteriores la forma de controlar el tamao de cada rea de trabajo era a travs de los parmetros SORT_AREA_SIZE, HASH_AREA_SIZE, BITMAP_MERGE_AREA_SIZE y CREATE_BITMAP_AREA_SIZE. Para que la Instancia tenga el cuenta el parmetro PGA_AGGREGATE_TARGET, el parmetro WORKAREA_SIZE_POLICY se debe asignar a AUTO (por omisin). Con MANUAL, se indica que se trabaja de la forma anterior y se fija cada parmetro *_AREA_SIZE por separado.

Cundo se crea la PGA?


La crea el Listener durante la creacin del proceso servidor. Si esta memoria no puede ser asignada o reservada la creacin del proceso servidor falla y el Listener devuelve un ORA-12500: TNS:listener failed to start a dedicated server process. Igualmente, si durante la ejecucin de alguna sentencia es necesario incrementar el tamao de la PGA y el sistema operativo no tiene ms memoria para darle se devuelve un error indicndolo.

Cundo se destruye la PGA?


Al cerrar el proceso servidor su PGA asociada se libera y se devuelve al sistema operativo el espacio reservado. El proceso servidor se cierra cuando el usuario ejecuta EXIT o DISCONNECT, lanza un Ctrl+C, se pierde la comunicacin con el servidor, se produce un ORA-600 que desconecta la sesin, el DBA lanza un KILL SESSION, etc.

Cunto ocupa cada PGA?


En cada versin de Oracle, e incluso en cada release, el tamao mnimo cambia. No obstante, como el tamao es cambiante en funcin del rea de trabajo, lo mejor que se puede hacer para comprobar cunto ocupa o cmo ocupa es monitorizarlas.

Cmo se monitoriza la PGA?


Hay diferentes vistas para saber cunto ocupa cada PGA individual o para saber cunto ocupan todas las PGAs o incluso para saber si est bien configurado el parmetro PGA_AGGREGGATE_TARGET. Con V$PROCESS se puede saber el tamao de la PGA de cada proceso de la Instancia (el proceso puede ser background o foreground tambin llamado shadow-). Si es un proceso background se sab rpidamente qu proceso es porque lleva el nombre del proceso en la columna PROGRAM. Si es un proceso shadow se sabe el usuario que hay detrs cruzando las columnas ADDR.V$PROCESS con PADDR.V$SESSION. Veamos un ejemplo: SQL> select sid, serial#, username, command, status, machine from v$session where paddr='BE103FA4'; SID SERIAL# USERNAME COMMAND STATUS MACHINE ---- ---------- -------- ------- -------- ------1386 9 TEST_USR 0 INACTIVE SATURNO Para obtener unas estadsticas de la PGA se puede usar la vista V$PGASTAT: SQL> select * from v$pgastat; NAME VALUE UNIT ---------------------------------------- --------- ------aggregate PGA target parameter 256901120 bytes aggregate PGA auto target 58300416 bytes global memory bound 51380224 bytes total PGA inuse 192188416 bytes total PGA allocated 283714560 bytes maximum PGA allocated 548391936 bytes

maximum PGA allocated 548391936 bytes total freeable PGA memory 0 bytes process count 343 max processes count 404 PGA memory freed back to OS 0 bytes total PGA used for auto workareas 0 bytes maximum PGA used for auto workareas 78736384 bytes total PGA used for manual workareas 0 bytes maximum PGA used for manual workareas 530432 bytes over allocation count 15599 bytes processed 8,1983E+11 bytes extra bytes read/written 1,4539E+10 bytes cache hit percentage 98,25 percent recompute count (total) 208640 Aggregate PGA target parameter indica el valor del parmetro PGA_AGGREGGATE_TARGET. Aggregate PGA auto target indica la cantidad de PGA que Oracle puede usar como reas de trabajo. Este valor vara en funcin de la carga de trabajo. Total PGA allocated indica el valor total de PGA asignado. Este es el valor que Oracle intenta mantener por debajo de PGA_AGGREGGATE_TARGET. Este valor puede ser ms alto que el indicado por el parmetro de inicializacin en momentos puntuales de mucha carga o de forma constante si PGA_AGGREGGATE_TARGET est pobremente dimensionado. Over allocation count indica el nmero de veces que ha habido que sobrepasar el lmite impuesto por PGA_AGGREGGATE_TARGET, lo que es sntoma de que hay que aumentar el parmetro. Cache hit percentage indica el nmero de veces que se ha podido realizar una operacin intensiva de ordenacin/clasificacin sin incurrir en un "extra pass". Si este valor no es cercano al 100% indica que hay que aumentar el parmetro PGA_AGGREGGATE_TARGET. La vista V$PGA_TARGET_ADVICE es muy til para predecir cmo cambiara el comportamiento de la Instancia si modificamos le valor de PGA_AGGREGATE_TARGET. Para que esta vista recopile informacin el parmetro STATISTICS_LEVEL debe estar configurado a TYPICAL o ALL: SQL> select pga_target_for_estimate, pga_target_factor, estd_pga_cache_hit_percentage,

estd_overalloc_count from v$pga_target_advice; PGA_TGT_FE PGA_TGT_F ESTD_OVRALL_COUNT ---------- ----------32112640 ,125 64225280 ,25 128450560 ,5 192675840 ,75 256901120 1 308281344 1,2 359661568 1,4 411041792 1,6 462422016 1,8 513802240 2 770703360 3 1027604480 4 1541406720 6 2055208960 8 ESTD_HIT_PCTGE -------------- -------------67 67 67 74 97 98 98 98 98 98 98 100 100 100 67303 67303 66960 40785 4652 73 0 0 0 0 0 0 0 0

La columna pga_target_for_estimated indica la estimacin para las que las dems columnas estn dando informacin. La columna pga_target_factor indica la relacin entre el valor de PGA_AGGREGGATE_TARGET actual y el valor de estimacin de esa fila. Cuando este factor est a 1 indica la relacin 1 a 1 -el tamao actual-. Si es 2, es 1 a 2 -el doble-, y si es 0,125 es 1 a 0,125 -una octava parte-. La columna estd_pga_cache_hit_percentage indica el porcentage de xito, operacin resueltas sin "extra pass" para ese pga_target_for_estimated. Por ltimo, la columna estd_overalloc_count indica el nmero de veces que habra que sobrepasar el valor indicado por PGA_AGGREGGATE_TARGET para ese pga_target_for_estimated. Para este caso el valor ptimo sera subir el valor del parmetro 1,4 veces porque nos da una estimacin de 0 "extra passes". Seguir aumentndolo no aportara ninguna mejora. Si estamos justos de memoria y 73 "extra passes" son asumbles se puede empezar aumentndolo 1,2 veces en vez 1,4 y despus de un tiempo de trabajo volver a chequear los valores.

Por ltimo decir que las vistas V$PGASTAT y V$PGA_TARGET_ADVICE guardan informacin de la Instancia en tiempo real. Cuando se reinicia la Instancia estas vistas empiezan a recopilar datos nuevos. Para ver el histrica entre reinicios estn las vistas DBA_HIST_PGASTAT y DBA_HIST_PGA_TARGET_ADVICE respectivamente. Espero que te haya sido til. Por favor, deja tus comentarios, correciones o sugerencias. Juan Lorenzo Arellano Oracle DBA Infor Consult Soluciones www.inforconsult.es Publicado por Juan Lorenzo Arellano en 12:27 Etiquetas: Oracle, ORDER BY, PGA, PGA_AGGREGATE_TARGET, SORT_AREA_SIZE

5 comentarios: Annimo dijo... Fenomenal, claro y conciso. Gracias 26 de septiembre de 2008 10:03 Annimo dijo... Muy bueno. 3 de marzo de 2009 12:17 Sael dijo... Magnfico! ya haba leido rpidamente porque necesitaba algo especfico, y me ayud mucho. El da de hoy lo le todo y me pareci muy completo y de mucha ayuda! 26 de noviembre de 2009 16:35

sergio dijo... perfecto tio 21 de mayo de 2010 18:02 Carlos Mario Toro dijo... Muy buen artculo. Una pregunta? yo podra configurar diferentes tamaos de PGA en una misma instancias y permitir que un grupo de usuarios tome una de ellas y otro grupo otra. 17 de abril de 2011 14:04 Publicar un comentario en la entrada Enlaces a esta entrada Crear un enlace Entrada ms reciente Pgina principal Entrada antigua

Suscribirse a: Enviar comentarios (Atom)

Você também pode gostar