Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El propsito del presente proyecto de tesis es mostrar el desarrollo de una tcnica para
mejorar los tiempos de respuestas de las consultas a bases de datos (BD) con enormes
cantidades de informacin. Esta labor se bas de la experiencia obtenida durante seis aos
en una empresa de consultora y tecnologa dedicada a proveer soporte al procesamiento de
las transacciones bancarias y otros servicios financieros.
A travs del documento usted encontrar ejemplos de los casos ms crticos y usuales que
sucedan en la compaa. Por ejemplo, las dificultades con las entidades financieras las cuales
poseen sistemas transaccionales para manejar los pagos electrnicos, el comercio mvil y las
transacciones de procesamientos pagos por Internet. Aquellas interactan con diversas
entidades cuando procesan los pagos en los comercios. De modo que, estos sistemas no
pueden tener bajo tiempo de respuesta porque tienen un compromiso serio con su cartera de
clientes. Usualmente, aquellas aplicaciones presentaban problemas de lentitud cuando se
empezaba a poblar las tablas transaccionales de sus base de datos, un aproximado de diez
millones de transacciones en un da, y realizar una consulta a esta tabla resultaba frustrante.
Estas complicaciones generaba la necesidad de comprar servidores ms potentes para
mantener disponible la infraestructura y aliviar los problemas de rendimiento. O, la adquisicin
de otros dispositivos a su sistema de almacenamiento, tales como discos ms rpidos, los
cuales permiten lograr la disponibilidad de la informacin histrica de las aplicaciones.
Situaciones que elevaba los costos considerablemente.
En una BD, cuando la tabla crece demasiado, el acceso a ella se vuelve lento; entonces la
divisin de tablas gigantes en partes ms pequeas permite mejorar la administracin y
optimizacin de estas. Esta tcnica es conocida como la particin de tablas. Con esa tcnica
se puede evitar que las empresas gasten en comprar otro servidor ms potente para dar
soporte a las BD con tablas enormes. La particin de tablas brinda un enfoque simple, efectivo
y til para la administracin de TI de grandes entornos. Adems, permite a los diseadores y
administradores de BD solucionar algunos de los problemas ms difciles planteados por las
aplicaciones de vanguardia. Esta es una herramienta importante para sistemas que albergan
mucha informacin o para aquellos con requisitos de disponibilidad considerablemente altos.
El propsito de este proyecto permitir implementar una solucin econmica y fcil de usar,
que automatizar el proceso de particin de tablas y la consulta de las mismas basndose en
el alcance de este proyecto.
INTRODUCCIN ............................................................................................................................ 1
1.1 PROBLEMTICA........................................................................................................................ 2
CONTEXTOS ............................................................................................................................................ 2
DEFINICIN DEL PROBLEMA ....................................................................................................................... 4
SITUACIN ACTUAL DEL CASO DE ESTUDIO .................................................................................................... 4
SISTEMAS IMPACTADOS Y LA IDENTIFICACIN DEL PROBLEMA .......................................................................... 5
CONSECUENCIAS DE CONTINUAR CON LA SITUACIN ACTUAL ........................................................................... 6
1.6 CORRELACIN DE LOS RESULTADOS ESPERADOS CON LAS SECCIONES DE ESTE INFORME ............................ 18
I
TIPOS DE TRIGGERS ................................................................................................................................ 23
<<INSTEAD OF TRIGGER>>................................................................................................................... 24
LEYENDO Y ENTENDIENDO EL PLAN DE EJECUCIN........................................................................................ 24
RESTRICCIONES ..................................................................................................................................... 81
CONCLUSIONES ..................................................................................................................................... 82
LECCIN APRENDIDA .............................................................................................................................. 82
RECOMENDACIONES Y TRABAJO FUTURO ................................................................................................... 82
REFERENCIAS BIBLIOGRFICAS.................................................................................................... 84
ANEXOS...................................................................................................................................... 86
La indisponibilidad de una aplicacin para leer un dato crtico puede generar un costo
representativo de prdida de productividad e ingresos, clientes insatisfechos y una mala
reputacin corporativa. Por lo tanto, un soporte de TI altamente disponible es un factor de
xito fundamental para que las empresas modernas se muevan con rapidez y estn siempre
activas.
Con bases de datos (BD) que aumentan su tamao cada vez ms rpido, los departamentos
de TI se enfrentan a desafos como mantener niveles adecuados de servicio al usuario; ellos
necesitan que la informacin llegue en el momento oportuno y contribuya en mejorar la toma
de decisiones.
En una BD, cuando la tabla crece demasiado, el acceso a ella se vuelve lento; entonces la
divisin de tablas gigantes en partes ms pequeas permite mejorar la administracin y
optimizacin de estas. Esta tcnica es conocida como la particin de tablas.
Con esa tcnica, se puede evitar que las empresas gasten en comprar otro servidor ms
potente para dar soporte a las BD con tablas enormes. Adems, se puede utilizar un enfoque
de archivo por niveles, lo cual significa mantener la informacin ms antigua disponible en
dispositivos de almacenamiento de bajo costo.
El propsito de este proyecto permitir implementar una solucin econmica y fcil de usar,
que automatizar el proceso de particin de tablas y la consulta de las mismas basndose en
el alcance de este proyecto.
1
1
Problemtica.
Objetivos y resultados esperados del proyecto.
Herramientas, procedimientos y metodologas.
Alcances, limitaciones y riesgos.
Justificativa y viabilidad.
Correlacin de los resultados esperados con las secciones de este informe.
1.1 Problemtica
Contextos
Aplicaciones de vanguardia
<<Estudios acerca de distintas situaciones que afrontan las empresas despus de implantar
una solucin informtica de vanguardia, indican problemas de alto rendimiento cuando sus
bases de datos empiezan a crecer exponencialmente>>, explic Henry Ilizarbe, analista de
negocios en el rea de servicios transaccionales. (Entrevista personal, 22 agosto del 2014).
Otro caso de estudio obtenido fue sobre las entidades bancarias, las que ofrecen una amplia
gama de productos y servicios financieros. Su cartera de clientes abarca desde personas
naturales, pequeas y medianas empresas hasta grandes corporaciones.
Las entidades financieras poseen sistemas transaccionales para manejar los pagos
electrnicos, el comercio mvil y las transacciones de procesamientos de pagos por Internet.
Adems, estas interactan con diversas entidades cuando se procesan los pagos en los
comercios.
<<Estos sistemas no pueden tener bajo tiempo de respuesta, pues tienen un compromiso
serio con su cartera de clientes. Usualmente se presentan problemas de lentitud cuando se
empiezan a poblar las tablas transaccionales de sus bases de datos>>, as lo manifiesta el
Analista de Sistemas Transaccionales de Core Bancario, Roger Chacn; en una entrevista
recogida en la implementacin de un tipo de estas soluciones en un banco importante en
Repblica Dominicana.
l mencion el siguiente caso usual: <<en una de las tablas del sistema de auditora, que
crece tan rpido, 10 millones de transacciones en un da, realizar una consulta a esta tabla
Otro ejemplo que proporcion Chacn fue cuando tuvo la experiencia de trabajar en la
optimizacin de los tiempos de respuesta de una base de datos, en una implementacin de
un sistema de consulta de recarga para puntos de ventas en una compaa que ofrece
servicios de telecomunicaciones.
l dijo: <<la compaa tena alrededor de 120 000 puntos de ventas a nivel nacional y en
promedio realizaban 25 recargas diarias, en la puesta en produccin del Sistema de
Consultas gener un impacto significativo en los tiempos de respuestas y en el rendimiento
de otro sistema con quien interactuaba, este era un sistema altamente transaccional, esto
trajo serias cadas continuas del servicio, generando prdidas de dinero considerables y
multas de entidades auditoras. La solucin involucr cambio de toda la infraestructura de BD
y un trabajo de afinamiento continuo debido al crecimiento de recargas en el mercado
peruano>>.
Antes de empezar con la discusin es, sin embargo, necesario definir un caso de estudio (CE)
el cual refleje o se aproxime a los requerimientos de la mayora de las empresas. A
continuacin se muestra la situacin actual del caso, y con ello, visualizar el requerimiento
principal del proyecto.
El CE del proyecto contempla a una empresa del sector bancario, la cual tiene problemas
serios con diversos sistemas importantes para su negocio. Existe una aplicacin que gestiona
los diversos pagos electrnicos que realizan las empresas y personas, como el comercio mvil,
los pagos a travs de Internet y todos los procesamientos ejecutados en el ciclo de vida de
estos pagos. Por tanto, es significativo cuidar esta aplicacin, pues las auditoras por parte
del gobierno son constantes y aleatorias.
Esta aplicacin es importante porque almacena los sucesos de las transacciones de todos los
medios de pagos. Y esa informacin es usada por otras aplicaciones de la compaa.
Seguidamente, se presenta los sistemas impactados del CE.
Continuando con la explicacin proporcionada de la situacin actual del CE, se tiene una
aplicacin con problemas de rendimiento en un mdulo llamado diario electrnico (Electronic
Journal). El modulo maneja registros de las transacciones que se ejecutan en diferentes
canales, tales como: AGENCIA, POS, ATM, KIOSK, INTERNETBANKING y
ASOCIACIONTARJERTA. En la figura 1-1 se ilustra mejor el enunciado mencionado.
ATM KIOSK
INTERNET
POS
BANKING
CARD
BANKS
ASSOCIATIONS
ELECTRONIC
JOURNAL
El modulo tiene una compleja estructura de tablas, y se decidi no presentarlo para no cansar
al lector. Sin embargo, se mostrar la principal tabla (JOURNALTX) en la cual crece
exponencialmente alrededor de diez millones de registros en un da til. En la figura 1-2 se
presenta la tabla JOURNALTX.
Adems, los sistemas de los otros canales tratan de conseguir esa informacin originando un
cuello de botella significativo. Por lo tanto, se identific que la tabla JOURNALTX debe ser el
input para el proceso de optimizacin y lograr la mejora en su rendimiento.
Las adquisiciones realizadas para toda la infraestructura, como por ejemplo: nuevos
servidores, nuevo hardware o nuevos discos fsicos ms rpidos para el sistema de
almacenamiento son algunos ejemplos de costos que deben estar contemplados en el
presupuesto de la compaa.
En la situacin actual del CE se produce bajo rendimiento en la aplicacin cuando los usuarios
generan reportes para el anlisis histrico de los datos. Debido al problema de rendimiento,
la generacin de reportes usualmente son activados para ser ejecutados durante la noche o
los fines de semana, en otros trminos, solo se pueden generar reportes cuando la aplicacin
realiza pocas transacciones.
En una auditora que se realiz en la compaa, concluyeron que la situacin actual no permite
cumplir con las polticas de alta disponibilidad con los datos de los clientes, en relacin con
las transacciones de sus cuentas financieras.
Retorno de la inversin
Segn la situacin actual, el ltimo reporte de la auditora indica que hay problemas serios de
continuar con sus operaciones en el mercado peruano. La alta gerencia de la compaa desea
conocer si el logro de su visin futura en sus sistemas de informacin est comprometida,
debido a las evidentes complicaciones.
Estos son los retos que enfrentan la mayora de los gerentes de TI para aliviar sus problemas
de bajo rendimiento de sus aplicaciones. Esta investigacin trata de analizar esa problemtica
con la finalidad de reducir costos y cumplir con las polticas y requerimientos de conformidad
de las empresas.
Definir e implementar una tcnica para mejorar los tiempos de respuestas de las consultas a
base de datos con cantidades considerables de informacin.
Objetivo especficos
OE4: No apercibir de los resultados producidos del proceso de optimizacin para que
el usuario final o la aplicacin puedan consultar la tabla o insertar registros en ella sin
dificultades.
OE5: Mejorar los tiempos de respuestas de las consultas a la tabla que fue procesada.
Resultados esperados
RE2: Visualizacin de una lista de tablas que tienen grandes cantidades de registros
para que el DBA elija la tabla que ingresar al proceso de particin.
Herramientas
Herramienta: SQL
Los programas de las aplicaciones y las herramientas de Oracle a menudo permiten a los
usuarios acceder a la BD sin usar SQL directamente, pero estas aplicaciones utilizan
sentencias SQL para atender los requerimientos del usuario.
SQL unifica todas las tareas anteriores en un lenguaje fcil y permite trabajar con los datos
en un nivel lgico [ORA02, 46].
Herramienta: PL/SQL
Su definicin en ingls es Procedural Language extensin to SQL que significa que una
extensin del lenguaje de procedimientos de SQL. PL/SQL se integra perfectamente con
construcciones de procedimientos SQL. En la figura 1-4 se ilustra mejor este prrafo:
Al enviar este bloque al servidor, el motor analiza primero el bloque para identificar las
sentencias de procedimiento y las sentencias SQL, para luego pasarlos a su ejecutor
respectivo.
Procedimientos
Para obtener este resultado se analiz la problemtica del caso de estudio y se investig
soluciones similares (revisar el estado del arte en la seccin 2.2 para ms detalle). Las tareas
mencionadas fueron la base para disear una solucin que cumpla todos los objetivos
especficos planteados.
<<Visualizacin de una lista de tablas que tienen grandes cantidades de registros para que el
DBA elija la tabla que ingresar al proceso de particin>>.
Para la elaboracin del reporte se us la vista USER_EXTENTS para obtener informacin de las
tablas (WHERE SEGMENT_TYPE='TABLE') del usuario actual. Adems se tuvo que agrupar por
el nombre del segmento (GROUP BY SEGMENT_NAME) para calcular el tamao de las tablas.
<<Pantallas interactivas para que el DBA personalice la configuracin de las particiones que
sern creadas>>.
Se estudi los campos que deberan ser configurables al inicio del proceso. Se elabor mens
para que visualice una coleccin de opciones para facilitar el ingreso de parmetros al proceso
de particin.
Se us una representacin lgica de una o varias tablas para enmascarar las particiones y
encubrir la complejidad de la solucin (revisar el concepto de VISTA en el marco terico
ubicado en la seccin 2.1). Tambin se us un componente almacenado en la BD que se
invoca automticamente si ocurre alguna manipulacin en los datos de la tabla (para ms
detalle revisar el concepto de TRIGGER en el marco terico ubicado en la seccin 2.1).
Para verificar esta evidencia se compar los PLANES DE EJECUCIN (esta definicin se explica
con mayor amplitud en la seccin 2.1) antes del proceso de particin y despus de ello. Sin
embargo aqu se puede adelantar que un plan de ejecucin es un conjunto de pasos que el
optimizador del motor de la BD Oracle realiza cuando se est ejecutando una sentencia SQL
para realizar una operacin.
Metodologa
La metodologa que ayud a gestionar este proyecto fue la gua del PMBOK (Project
Management Body of Knowledge). Sin embargo, debido a la naturaleza del proyecto (este es
un trabajo acadmico realizado por una sola persona) y al poco tiempo asignado, no se usaron
todas las reas del conocimiento.
A continuacin se lista las reas de conocimiento que fueron tiles durante el ciclo de vida del
proyecto:
Los procesos de cada gestin mencionada se describen ms adelante en los anexos de este
informe.
En esta seccin se explican lo que solucionar el proyecto. Luego se indican las razones que
pueden posibilitar que el proyecto no se culmine. Y por ltimo, se describen los riesgos que
pueden impactar negativamente en el proyecto.
Diariamente se procesa alrededor de diez (10) millones de registros en esas tablas. Eso
provocaba que las tablas ms consultadas en el sistema se llenen rpidamente. Naturalmente
se identific la necesidad de realizar un anlisis de rendimiento de la base de datos de esta
aplicacin y encontrar una solucin.
Con las evidencias presentadas en la situacin actual del CE, se puede indicar que el
requerimiento principal es <<la implementacin de una solucin para afrontar los problemas
de todos los das, cuando sus bases de datos crecen en cantidades considerables de
informacin>>.
Limitaciones
A continuacin se explican las limitaciones que pueden imposibilitar que el proyecto culmine:
Para que el avance del proyecto sea continuo se necesita comunicacin constante con el
asesor de tesis para elaborar de forma apropiada las funcionalidades esperadas en el
producto. Sobre este asunto, el asesor es un profesional especializado en base de datos en
la tecnologa Oracle y posee mucha experiencia en este rubro.
Por tanto, se pudo dar la situacin en la cual se pierda comunicacin con l, debido al viaje
que se realiz fuera del pas por motivos laborales. Sin embargo, esta situacin fue controlada
y superada porque se mantuvo comunicacin con el asesor a travs de Internet.
Otra consideracin fue el hardware que se us para elaborar la solucin, pues se requera un
computador estable, en otros trminos, que no tenga problemas en la memoria RAM, ni en la
velocidad del CPU y tenga mucho espacio en disco disponible para trabajar sin retrasos. Este
fue superado por la compra de una laptop nueva con 500 GiB de disco duro y 3 GiB de
memoria RAM.
Riesgos
Poco tiempo Si la elaboracin del producto Se tomar como prioridad alta para
disponible para no se encuentra finalizada solicitar permisos especiales, para
el desarrollo de antes del 30 de noviembre ausentarme en el trabajo actual, en la
la tesis. del 2014, entonces se primera semana de diciembre. Y en este
tomarn medidas tiempo libre culminar con todos los
correctivas. retrasos generados en los entregables
del producto.
Justificativa
Por tanto, el propsito de esta investigacin permitir implementar una solucin econmica y
fcil de usar que automatizar el proceso de divisin de tablas con abundante informacin y
mejorar el tiempo de respuesta de consulta a ellas.
Viabilidad
Para posibilitar las probabilidades de llevar a cabo el proyecto, se decidi instalar como motor
de base de datos, la versin Oracle Database Express Edition (XE). A continuacin se
examina por qu, distinguindolos y separndolos en tres aspectos: en la viabilidad
econmica, tcnica y temporal.
Viabilidad econmica
Los costos generados fueron agrupados en dos aspectos: en el uso del software y en el trabajo
realizado por el tesista.
Con respecto al uso de la licencia de Oracle Database XE, este software est disponible sin
cargo por su uso, modificacin, distribucin y es fcil de instalar.
Con respecto al trabajo realizado por el tesista, los costos est en funcin al tiempo dedicado
a las actividades del proyecto, por lo tanto, seguidamente se presenta un resumen de las
principales actividades realizadas en la construccin del ambiente de trabajo para la tesis. En
la figura 1-6 se describe la descomposicin de estas actividades.
Actualizar el documento
Viabilidad tcnica
La versin XE ofrece una solucin integral y compatible con los siguientes entornos de
desarrollo:
Los entornos mencionados son herramientas suficientes para manejar una base de datos
Oracle. Adems se ajusta a la finalidad de este proyecto.
Viabilidad temporal
Se decidi usar los productos de Oracle por ser la ms comercial y porque se posee mayor
experiencia en su tecnologa tanto en el motor de BD as como en las herramientas
mencionadas.
Adems, el tiempo asignado al proyecto es muy corto y; para evitar el riesgo de no cumplir
con los entregables, se decidi usar esta tecnologa.
Modificado: 11/09/2017 04:52 p.m.
17
1.6 Correlacin de los resultados esperados con las
secciones de este informe
En la tabla 1-2 se muestra la relacin del desarrollo de los objetivos especficos con la
ubicacin en este informe.
1.- Se espera un informe que explique el flujo de los procesos Todo el captulo tres y
de la solucin. cuatro.
2.- Visualizacin de una lista de tablas que tienen grandes Seccin 4.4.
cantidades de registros para que el DBA elija la tabla que
ingresar al proceso de particin.
Adems en este captulo slo incluye los conceptos que fueron utilizados en este informe.
Este captulo cubre los siguientes temas:
Marco terico.
Estado del arte.
Despus de completar la revisin de esta seccin se puede conocer y manejar los conceptos
relacionados al problema y a la solucin propuesta para enfrentar el bajo rendimiento cuando
las aplicaciones acceden a sus bases de datos con cantidades considerables de informacin.
En muchas formas, los profesionales de TI, incluso los especializados en bases de datos,
cuando modifican algunos ajustes para mejorar el rendimiento de sus aplicaciones lo realizan
siguiendo las recomendaciones del especialista de esa aplicacin o producto informtico. Y
Una base de datos tiene estructuras lgicos y fsicos. La relacin entre la base de datos, sus
tablespaces y sus datafiles se ilustra en la figura 2-1.
Tablespace
Una base de datos est dividido en unidades de almacenamiento lgico llamados tablespaces.
Estos agrupan las estructuras lgicas relacionales con sus datafiles (archivos fsicos de
almacenamiento) respectivos. Por ejemplo: los tablespaces comnmente agrupa todos los
segmentos de una aplicacin para simplificar alguna operacin administrativa [ORA04, 62].
Extents
Segments
ANSI
ANSI (por sus siglas en ingls: American National Standards Institute). Es la voz autorizada
de los Estados Unidos para supervisar el sistema de normas de estndares para los productos,
servicios, procesos y sistemas en los EEUU [WEB06].
Una vista es una representacin lgica de una o muchas tablas. En esencia, una vista es una
consulta almacenada que presenta datos de una o varias tabla, estas son llamadas tablas
base. Estas tablas base tambin pueden ser otras vistas. Todas las operaciones sobre una
vista en realidad afectan a las tablas base [ORA06, 102].
Las vistas permiten adaptar la presentacin de los datos a diferentes tipos de usuarios. Y
proporcionar un nivel adicional de seguridad a la tabla, al restringir el acceso a un conjunto
predeterminado de sus filas o sus columnas. Por ejemplo, en la figura 2-2 muestra como la
vista staff no muestra la columna salario de la tabla base employees [ORA06 ,102].
Con la vista se puede ocultar la complejidad de los datos. Por ejemplo, una simple vista puede
definir una combinacin de filas y columnas de varias tablas. Sin embargo, la vista oculta el
hecho que esta informacin se origina a partir de varias tablas [ORA06, 102].
Una consulta tambin puede realizar numerosos clculos con datos de sus tablas base. De
este modo, los usuarios pueden consultar una vista sin saber cmo se llev a cabo dicho
clculo [ORA06, 102].
Presenta los datos en una perspectiva diferente de sus tablas base. Por ejemplo, el nombre
de las columnas de una vista puede ser cambiada sin afectar sus tablas base [ORA06, 102].
Se puede aislar los cambios en las definiciones de sus tablas base. Por ejemplo, si la
definicin de una vista hace referencia a ciertas columnas de su tabla base, y se agrega
nuevas columnas a la tabla, entonces la definicin de la vista no se afecta y todas las
aplicaciones que usan las vistas no son comprometidas [ORA06, 102].
A continuacin se presenta un ejemplo del uso de una vista: considere la tabla hr.employees
que tiene varias columnas y filas, para permitir a los usuarios mirar solo cinco de todas sus
columnas, se puede crear una vista como sigue:
Clave de particin
Son las sentencias que modifican datos de los objetos de un esquema en particular. Por
ejemplo, la insercin y la eliminacin de filas son operaciones DML [ORA06, 176].
Las sentencias DDL definen objetos de un esquema. Por ejemplo, la creacin de una tabla o
agregar columnas a una tabla son operaciones DDL [ORA06, 176].
Los triggers son objetos del esquema similares a los programas pero difieren en la manera
como ellos son invocados. Un programa es ejecutado explcitamente por un usuario,
aplicacin o trigger. Los triggers son implcitamente invocados por la base de datos cuando
ocurre algn evento descrito en el prrafo anterior [ORA06, 176].
Tipos de triggers
A continuacin se explica el tem Instead of trigger. Sin embargo, se puede revisar los otros
en la documentacin oficial de Oracle [WEB01].
<<INSTEAD OF Trigger>>
Una vista (revise la nota previa, Acerca de las vistas en la BD Oracle) presenta la salida de
una consulta (query) como una tabla. Si se desea cambiar la vista como si se tratara de una
tabla, entonces se debe crear INSTEAD OF Trigger [ORA09, 157].
Este tipo de trigger es til para modificar vistas en forma transparente debida que no se puede
modificar directamente a travs de las declaraciones DML [ORA06, 178].
El Instead of trigger es definido sobre una vista, y su evento que le invoca es cualquier
declaracin DML. En lugar de ejecutar una operacin DML, el motor de BD Oracle ejecuta
este trigger [ORA09, 154].
Una vista presenta la salida de una consulta como una tabla. Para cambiar la vista como si se
tratara de una tabla, se debe crear Instead of trigger. En lugar de cambiar la vista, se cambiar
las tablas base de la vista [ORA09, 157].
Para ejecutar una sentencia SQL, el motor de BD Oracle necesita realizar muchos pasos. En
cada paso recupera la fila de datos fsicamente de la BD o los prepara para el usuario que
emiti la sentencia. La combinacin de los pasos que Oracle usa para ejecutar una sentencia
es un plan de ejecucin (execution plan) [ORA08, 310].
Se puede examinar el plan de ejecucin escogido por el optimizador para una sentencia SQL
mediante el uso de la declaracin EXPLAIN PLAN. Cuando la declaracin es emitida, el
optimizador escoge un plan de ejecucin y luego inserta datos describiendo el plan en una
tabla de la BD. Simplemente se emite la declaracin EXPLAIN PLAN y luego se consulta la
tabla mencionada [ORA08, 310].
La declaracin EXPLAIN PLAN muestra los planes de ejecucin elegidos por el optimizador
para las sentencias SELECT, UPDATE, INSERT y DELETE. Un plan de ejecucin es la secuencia
de operaciones que la BD realiza para ejecutar una sentencia [ORA08, 317].
Los resultados del EXPLAIN PLAN permiten determinar si el optimizador selecciona un plan de
ejecucin particular, como los bucles anidados. Este resultado tambin permite entender las
decisiones del optimizador y el rendimiento de una consulta [ORA08, 318].
Se puede controlar el proceso de dividir los datos desde un ambiente central con motor
multiprocesos que maneja largo volmenes de datos. Proporciona aceleradores predefinidos
para varias aplicaciones empresariales, tales como: ERP, SFA, CRM, SCM, Oracle E-
Business Suite, SAP, PeopleSoft, Siebel [WEB02].
En una publicacin oficial de Gartner, Inc., lder en investigacin en TI del mundo y asesora
de compaas, ubic a la empresa <<Informatica>> en el cuadrante lder para la integridad de
la visin [WEB03].
Modificado: 11/09/2017 04:52 p.m.
25
En la figura 2-3 es un grfico que fue publicado por Gartner, Inc. Como parte de una larga
investigacin esta debe ser interpretada en el contexto de la publicacin. Esta se encuentra
en los anexos de este informe, en la seccin llamado Magic Quadrant for Structured Data
Archiving and Application Retirement.
Oracle Partitioning es una tecnologa que permite que las tablas, ndices y las tablas de ndice-
organizado (Index-Organized Tables) puedan ser divididos en partes ms pequeas
denominadas particiones [WEB05].
Framework es libre. No No
Documentacin es libre. No Si
Preliminares.
Vista panormica de la solucin.
Anlisis de los datos.
Creacin de las particiones.
Enmascaramientos de las particiones.
Desplazamientos de los datos.
Manipulacin de los datos.
Resumen del anlisis.
3.1 Preliminares
Abreviaturas y definiciones.
Observaciones encontradas al definir la solucin.
El catlogo que define todos los trminos y abreviaturas se encuentra en los anexos. No
obstante, es necesario mostrar algunas usadas en este captulo:
Con respecto al motor de la BD, se hall que este sistema tiende a tener muchas operaciones
de lectura aleatorias y secuenciales. Esta mezcla de operaciones causa, tambin, problemas
en las operaciones de lectura en los discos. Similar para las operaciones de escritura.
Esto se puede aplicar para resolver el problema que presentan los procesos de copias de
seguridad, por ejemplo. La explicacin principal del por qu es la enorme duracin que exigen
estos procesos, lo que origina poca disponibilidad para otros sistemas.
Durante el anlisis, se determin que las operaciones de lectura y escritura en los discos
fsicos son consideradas estratgicas y deberan acompaar en el planeamiento de esta
solucin. Son estratgicas porque eliminando el potencial problema que tienen stos, ser
tambin una decisin clave para lograr una optimizacin completa en la BD.
Una visin general de la solucin se observa en la figura 3-1, esta ser la gua principal para
toda la explicacin de este captulo.
Datos
Tabla enorme
4. Desplazamiento
de los datos
De la tabla enorme hacia las
particiones
A continuacin se explicarn con mayor amplitud los diversos aspectos de cada uno de las
fases mencionadas.
Es la primera fase de la solucin, la cual consiste bsicamente en buscar las tablas de mayor
crecimiento y clasificarlas de acuerdo con su valor en la aplicacin. Y con ello, determinar las
que tienen problemas de rendimiento.
El resultado de esta fase es la tabla que origina el problema de rendimiento, la cual ser el
input para el proceso de optimizacin. Este es un paso muy importante porque es el origen
para que empiecen las siguientes fases.
Se puede decir que este mtodo est muy usado por las empresas de software que ofrecen
tecnologas relacionadas con la BD. Sin embargo, esta solucin no es ajena a ello. Entonces
esta etapa consiste bsicamente crear nuevas tablas con la misma estructura de la tabla
gigante pero sin datos, el llenado de las particiones se explica en la seccin 3.6.
Ahora la tabla gigante ya no existe o fue alterada (puede haber cambiado su nombre o fue
movida hacia otro lugar). Pero se necesita que la aplicacin siga consultando estas particiones
de forma inadvertida. Es decir, la aplicacin no necesita enterarse que su tabla gigante ya no
existe.
Para lograr eso, se utilizar una presentacin lgica una capa de abstraccin que agrupa
subconjuntos de combinaciones de datos; en otros trminos, una tabla lgica basada en una
o varias tablas. En el mundo de la informtica, esa definicin es conocida como vista, (revise
el detalle en el marco terico).
Entonces aqu se puede indicar que la vista agrupa las particiones y los enmascara para su
fcil administracin.
Luego de tener creadas las nuevas particiones, se mueven los datos de la tabla gigante hacia
sus respectivas tablas, segn algn criterio de seleccin, conocido como clave de particin o
columna pivote.
Despus de conseguir la vista de las particiones con sus datos respectivos. Ahora falta la
administracin de los datos que encapsula la vista. Este proceso se tratar con profundidad
en los siguientes captulos.
Sin embargo, se puede adelantar que para manipular los datos de la vista es necesario saber
qu operaciones se estn invocando sobre ella. Esta invocacin se logra a travs de un
procedimiento en la BD que se ejecutar cuando cumpla alguna condicin en la vista. Estas
condiciones pueden ser operaciones de manipulacin de datos, como insertar, borrar o
actualizar registros.
El informe se basa en el CE, pues proporcion supuestos necesarios en las diferentes fases
del anlisis, sin lo cual no se hubiera terminado este informe.
Preliminares.
Resumen de alto nivel del proceso de optimizacin.
Diagrama del flujo del proceso de optimizacin.
Visualizacin de las tablas de mayor crecimiento.
Pantallas interactivas para el DBA.
Transparencia para la aplicacin.
Rendimiento de las consultas a la tabla.
4.1 Preliminares
Para ejecutar el proceso de optimizacin se requiere conocer los siguientes recursos, trminos
y tareas previos para favorecer la comprensin del diseo de esta solucin:
Abreviaturas y definiciones.
Acerca de los scripts que construye el CE.
Acerca de los scripts de instalacin.
Acerca de los scripts del proceso.
Abreviaturas y definiciones
A continuacin se describe algunas de las abreviaturas utilizadas en este captulo con sus
respectivas definiciones tales como:
La instalacin del ambiente del caso a probar conforma tres conjuntos de scripts, distribuidos
de la siguiente forma:
Son los scripts para la implementacin del producto en la BD, los cuales instalan todos los
objetos para dar soporte al proceso de optimizacin.
Son los scripts para ejecutar el proceso de optimizacin en la BD. Estn agrupados en dos
partes: los relacionados con las pantallas y la generacin de las sentencias DDL, y los
relacionados con la ejecucin de las sentencias generadas.
Por ejemplo, para este caso, se copi todos los scripts mencionados (los del CE, los de la
instalacin y los del proceso) hacia un directorio en el computador que aloja la BD
(/u01/tesis); este folder se cre con los permisos de escritura y ejecucin (chmod -R 0777
/u01/tesis).
Despus de copiar todos los paquetes de scripts hacia el folder mencionado (/u01/tesis) se
debera tener una distribucin de archivos como se muestra en la tabla 4-1:
-bash-3.2$ tree
.
|-- ce
| |-- PUCPTESIS_CASOESTUDIO_parte01.sql
| |-- PUCPTESIS_CASOESTUDIO_parte02.sql
| |-- PUCPTESIS_CASOESTUDIO_parte03.sql
| |-- main.sql
| `-- parametros.sql
|-- install
| |-- PUCPTESIS_PARTICION_instalacion.sql
| |-- main.sql
| `-- parametros.sql
`-- process
|-- 1a.sql
|-- 1b.sql
|-- 1c.sql
|-- 1d.sql
|-- 1e.sql
|-- 1f.sql
|-- 2a.sql
|-- 2b.sql
|-- 2c.sql
|-- 2d.sql
|-- end.sql
|-- infotabla.sql
|-- init.sql
|-- main.sql
|-- main1.sql
|-- main2.sql
|-- parametros.sql
|-- readme.sql
`-- set.sql
3 directories, 27 files
Luego el proceso contina con pantallas interactivas para que el DBA proporcione una
configuracin personalizada segn su criterio o valide los valores predeterminados por el
programa.
Recuperar
informacin de la El DBA autoriz la
PRE PARTICIN Si ejecucin de las sentencias
DDL generadas por el
motor?
Ejecutar las sentencias DDL
Reporte del
proceso
Fue exitoso?
Si
Proceso completo
Para presentar las tablas ms pesadas se elabor un query sobre la vista USER_EXTENTS para
obtener el tamao de las tablas del dueo de la aplicacin. Las tablas de mayor tamao son
presentadas de forma descendente. Por ejemplo, en la figura 4-2 se muestra el resultado de
ejecutar el script que contiene el query.
Durante el diseo se busc hacer fcil la personalizacin del proceso, en el que el DBA ingresa
su configuracin o valida los valores predeterminados por el programa, esto es una opcin til
para l. Segn el ejemplo, la JOURNALTXGIGANTE ser la ms indicada. En la figura 4-3, se
ilustra mejor este prrafo.
La tabla no es obligatorio que figure en la lista mencionada, porque ella puede ser muy grande
en el corto plazo y no esperar que lo sea. Por ende, el programa permite el ingreso de
cualquier tabla.
El siguiente dilogo solicita el tipo de particin por la cual se desea realizar el proceso de
particin. En la figura 4-5, se presenta este caso.
Luego se muestra la lista de las particiones que sern creadas y se pide al DBA que actualice
esa informacin. En la figura 4-6, se ilustra esta situacin.
Antes de proporcionar la conformidad del proceso, el DBA puede personalizar ms los valores
que el programa ha establecido de forma predeterminada. Un ejemplo de cmo puede
modificar esos valores se muestra en la figura 4-7. Entre los valores que se pueden cambiar
estn: el nombre de la particin, la columna pivote y el tablespace.
Luego, el programa genera las sentencias DDL de cada particin para que el DBA valide la
declaracin. En la figura 4-10, se ejemplifica esta parte.
La participacin con el DBA termina con su autorizacin para la ejecucin de las sentencias
DDL generadas por el programa. La figura 4-11 es el ltimo dialogo con el usuario.
El RE4, transparencia para la aplicacin, se encuentra en la segunda parte del proceso, segn
el cual el programa ejecuta la consecuente secuencia de sentencias DDL generados cuando
el programa interactuaba con el DBA:
Despus que el DBA autoriz continuar con la segunda parte del proceso, seguidamente se
ejecuta las sentencias DDL de las particiones generadas. En la figura 4-12, se ejemplifica la
creacin de nuevas tablas sin datos y con la misma estructura de la original.
Tabla enorme
Enmascaramiento de
las particiones
Creacin de la vista de
particiones
Tabla enorme
Despus de la vista, el programa ordena los registros con respecto a la columna pivote y
determina los rangos de registros con la finalidad de moverlos a las particiones
correspondientes. En la figura 4-14 se ilustra esta parte.
Vista de
particiones
Enmascaramiento de
las particiones
Creacin de la vista de
particiones
Tabla enorme
Datos
Creacin de constraints
En esta versin inicial del producto, las operaciones DML son la consulta de la tabla y la
insercin de registros en ella. (Revise la seccin 2.1 para conocer ms de las operaciones
DML). El diseo puso atencin en utilizar los triggers sobre la vista.
Tambin se realizaron pruebas que comparan los tiempos de respuesta en los momentos
mencionados y se evidencia el resultado esperado. En el captulo 6, Pruebas de rendimiento,
se explica con ms detalle cmo se efectuaron estas pruebas.
CAPTULO 5: CONSTRUCCIN
Esta seccin cubre los siguientes temas:
Preliminares.
Instalacin del producto.
Proceso de optimizacin.
5.1 Preliminares
Figura 5-1: Sintaxis declaracin de variables PL/SQL (fuente de la imagen [ORA03, 62]).
Ejemplo
Figura 5-2: Ej. Declaracin de variables PL/SQL (fuente de la imagen [ORA03, 62]).
Un error en el programa PL/SQL puede ocurrir durante su ejecucin. Entonces para evitar
consumir mucho tiempo analizando los diferentes errores en los extensos subprogramas del
producto, se us este tipo de atributo en la declaracin de variables PL/SQL. Por lo cual, se
asegur que la variable sea del tipo de dato correcto y preciso.
El atributo %TYPE fue usado para declarar una variable con lo cual se obtuvo las siguientes
ventajas:
Se evit errores causadas por falta de coincidencia de tipos de datos o por precisiones
equivocados.
Se evit el uso de codificar fijamente la declaracin del tipo de dato (hard coding).
Se evit actualizar la declaracin en las variables cuando cambiaban la definicin de la
columna.
Ejemplo
El atributo %ROWTYPE es usado para declarar un registro que puede mantener una fila entera
de una tabla o vista [ORA03, 188].
Sintaxis
El INSTEAD OF trigger cambia las tablas base de una vista. A continuacin se presenta un
ejemplo donde la vista EMP_LOCATIONS tiene la columna NAME creada por las columnas
LAST_NAME y FIRST_NAME de la tabla EMPLOYEE. [ORA09, 157].
Un INSTEAD OF trigger es la nica manera de actualizar una vista porque esta no puede por s
misma. Por lo cual, se debe establecer previamente un diseo de operaciones DML apropiadas
en las tablas base [ORA10, 338]. A continuacin, un ejemplo:
-- Creacin de la vista:
------------------------
CREATE OR REPLACE VIEW order_info AS
SELECT c.customer_id,
c.cust_last_name,
c.cust_first_name,
o.order_id,
o.order_date,
o.order_status
FROM customers c
, orders o
WHERE c.customer_id = o.customer_id
;
En esta seccin se describe los scripts que implementan el producto para la solucin
propuesta. Lo cual contiene tres partes principales:
Parmetros.
Creacin de objetos para la implementacin.
Verificacin de objetos despus de la instalacin.
Parmetros
Son los parmetros necesarios para la ejecucin del script principal: el nombre de usuario y
su contrasea. A continuacin se muestra dos ejemplos:
@readme
@parametros 'tesis' 'feliznavidad'
@PUCPTESIS_PARTICION_instalacion
El script crea las siguientes tablas para dar soporte al proceso de optimizacin:
TIPO_PARTICION.
TABLA_CANDIDATA.
PRE_PARTICION.
PARTICION.
A continuacin se muestra una porcin del script donde estn las sentencias DDL para la
creacin de la tabla TIPO_PARTICION:
PROMPT
PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PROMPT ~ Creacion de la tabla TIPO_PARTICION ~
PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PROMPT
A continuacin se muestra una porcin del script donde estn las sentencias DDL para la
creacin de la tabla TABLA_CANDIDATA:
A continuacin se muestra una porcin del script donde estn las sentencias DDL para la
creacin de la tabla PRE_PARTICION:
PROMPT
PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PROMPT ~ Creacion de la tabla PRE_PARTICION ~
PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PROMPT
A continuacin se muestra una porcin del script donde estn las sentencias DDL para la
creacin de la tabla PARTICION:
PROMPT
PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PROMPT ~ Creacion de la tabla PARTICION ~
PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PROMPT
=========================================================================
~ ~
~ Verificacion de objetos: ~
~ ======================== ~
~ A. Estructura ~
~ A1. Informacion del tablespaces. ~
~ ~
~ B. Seguridad ~
~ B1. Informacion del usuario creado. ~
~ B2. Listado de privilegios sobre objectos. ~
~ ~
~ C. Esquema ~
~ C1. Lista de objectos del tablespace. ~
~ C2. Listado de Objetos PL/SQL. ~
~ ~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~ A. Estructura ~
~ A1. Informacion del tablespaces. ~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LARGEST
SIZE TOTAL FREE
FILE FREE EXTENT ONLINE
FILE NAME (MB) (MB) (MB) STATUS STATUS
------------------------------ ---- ----- ------- ---------- ------
/u01/oradata/tesis_01.dbf .240 ....1 ......1 AVAILABLE ONLINE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~ B. Seguridad ~
~ B1. Informacion del usuario creado. ~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
USUARIO TABLESPACE TABLESPACE
ESTADO ESQUEMA DEFAULT TEMPORAL CREACION PROFILE
------ ---------------- ---------- ---------- ---------- ----------
OPEN TESIS TESIS_TBS TEMP 18-DEC-14 DEFAULT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~ B2. Listado de privilegios sobre objectos. ~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PROPIE
TARIO OBJETO PRIVILEGIO ADMINISTRA
---------- -------------------- ---------- ----------
SYS DIRDATAPUM READ NO
SYS DIRDATAPUM WRITE NO
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~ B3. Listado de privilegios del sistema. ~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PRIVILEGIO ADMINISTRA
------------------------------ ----------
CREATE ANY TRIGGER NO
CREATE PROCEDURE NO
CREATE SEQUENCE NO
CREATE SYNONYM NO
CREATE TABLE NO
CREATE TRIGGER NO
CREATE VIEW NO
DEBUG CONNECT SESSION NO
EXECUTE ANY TYPE NO
SELECT ANY DICTIONARY NO
SELECT ANY TABLE NO
************************************************************************
Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit
Production
En esta seccin se describe los scripts que ejecutan el proceso de optimizacin. El cual
contiene dos partes principales:
Los scripts que ejecutan la primera parte del proceso se encuentran en el folder <<process>>
del directorio principal, este contiene los siguientes scripts:
Modificado: 11/09/2017 04:52 p.m.
55
<<main1.sql>>: Es el script que invoca a los dems en esta primera parte del proceso.
<<1a.sql>>: Visualizacin de las tablas de mayor crecimiento.
<<1b.sql>>: Proceso que genera las sentencias DDL de la tabla.
<<1c.sql>>: Men para escoger la columna PIVOTE y el tipo de particin.
<<1d.sql>>: Proceso que llena la tabla PRE_PARTICION.
<<1e.sql>>: Proceso que actualiza la solicitud de particiones.
<<1f.sql>>: Proceso que genera las sentencias DDL de las particiones.
<<infotabla.sql>>: Script invocado desde el 1a.sql hasta el 1f.sql.
<<main1.sql>>
Es el script principal de la primera parte del proceso, el cual invoca a los dems archivos sql.
A continuacin se muestra un fragmento del script donde se aprecia las llamadas a los
restantes:
@1a
@1b '&&OBJECT_TYPE' '&&TABLE_NAME' '&&USUARIO'
@1c '&&TABLE_NAME'
@1d '&&TABLE_NAME' '&&PIVOT_COLUMN' '&&PARTITION_TYPE'
@1e '&&TABLE_NAME'
@1f '&&TABLE_NAME'
Para presentar las tablas ms pesadas se elabor un query sobre la vista USER_EXTENTS para
obtener el tamao de las tablas del usuario actual. A continuacin se explica mejor en una
porcin del script donde se encuentra esta consulta:
SELECT
SUBSTR(SEGMENT_NAME,1,20) "TABLE_NAME"
, ROUND(SUM(BYTES)/(1024*1024),4) "TABLE_SIZE_MEGABYTES"
FROM USER_EXTENTS
WHERE SEGMENT_TYPE='TABLE'
GROUP BY SEGMENT_NAME
ORDER BY TABLE_SIZE_MEGABYTES DESC
;
Este script genera la sentencia DDL de la tabla que se desea ser optimizada.
De todas las funciones, se invoc a la funcin GET_DDL para obtener los metadatos de la tabla
con una simple llamada. A continuacin se presenta un extracto del script donde se observa
su uso:
SELECT
DBMS_METADATA.GET_DDL(
UPPER(TRIM('&&OBJECT_TYPE'))
, UPPER(TRIM('&&OBJECT_NAME'))
, UPPER(TRIM('&&OWNER'))
) INTO v_TABLE_DDL
FROM DUAL
;
La funcin recibe argumentos, tales como: el tipo y nombre del objeto, as como el dueo del
mismo.
En esta parte se busca que el DBA seleccione la columna PIVOTE, la cual ser la clave de
particin de la tabla. Luego se pide la seleccin del tipo de particin. A continuacin se muestra
un fragmento del script:
El script de esta parte se encuentra en los anexos, en la seccin 1d.sql, sin embargo aqu
se puede mencionar el resultado de su ejecucin:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~ Lista de parametros ingresados:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~ ~
~ 1.d- Proceso que llena la tabla <<PRE_PARTICION>>. ~
~ ~
~ Este proceso completa la tabla PRE_PARTICION. ~
~ ~
~ Input: ~
~ TABLE_NAME, PIVOT_COLUMN, PARTITION_TYPE ~
~ Output: ~
~ PRE_PARTICION ~
~ ~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL_TXT:
INSERT INTO PRE_PARTICION (TABLE_NAME , PARTITION_TYPE , PARTITION_NAME ,
PIVOT_COLUMN , PIVOT_COLUMN_VALUE , COUNT , TBS_NAME) (SELECT
UPPER('JOURNALTXGIGANTE'), UPPER('LISTA'), CANAL, UPPER('CANAL'), CANAL,
COUNT(1), 'TESIS_TBS' FROM JOURNALTXGIGANTE GROUP BY CANAL )
~ Verificacion (1.d)
~ ~~~~~~~~~~~~~~~~~~
~
~ Lista de parametros ingresados:
~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~
6 rows selected.
========================================================================
*** FIN de la ejecucion del script <<1d.sql>>. ***
En esta parte, el proceso espera que el DBA actualice la informacin de las particiones, esta
termina cuando ingresa su confirmacin mediante la letra Y, la cual indica al programa que
la configuracin fue personalizada o est conforme con los valores predispuestos por el motor.
PROMPT
PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PROMPT ~ ACTUALIZAR INFORMACION DE LAS PARTICIONES ~
PROMPT ~ Ingrese 'Y' si esta conforme con la informacion. ~
PROMPT ~ En caso contrario actualice la tabla PRE_PARTICION. ~
PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PROMPT
DEFINE UPDATE_REQUEST='&UPDATE_REQUEST'
PROMPT
UPDATE PRE_PARTICION
SET PARTITION_NAME=UPPER(TRIM(SUBSTR(PARTITION_NAME,1,10)))
, TBS_NAME=UPPER(TRIM(TBS_NAME))
, UPDATE_REQUEST=UPPER(SUBSTR('&&UPDATE_REQUEST',1,1))
, CREATED=SYSDATE
;
DECLARE
v_ERROR_MSG VARCHAR(1000) := '';
v_TBS_NAME TABLA_CANDIDATA.TBS_NAME%TYPE;
v_TABLE_DDL TABLA_CANDIDATA.TABLE_DDL%TYPE;
v_UPDATE_REQUEST PRE_PARTICION.UPDATE_REQUEST%TYPE;
v_PARTITION_DDL PARTICION.PARTITION_DDL%TYPE;
v_TABLE_NAME PARTICION.TABLE_NAME%TYPE := UPPER(TRIM('&TABLE_NAME'));
v_SQL_TXT PARTICION.PARTITION_DDL%TYPE;
CURSOR preparticion_cursor IS
SELECT * FROM PRE_PARTICION
WHERE TABLE_NAME = v_TABLE_NAME
ORDER BY PARTITION_NAME ASC
;
Luego se procede a actualizar la informacin proporcionada por el DBA para todas las
particiones. A continuacin se presenta el fragmento ms significativo del script:
BEGIN
IF (v_UPDATE_REQUEST='Y')
THEN
FOR recprepar in preparticion_cursor
LOOP
SELECT REPLACE (v_TABLE_DDL, v_TBS_NAME, recprepar.TBS_NAME)
INTO v_PARTITION_DDL
FROM DUAL
;
END LOOP
;
END IF
;
EXCEPTION
END
;
/
Este script se invoca dinmicamente en cada etapa y sirve para asegurar la calidad de la
secuencia de las fases durante toda la primera parte del proceso.
PROMPT ~
PROMPT ~ Lista de parametros ingresados:
PROMPT ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PROMPT ~
PROMPT ~ NOMBRE DE TABLA PARTICION: &&PARTICION_TABLA
PROMPT ~
PROMPT ~ PARAMETRO: &&TABLE_NAME
PROMPT ~
PROMPT ~ DETALLE:
PROMPT ~ ~~~~~~~
PROMPT ~
@set 'ON'
COLUMN TABLE_NAME HEADING "TABLE|NAME" FORMAT A6
COLUMN PARTITION_TYPE HEADING "PARTITION|TYPE" FORMAT A3
COLUMN PARTITION_NAME HEADING "PARTITION|NAME" FORMAT A6
COLUMN PIVOT_COLUMN HEADING "PIVOT|COLUMN" FORMAT A6
COLUMN PIVOT_COLUMN_VALUE HEADING "PIVOT|COLUMN|VALUE" FORMAT A8
COLUMN COUNT HEADING "CANTIDAD" FORMAT 99999999
COLUMN PARTITION_DDL HEADING "PARTITION|DDL" FORMAT A6
COLUMN TBS_NAME HEADING "TBS|NAME" FORMAT A6
COLUMN UPDATE_REQUEST HEADING "UPDATE|REQUEST" FORMAT A4
COLUMN CREATED HEADING "CREADO" FORMAT A5
Los scripts que ejecutan la segunda parte del proceso, tambin se encuentran en el folder
process del directorio principal. Este contiene los siguientes scripts:
<<main2.sql>>: Es el script que invoca a los dems en esta primera parte del proceso.
<<2a.sql>>: Ejecucin de las sentencias DDL de las particiones.
<<2b.sql>>: Creacin de la vista de particiones.
<<2c.sql>>: Migracin de los datos hacia las particiones.
<<2d.sql>>: Creacin del trigger para la vista.
<<main2.sql>>
Es el script principal de la segunda parte del proceso, el cual invoca a los dems archivos sql.
A continuacin se muestra un fragmento del script donde se aprecia las llamadas a los
restantes:
@2a '&&TABLE_NAME'
@2b '&&TABLE_NAME'
@2c '&&TABLE_NAME'
@2d '&&TABLE_NAME'
Aqu el motor genera las sentencias DDL de las particiones. De modo que, primero se declara
las variables necesarias; y, por otro lado, un cursor que recorre la tabla PARTICION para
obtener declaraciones DDL generados en la primera parte.
DECLARE
v_ERROR_MSG VARCHAR(1000) := ''
;
v_SQL_TXT PARTICION.PARTITION_DDL%TYPE
;
v_CONFIRM_REQUEST PARTICION.CONFIRM_REQUEST%TYPE
;
v_TABLE_NAME PARTICION.TABLE_NAME%TYPE := UPPER(TRIM('&TABLE_NAME'))
;
CURSOR particion_cursor IS
SELECT * FROM PARTICION
WHERE TABLE_NAME = v_TABLE_NAME
ORDER BY PARTITION_NAME ASC
;
Luego con la autorizacin del DBA, se procede a ejecutar las sentencias DDL con el comando
EXECUTE IMMEDIATE para cada iteracin del cursor de las particiones. A continuacin se
presenta el fragmento ms significativo del script:
IF (v_CONFIRM_REQUEST='Y')
THEN
FOR rec_particion in particion_cursor
LOOP
v_SQL_TXT:= rec_particion.PARTITION_DDL
;
EXECUTE IMMEDIATE v_SQL_TXT
;
END LOOP
;
END IF
;
Para asegurar la calidad de la secuencia de fases durante el proceso, se consultan las vistas
USER_TABLES y USER_OBJECTS, donde las primeras filas del resultado deben evidenciar las
tablas generadas en la fase previa.
PROMPT
PROMPT ~ Verificacion (2.a):
Este script crea la vista de todas las particiones generadas en la fase anterior. De modo que,
primero se declara las variables necesarias; y, por otro lado, un cursor que recorre la tabla
PARTICION para obtener los nombres de las particiones.
DECLARE
v_ERROR_MSG VARCHAR(1000) := '';
v_SQL_TXT PARTICION.PARTITION_DDL%TYPE;
v_CONFIRM_REQUEST PARTICION.CONFIRM_REQUEST%TYPE;
v_TABLE_NAME PARTICION.TABLE_NAME%TYPE := UPPER(TRIM('&&TABLE_NAME'));
CURSOR particion_cursor IS
SELECT * FROM PARTICION
WHERE TABLE_NAME = v_TABLE_NAME
ORDER BY PARTITION_NAME ASC
;
particion_ particion_type
;
Despus se procede a modificar el nombre de la tabla para crear la vista con el mismo nombre
de ella. Luego se recorre el cursor de las particiones para generar la sentencia DDL. Y con
ello, crear la vista de particiones con el comando EXECUTE IMMEDIATE.
Modificado: 11/09/2017 04:52 p.m.
64
A continuacin se presenta el fragmento ms significativo del script:
Para asegurar la calidad del proceso, se consulta la vista USER_VIEW donde el resultado debe
evidenciar la vista de particiones generada en esta fase.
PROMPT
PROMPT ~ Verificacion (2.b) de la vista recien creada.
PROMPT ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@set 'OFF'
CLEAR COLUMN
SET LONG 90000
Luego de tener creadas las nuevas particiones, se ejecuta este script para mover los datos de
la tabla hacia sus respectivas particiones, segn el criterio de seleccin de la columna pivote.
De modo que, primero se declara las variables necesarias; y, por otro lado, un cursor que
recorre la tabla PARTICION para obtener los nombres de las particiones, la columna pivote as
como su valor. A continuacin se explica mejor en el siguiente cdigo:
DECLARE
v_ERROR_MSG VARCHAR(1000) := '';
v_SQL_TXT VARCHAR(1000) := '';
v_CONFIRM_REQUEST PARTICION.CONFIRM_REQUEST%TYPE;
v_TABLE_NAME PARTICION.TABLE_NAME%TYPE := UPPER(TRIM('&&TABLE_NAME'));
CURSOR particion_cursor IS
SELECT * FROM PARTICION WHERE TABLE_NAME = v_TABLE_NAME
ORDER BY PARTITION_NAME
;
Luego por cada iteracin del cursor se genera la sentencia DDL y; con el comando EXECUTE
IMMEDIATE se mueven los datos a su respectiva particin y se crea los constraints para cada
una de ellas.
PROMPT
PROMPT ~ Verificacion (2.c) de los constraints recien creados:
PROMPT ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CLEAR COLUMN
@set 'ON'
Aqu se crea el trigger de forma dinmica para la vista creada en la fase anterior. Similar a los
anteriores fases, se declara la variables necesarios. A continuacin se explica mejor en el
siguiente cdigo:
DECLARE
v_ERROR_MSG VARCHAR(1000) := '';
v_SQL_TXT VARCHAR(4000) := '';
v_CONFIRM_REQUEST PARTICION.CONFIRM_REQUEST%TYPE;
v_TABLE_NAME PARTICION.TABLE_NAME%TYPE := UPPER(TRIM('&&TABLE_NAME'));
v_PIVOT_COLUMN PARTICION.PIVOT_COLUMN%TYPE;
CURSOR particion_cursor IS
SELECT * FROM PARTICION
WHERE TABLE_NAME = v_TABLE_NAME
ORDER BY PARTITION_NAME
;
CURSOR columna_cursor IS
SELECT COLUMN_NAME FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = v_TABLE_NAME
ORDER BY COLUMN_ID
;
columna_ columna_type
;
END LOOP
;
CLOSE columna_cursor
;
v_SQL_TXT:= v_SQL_TXT || ' END CASE ; '
;
v_SQL_TXT:= v_SQL_TXT || ' EXCEPTION '
;
EXECUTE IMMEDIATE v_SQL_TXT
;
Para asegurar la calidad del proceso, se consulta la vista USER_TRIGGERS donde el resultado
debe evidenciar los triggers generada en esta fase.
PROMPT
PROMPT ~ Verificacion (2.d) del <<trigger>> recien creado.
PROMPT ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SELECT
SUBSTR(TRIGGER_NAME,1,15) "TRIGGER_NAME"
, SUBSTR(TRIGGER_TYPE,1,10) "TRIGGER_TYPE"
, SUBSTR(TRIGGERING_EVENT,1,15) "TRIGGERING_EVENT"
, TRIGGER_BODY
FROM USER_TRIGGERS
;
Preliminares.
Primera prueba: Comparacin de los planes.
Segunda prueba: Comparacin de los tiempos.
6.1 Preliminares
Para favorecer la comprensin de cmo se realizaron las pruebas para medir la herramienta
de optimizacin, es necesario conocer lo siguiente:
Caso de prueba.
Momentos de las pruebas.
Pruebas de rendimientos.
Recopilacin de estadsticas para las pruebas.
Encontrando el costo de un query.
Caso de prueba
Son los instantes en los cuales se realizaron los ensayos. Y fueron dos:
Pruebas de rendimiento
Las consultas (queries) o cualquier sentencia DML realizada consume recursos tales como:
espacio en disco, tiempo de CPU, capacidades en las operaciones de I/O, etc., por eso los
diseadores de las aplicaciones deben asegurarse de no abusar de ellos.
En efecto, una forma de controlar es medir los costos relativos que generan los queries; y para
ello, se us la herramienta que el motor de la BD (Oracle optimizer) proporciona.
El optimizador de Oracle (Oracle optimizer) utiliza las estadsticas recogidas en las tablas e
ndices para llegar a un plan de ejecucin ptimo para que consuma menos nmero de
recursos al completar una cierta tarea.
En la fase final
Aqu se actualizaron las estadsticas de las nuevas particiones recin creadas. A continuacin
se presentan los comandos ejecutados:
Antes de abordar con la explicacin de este ensayo, es necesario repasar qu significa plan
de ejecucin (execution plan) y el uso de la clusula EXPLAIN PLAN en las sentencias SQL
(revise la seccin 2.1 para ahondar en este asunto).
A continuacin, un ejemplo de cmo presentar el resultado del ltimo comando EXPLAIN PLAN
almacenado en la tabla PLAN_TABLE:
Para validar el filtro del query se utiliz otro plan que emplea estadsticas rowsource. Y, para
ello, se realizaron los siguientes procedimientos:
Apagado del control que muestras las salidas (DBMS_OUTPUT.PUT_LINE) de los bloques
PL/SQL en el SQL*PLUS. A continuacin, un ejemplo:
Y, por ltimo, para mostrar el contenido del plan, se utiliz la funcin DISPLAY_CURSOR del
paquete DBMS_XPLAN, segn el cual se permite formatear y mostrar el contenido del plan de
ejecucin de cualquier cursor cargado recientemente [ORA11, 4567]. A continuacin, un
ejemplo de cmo invocarlo:
Modificado: 11/09/2017 04:52 p.m.
74
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null, null, 'ALLSTATS LAST') )
;
Aqu se examinan los planes de ejecucin escogidos por el optimizador en el momento inicial.
En la figura 6-1, se observa que el costo (ms detalle, se explica en la nota Encontrando el
costo de un query de los preliminares de este captulo) empleado fue de 3232. Este dato ser
comparado con el obtenido en el otro momento.
En la figura 6-2, se muestra otro plan con ms informacin, entre ellos, se aprecia la columna
Starts, donde todos los valores son iguales a uno, lo cual indica que el optimizador evalu
esas filas.
Aqu se examinan los planes de ejecucin escogidos por el optimizador en el momento final.
En la figura 6-3, se aprecia que el costo empleado fue dos (2). Adems, da la impresin que
recorre todas las particiones en lugar de solo buscar la solicitada, como se indica en el
predicado (CANAL=ATM).
La parte ms importante del plan es la informacin del predicado, segn el cual los filtros NULL
IS NOT NULL siempre se evalan como falso. Por consiguiente, el optimizador no evala esos
pasos.
El costo empleado en el primer plan fue 3232 y en el segundo fue 2. Por tanto, se aprecia una
mejora en el rendimiento.
Adems, se explic que el optimizador no evala todas las particiones como aparenta en los
planes obtenidos con la funcin DBMS_XPLAN.DISPLAY. Por eso se presentaron los planes con
la otra funcin DBMS_XPLAN.DISPLAY_CURSOR.
Este ensayo consiste en comparar los estadsticos de medicin de tiempo sobre un bloque
PL/SQL en los diferentes momentos de las pruebas. Para controlar la visualizacin de las
estadsticas de tiempo (timing) se utiliz la siguiente declaracin:
SET TIMING ON
DECLARE
total number
;
i number
;
BEGIN
i:=1
;
LOOP
SELECT COUNT(*) INTO total
FROM JOURNALTXGIGANTE WHERE CANAL='ATM'
;
i:=i+1
;
EXIT WHEN i=700
;
END LOOP
;
END
;
/
En la figura 6-5 se muestra el periodo transcurrido en la ejecucin del bloque PL/SQL, lo cual
fue 35.49 segundos.
En la figura 6-6 se muestra el periodo transcurrido en la ejecucin del bloque PL/SQL, lo cual
fue 9.51 segundos.
Por tanto, con las evidencias presentadas se concluye que esta herramienta mejora los
tiempos de respuestas de las consultas en las tablas que fueron ingresadas al proceso de
optimizacin.
RESTRICCIONES, CONCLUSIONES Y
RECOMENDACIONES
A continuacin se presentan las restricciones, conclusiones, recomendaciones finales:
Restricciones
Esta versin no considera a las tablas que tienen columnas de tipo de datos tales como: LONG,
LONG RAW y LOBS. Aquellos sern tratados en una futura versin.
Con respecto a la integridad referencial entre tablas, esta versin no funciona para aquellas
(tablas hijas) que depende de otra tabla, asimismo para las que son padres. Estas debilidades
sern desarrolladas en la siguiente versin.
Esta herramienta es til para superar los problemas relacionados con BD cuando las
aplicaciones muchas veces se quedan colgadas en produccin. Resumiendo toda la
Problemtica de la seccin 1.1, la causa muchas veces se debe que la BD debe soportar
procesos con picos de rendimiento altos.
Con esta herramienta se reducir el TCO (costo total del producto); y no requerir invertir en
aumentar el hardware, porque muchas veces es el camino ms fcil para las empresas, sin
embargo, con ello no se ataca el problema principal, como s lo hace esta solucin.
Asimismo, se logra que el proceso de particin de tablas sea transparente para el usuario final
o la aplicacin. De este modo, se elimina la necesidad de efectuar otras operaciones o
cambios en la aplicacin.
La herramienta tiene un motor inteligente, generador de cdigo, que produce sentencias DDL
de forma automtica logrando reducir las horas hombre. Naturalmente, se obtiene ms
utilidades para la corporacin.
Con respecto a las licencias sofisticadas de compaas de software, por ejemplo, comparando
con Oracle Database Enterprise Edition, se genera un ahorro significativo porque la solucin
es independiente de la edicin del producto Oracle.
Con respecto al objetivo principal de esta investigacin, mejora de los tiempos de respuestas
cuando las tablas gigantes son consultadas, se comprob un progreso muy significativo.
Resumiendo todo el captulo 6, Pruebas de rendimiento, se puede decir que con esta
herramienta se logr una ganancia por encima del 70%.
Leccin aprendida
Inicialmente se estuvo declarando algunas variables para unas tablas en particular sin utilizar
el atributo %TYPE entonces el bloque de cdigo PL/SQL generaba errores por cada declaracin
de variable alterada.
Luego se us este atributo, de modo que, el motor PL/SQL determinaba el tipo de dato y el
tamao de la variable cuando se compila el bloque, esto asegura que una variable de este
tipo de atributo es siempre compatible con la columna de la tabla que se est usando.
Las operaciones de lectura y escritura en los discos fsicos son consideradas estratgicas y
deberan acompaar en el planeamiento de esta solucin. Son estratgicas porque eliminando
el potencial problema que tienen stos, ser tambin una decisin clave para lograr una
optimizacin completa en la BD. De modo que, este punto se encuentra en otro nivel, en la
capa del sistema operativo o en el hardware de los discos. Por lo tanto, en el despliegue de
esta solucin se deber tratar con el especialista de los sistemas de almacenamiento de la
empresa.
Con respecto a las operaciones DML en la vista de particiones, los comandos tales como,
delete y update, debern ser implementadas en una futura versin, porque son instrucciones
que cualquier sistema utiliza. Y, con ello, se lograr completa transparencia para cualquier
aplicacin.
De igual modo, con respecto al desplazamiento de los datos hacia las particiones, la propuesta
de mejorar ese mecanismo deber ser analizada e implementada, el uso de la tecnologa
DATA PUMP puede optimizar la herramienta al tratar tablas muy pesadas.
Por ltimo, con respecto al interfaz de usuario, se propone continuar con el desarrollo de las
pantallas interactivas en formato HTML.
[ORA06] Oracle Database Concepts 11g Release 2 (11.2). E40540-02. Mayo 2014.
[ORA09] Oracle Database 2 Day Developer's Guide 11g Release 2 (11.2). E10766-
08. Enero 2014.
[ORA11] Oracle Database PL/SQL Packages and Types Reference 11g Release 2
(11.2). E40758-03. July 2013.
Enlaces en Internet
[WEB01] http://docs.oracle.com/cd/E11882_01/server.112/e40540/srvrside.htm#CNCPT318
[WEB02] http://www.informatica.com/us/products/application-ilm/data-subset/#fbid=KjwgbrtIVkM
[WEB03] http://www.informatica.com/us/data-archiving-magic-
quadrant/?ref=wwwbnrprdpg%20-%20fbid=KjwgbrtIVkM#fbid=KjwgbrtIVkM
[WEB04] http://www.gartner.com/technology/reprints.do?id=1-
1VDEQUO&ct=140611&st=sb&mkt_tok=3RkMMJWWfF9wsRonua3BcO%252FhmjTE
U5z17%252BsuXqGygIkz2EFye%252BLIHETpodcMS8NjNa%252BTFAwTG5toziV8R
7HNJc160s8QXBjm
[WEB05] http://www.oracle.com/technetwork/es/articles/database-performance/oracle-
partitioning-en-database-12c-2244565-esa.html
[WEB06] http://www.ansi.org/
Tomar en consideracin que todos los enlaces en Internet pueden cambiar en cualquier
momento despus de la fecha de publicacin de este informe (Diciembre 2014).
TRMINO DEFINICIN
BD Base de datos.
RE Resultado esperado.
SO Sistema operativo.
TI Tecnologa de la informacin.
http://www.gartner.com/technology/reprints.do?id=1-
1VDEQUO&ct=140611&st=sb&mkt_tok=3RkMMJWWfF9wsRonua3BcO%252FhmjTEU5z17%252Bsu
XqGygIkz2EFye%252BLIHETpodcMS8NjNa%252BTFAwTG5toziV8R7HNJc160s8QXBjm