Este es el segundo año que asisto al evento de OUG 2016 en Irlanda (Dublín). Este año hemos tenido charlas durante dos días consecutivos, lo que está muy bien. Sin embargo, una buena parte de las charlas eran de nivel bastante introducción o alto nivel. Aun así, es probablemente el mejor evento Oracle que hay en este país. Os hago un resumen de los seminarios que pude asistir.
Agenda Oficial -> Link
Oracle Application Express for the CIO, Business User, DBA & Developer. Really.
Oracle sigue insistiendo sobre las posibilidades de APEX (versión actual 5.0). Es cierto que es un framework bastante potente y al estar integrado totalmente en Oracle, el acceso a los datos es trivial. Durante la presentación, el orador hizo uso las notificaciones de Apple Push a través de Apex para recibir mensajes personalizados al realizar ciertas acciones en la aplicación Web. Merece la pena destacar que este producto es gratis siempre y cuando tengas licencia de Oracle y está totalmente soportado. No sólo está dirigido a DBAs, sino también a Developers y usuarios de Negocio (ej. para Reporting). Convertir una hoja de cálculo Excel en una aplicación es cuestión de unos cuantos clicks. Importaríamos un fichero XLS, y automáticamente todos los datos estarían disponibles a través de la BD con todos los beneficios que ellos tiene (seguridad, disponibilidad, respaldado por copias de seguridad, …)
Oracle Apex 5.1 New Features (Blog)
Oracle Apex 5.1 no está disponible todavía en el mercado pero trae importantes mejores. Yo utilizao actualmente la versión 4.2 para automatizar una serie de despliegues en producción a modo de Self Service, y sólo con ver las posibilidades del tema Universal en la versión 5.0 ya impresiona. La versión 5.1 es mucho mas «responsive» (adaptable a los cambios), compatible con varias plataformas (móvil, web, …) y puede ser editada en tiempo real con la opción de «Live Template». Además incluye un componente nuevo de edición multi-fila para poder editar un celdas individuales en vez de filas. Muy necesario.
Strace, Perf & GDB – Three Friends for the DBA
Kamil Stawariarski, tipo divertido, comenzó la presentación presentación con una pregunta complicada. Existe alguna relación entre el tamaño de ASM AU (Allocation Unit) y el parámetro db_file_multiblock_read_count? La respuesta corta es NO pero el profundiza con la herramienta strace y encuentra algo muy interesante. Aparentemente la BD utiliza al principio Synch IO (cuando no debería al estar usando ASM), pero después de unos cuantos SELECT, la BD cambia a modo ASYNCH. Parece ser que la base de datos es capaz de aprender y acaba utilizando Asynch IO sin necesidad de reiniciar o modificar ningún parámetro.
Para finalizar la presentación, nos mostró un ejemplo del uso de GBD para confirmar cuántas veces se ejecuta una función PLSQL dentro de una query. Demostrando que debemos tener cuidado con este tipo de funciones dentro del predicado ya que es posible que se se ejecute con cada fila bajando el rendimiento total de la consulta. Para solucionar el problema, utilizó la clausula PRAGMA UDF. De esta forma, la función es embebida dentro de la ejecución de la query acortando el tiempo total una barbaridad.
Write Less (Code) with More (Oracle 12c New Features) (Presentación)
Oren Nakadimon (from db-oriented.com) nos enseñó una serie de casos de uso donde podemos usar las nuevas funciones de Oracle 12c. Podéis echar un vistazo a la presentación para yo destacaría los siguientes ejemplo:
- SQL Loader Express Mode. Ahora no necesitamos el fichero de control CTL. Oracle reconoce el patrón del fichero basado en la estructura de la taba destino. Si esto nos falla, siempre podemos recurrir al fichero CTL.
- Columnas de tipo IDENTITY columns para tener un valor incremental de forma automática. Reemplaza el método tradicional de tener que utilizar un trigger.
- Paginación (FETCH FIRST n ROWS). Esta posibilidad que lleva eones disponible en MySQL por fin está disponible en Oracle 12c.
ASH Masters (Presentación)
Los chicos de Delphix han creado un repositorio Github con varios scripts relaciones con ASH (Active Session History). Como es posible que sepáis, cada segunda se realiza una captura de toda la información de V$SESSION en un buffer circular en memoria. Esta estructura se puede consultar a través de V$ACTIVE_SESSION_HISTORY. Es una gran herramienta para diagnosticar un problema en el pasado (ej. quién estaba bloqueando a tal usuario, cuánto tiempo ha estado corriendo, qué SQL_ID estaba ejecutando, etc…).
Recordad que 1 de cada 10 registros en el ASH se bajan a disco al repositorio AWR (accesible a través de DBA_HIST_ACTIVE_SESS_HISTORY). La retención de esta información es por defecto 8 días, pero podéis (y deberías) incrementarlo por lo menos a 32. La razón de tal número (32) es para que podáis retroceder en el tiempo al menos un mes (31+1).
The Heart of Oracle – How the Core Architecture Works (Presentación)
Martin Wildlake (ORA600) es una persona con mucho conocimiento en Oracle. Su presentación acerca de la arquitectura de Oracle fue interesante para refrescar conceptos. No introdujo nada nuevo que no exista en la documentación oficial, pero no está mal de vez en cuando recorrer las estructuras de la memoria SGA, como funciona un db_file_sequential_read y cositas así.
Oracle Database Consolidation: It’s Not All About Oracle Database 12c! (Link)
Tim Hall (oracle-base.com), gran personalidad, ofreció una introducción de alto nivel acerca de la consolidación en Oracle. Como se aprecia en el título, no todo es acerca de Multitenant en Oracle 12c ya que hay muchos métodos y muy antiguos. Si tuviera que resumir la presentación en unas pocas palabras, diría que «consolida, pero con cabeza y planificación». También nos recomienda que utilicemos la consolidación más apropiada para nuestra empresa, no caigamos en los argumentos de los vendedores y promesas de los «bloggers».
Ejemplo de consolidación:
- Visualization (VMWare)
- Containers (Solaris)
- Multitenant (Oracle 12c)
- Esquemas (enfoque clásico)
- Oracle Cloud. Oracle no da acceso a la cuenta de SYS. En vez de eso, proporcionan un API para hacer las tareas administrativas que podamos necesitar.
Most Common Database Misconfigurations
El veterano DBA, Joze Senegacnik (DbProf), hizo un recorrido de casos reales acerca de fallos de configuración con resultados desastrosos. Varios ejemplos:
- Un sistema con un número altísimo de conexiones por segundo. Este suele ser un ejemplo de una mala configuración en la parte de la aplicación/middleware. Oracle no instrumenta el proceso de autenticación pero consume una gran cantidad de CPU. Más de una conexión por segundos en general es malo y debe evitarse.
- Otra vez, vemos el ejemplo de PRAGMA UDF y como nos puede ayudar con las funciones definidas por el usuario.
- Un alto grado de paralelismo puede matar el sistema. Como buena práctica, el grado máximo de paralelismo no debería superar el doble del número de cores disponibles en el sistema (o disponibles en la BD).
- Una consulta en paralelo que pasa a un INSERT en modo «serial» genera un cuello de botella (evento «PX gref latch»).
- DML fila a fila cuando puedes utilizar algún mecanismo Bulk. Como Tom Kyte dice «row by row, slow by slow», que traducido al Español sería «fila a fila, paso lento a paso lento».
Oracle Hacking session (Presentación 1 – Presentación 2)
Kamil Stawariarski, en su segunda presentación, nos demostró como hacer una escalada de privilegios desde un aparente inofensivo GRANT (CREATE ANY INDEX) hasta convertirse en DBA. Wow! Así de fácil. En la segunda demo, hace uso de las tablas EXTERNAL para ejecutar un script bash localmente el servidor de la base de datos.
Real-Time Big Data Delivery with GoldenGate
Seminario acerca de las posibilidades de replicación de Oracle GoldenGate dentro de Big Data ofrecido por John Mullis. La versión 12.2 es capaz de mover data hasta Hive, Hbase, HDFS, Flume y Kafka. El truco que emplea para DML es añadir un registro con una columna extra para especificar si la acción es INSERT (I), UPDATE (U) o DELETE (D). Para poder tener una vista consolidada de los datos, necesitamos crear una vista Hive que nos permita ver los datos de forma consistente.
Just Don’t Do It
Jonathan Lewis, Top Guru de Oracle, nos mostró varios casos o arquetipos de problemas que se ha encontrado. No apto para todos los públicos 🙂 Os resumo varios de ellos.
- No siempre un FULL TABLE SCAN (FTS) es una mala práctica. El nos da un ejemplo de un caso en el que el culpable no era el tipo de acceso, ya que era necesario recorrer toda la tabla, sino que un valor pequeño del atributo arraysize provocaba que el cliente tuviera que recuperar datos en muchas iteraciones.
- Vigilad los updates no necesarios. Por ejemplo «UPDATE TABLE SET n=0» visitará todos los registros de la tabla aunque el valor de una fila ya sea cero. Podemos cambiar esto añadiendo una clausula WHERE -> «UPDATE TABLE SET n=0 WHERE NVL(state,0) != 0» donde previamente tendremos un índice funcional sobre dicho campo.
- Respecto al mito «Nunca hagas en PLSQL lo que puedes hacer en SQL», es incorrecto. En general es cierto, pero alguna veces PLSQL proporciona comprensión al código y facilita su mantenimiento. Tendríamos que corregir dicha frase a algo como «El grueso de la ejecución debería ejecutar en SQL para beneficiarse del motor de Oracle, pero nos podemos apoyar el PLSQL para simplificar el código y facilitar su lectura».
- Tened cuidado de la query «Brontosaurio». Haciendo referiencia a esta especie de dinosaurio, hay ciertas sentencias SQL que tienen pocos valores de entradas, producen pocos resultados, pero necesitan una gran cantidad de recursos. Es importante entender el trabajo que se realiza dentro de estas sentencias si queremos optimizarlas.
- Respecto a la frase «Nunca hagáis en PLSQL lo que podáis hacer SQL», no es del todo cierta. El explica que en general es cierto, pero en algunas ocasiones PLSQL proporciona comprensión al código, y si la mayor parte del procesamiento se hace con SQL no tiene nada de malo usar PLSQL.
SQLcl – Making SQL*Plus the Tool You Need for Development (Blog)
SQLcl está destinada a reemplazar SQL*Plus. Todavía no está certificada para producción (early stage) pero será 100% compatible SQL*Plus. Viene con un montón de buenas razones para usarla:
- Salida en formato JSON
- Nuevo comando Create Table As Select (CTAS emp emp2)
- Auto-completado para Table/Column (SIIIIIIII)
- Teclas Cursor Keys. Muchos DBAs usan rlwrap para tener esta funcionalidad.
- Comando DDL para sacar la definición de forma rápida para la mayoría de objetos.
Como podéis ver, parece que SQLcl es el SQL*Plus si lo desarrollaran a día de hoy. Ojo! No lo uséis en producción hasta que salga la versión final.
The Cost Based Optimizer – Any questions
Jonathan Lewis, Joze and Martin Widlake hicieron una ronda de preguntas abiertas a cualquier que quisiera preguntar acerca del optimizar CBO (basado de costes). Sólo pude quedarme a estas dos preguntas ya que casi pierdo del bus de vuelta a Cork 😉
- Qué significa el COSTE (COST) en un plan de ejecución? De modo sencillo, es la suma del tiempo/trabajo por linea dentro de un plan de ejecución. Es importante destacar que se trata «por cada linea» ya que algunas partes del plan puede ejecutarse muchas más veces de las esperadas y el coste real de ejecución puede ser muy diferente.
- Por qué el plan de ejecución cambia repentinamente y una consulta se vuelve «lenta»? Y quién no ha tenido este problema. Hay muchas posibles razones: un cambio en el histograma de una tabla puede dar lugar a varios planes de ejecución. También, para particiones basadas en rango, las estadísticas puede que no sean representativas para particiones recientes y el optimizador puede fallar al intentar dar con el plan óptimo. También puede haber problemas «por debajo» como network, almacenamiento, … Hay un número elevado de razones, por esto y otras razones las compañías todavia necesitan DBAs… por ahora.
Otras presentaciones
- Mastering the APEX Universal Theme – Roel Hartman
- How to Upgrade Your Application with No Downtime (& No Additional Costs) – Oren Nakdimon
- How to Use a Graph Database on Oracle NoSQL to Analyse & Segment Your Customer Base – Hans Viehman
- Mastering the APEX Universal Theme – Roel Hartman
- Top Five APEX Java Script API’s – Roel Hartman