lunes, 18 de septiembre de 2017

Oracle Lage Page Support - Para windows

Saludos,

Para los que se preguntan, que parametros del sistema operativo windows podemos modificar para mejorar el rendimiento de nuestras base de datos, pues aqui les va uno:

Large Page Support:
Large Pager suport (LPS) o Soporte de Paginas Largas  es una caracteristica implementada para versiones 10.1 o superior para versiones en sistemas operativos windows server 2003 o superior, esta caracteristica permite a la instancia de base de datos Oracle poder soportar manejo de paginas grandes en memoria. Cuando habilitamos LPS las n Cpu's podran acceder a el buffer de la base de datos Oracle en la RAM mas rapidamente, como lo hace? en si es por que los procesadores en vez de usar memorias pequeñas que van desde 4k, se le dice que maneje tamañoas de 2Mb a 4Mb de buffer para las base de datos.

Como se habilita?
Tenermos que seguir los siguientes pasos:
  1. Habilitar en el regedit ORA_LPENABLE 
  2. Otorgar el permiso al usuario "Lock pages in memory"
  3. Reiniciar todo el servidor

1 Habilitar en el regedit ORA_LPENABLE
Abrimos el regedit y nos vamos a la seccion donde esta el home de la instalacion de la base de datos Oracle HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home2 y agregamos un nuevo valor de cadena REG_SZ de nombre ORA_LPENABLE y valor 1



Nota: Para saber con seguirad donde agregar el parametro ORA_LPENABLE puden ver la dirección  viendo el archivo oracle.key ubicado en  ORACLE_HOME\BIN\oracle.key

2 Otorgar el permiso al usuario "Lock pages in memory"
  • En el panel de control hacemos click a Local Security Policy o Directiva de Seguirdad Local, de ahi ir a "Security Settings\Local Security\User Rights Assignment"
 

  • Hacer bloble click en Lock pages in memory, en la pestaña de "Local Security Settings window" damos click en add User o Group.Seleccionamos el usuario de inicio del servicio Oracle. En mi caso yo realice la instalacion con el usuario Oracle, otros podran haber establceido el system.
 
 Nota: El usuario que vamos a buscar es con quien configuramos el inicio de sesion de los servicios Oracle, por lo general en la instalación usamos el usuario oracle, pero pueden verificar viendo en la seccion de los servicio "services.msc" buscamos  Oracle y vemos  quien es el que inicia la sesion.

3 Reiniciar todo el servidor
Reiniciamos todo el servidor



Y listo, hemos configurado el LPS, con esto se ba a obtener un mejor rendimiento de nuestras instancias Oracle que corren sobre Windows, sobre todo en entornos de instancias de varios GB.

Precauciones:
No usar el parametro de base de datos LOCK_SGA cuando el LPS esta habilitado ya que esto genera error en el inicio de la base de datos.

viernes, 30 de marzo de 2012

Monitoreo de indices

El uso de los índices es de gran ayuda para mejorar el rendimiento de la aplicaciones el momento de filtrar los datos, pero, como podemos saber si los índices que tenemos en nuestra base de datos están verdaderamente siendo usados por nuestras aplicaciones?
¿Porque puede pasar que los índices no se usen?
La aplicación sea adquirida y no desarrollada. Esto implica que ya viene con sus índices pre-establecidos.
El funcionamiento o políticas de la empresa cambien lo que también afecta al funcionamiento de nuestras aplicaciones.
La creación de un nuevo índice sea más óptima en costo con el que ya existía. Ya que el CBO tomará el índice con menor costo para su planificación.

Para todos estos casos, esto nos generaría tener índices inútiles que ocupan espacio y hacen más costos las operaciones de insert, delete y update.
Oracle introdujo desde la versión 10g el monitoreo de índices lo cual nos permite determinar que índices se usan o no se usan.

Acción
Sentencia
Activar monitoreo
ALTER INDEX indice_01 MONITORING USAGE;
Desactivar monitoreo
ALTER INDEX indice_01 NOMONITORING USAGE;

EJEMPLO
/*Creamos una tabla*/
CREATE TABLE mi_tablas
AS   SELECT * FROM all_tables;

/*Creamos el indice*/
CREATE INDEX mi_indice_01    ON mi_tablas (table_name);


Veamos la información
/*Vemos la informacion del indice*/  
SELECT iu.name owner, io.name index_name, T.name table_name,
       DECODE(bitand(i.flags, 65536), 0, 'NO', 'YES') MONITORING,
       DECODE(bitand(ou.flags, 1), 0, 'NO', NULL, NULL, 'YES') used,
       ou.start_monitoring,
       ou.end_monitoring
FROM    sys.obj$ io,
        sys.obj$ T,
        sys.ind$ i,
        sys.USER$ iu,
        sys.USER$ tu,
        sys.object_usage ou,
        dba_segments s
WHERE  io.owner# = iu.USER#
AND    i.obj# = io.obj#
AND    io.obj# = ou.obj# (+)
AND    T.obj# = i.bo#
AND    T.owner# = Tu.USER#
AND    i.type# not in (4, 8, 9)
AND    iu.name = user --Usuario dueño del objeto
AND    bitand(io.flags, 128) <> 128
AND     S.SEGMENT_NAME=io.name
AND     S.OWNER=iu.name

.
Descripción de las columnas
OWNER
Dueño del índice
INDEX_NAME
Nombre del índice
TABLE_NAME
Tabla asociada al índice
MONITORING
YES/NO si está o no siendo monitoreado
USED
YES/NO si fue usado o no el índice
START_MONITORING
Fecha desde que inició el monitoreo
END_MONITORING
Fecha que finalizó el monitoreo

Vemos que en la columna MONITORING el valor es NO lo cual indica que el índice no está siendo monitoreado.
Ahora activemos el monitoreo del índice.
/*Activar el monitoreo del indice*/
ALTER INDEX mi_indice_01 MONITORING USAGE;


Ejecutamos la consulta para ver información del índice


Aquí vemos que en la columna MONITORING ya indica que el índice está siendo siendo monitoreado, en la columna USED en cambio indica NO lo cual indica que desde que se activo el monitoreo no se ha hecho uso del índice.
Ahora ejecutemos una consulta usando como filtro el campo de la tabla asociada al índice.
/*Selecionamos los datos usando el indice*/
select * from mi_tablas where table_name='DATO';

Veamos la consulta de información del índice.


Ya con esto vemos que cuando ejecutamos una consulta que hace uso del campo asociado al índice el monitoreo registra que el índice fue usado de tal manera que ya podemos determinar si utilizo o no.

El tiempo que monitoreemos los índices dependerá de la frecuencia de uso de los objetos, como por ejemplo si tenemos consultas que solo se hacen uso a fines, en este escenario debemos esperar hasta que todos los procesos o consultas se ejecuten durante el periodo. Con esto garantizaremos que si eliminamos el índice estemos 100% seguro de que no se use por ningún proceso o consulta.