viernes, 14 de octubre de 2016

Mi Primer Oracle Open World

Este año tuve la oportunidad de asistir al Oracle Open World 2016 San Francisco https://www.oracle.com/openworld/index.html
Era mi primera vez en San Francisco, mi primera vez en el OOW y la primera vez que iba a dar una presentación en ingles!.
La experiencia fue super enriquecedora y quede maravillada. Me encantó!. 
El evento se organiza en el Moscone Center http://www.moscone.com/site/do/index un centro de eventos que esta compuesto por 3 edificios que se dedican totalmente a Oracle y se realizan durante todos los dias permanentemente sesiones en paralelo, alrededor de 2000 sesiones en total. Asisten miles de personas de todo el mundo.
Mi presentación fue el Domingo 19/9 a las 9:15, el tema fue "Improving SQL Performance with SQL Profiles without Changing SQL Code". Tuve una gran cantidad de asistentes, alrededor de 140 personas!!. Entre ellos gente a la que admiro mucho como Carlos SierraMauro PaganoArup Nanda y Kamran Agayev.  
Al finalizar OTN Latinoamerica me hizo una entrevista y ya la publicó editada con paneos de mi presentación https://www.youtube.com/watch?v=8wfuw60-x_o&app=desktop
Mi presentación la pueden bajar los que se registraron en el OOW16 desde https://oracle.rainfocus.com/scripts/catalog/oow16.jsp?search=UGF5266&search.event=oracleopenworld y en breve la voy a agregar publica en este blog.
Ese dia a la noche me invitaron a la cena Oracle ACE Dinner por ser Oracle ACE Associate. Es super interesante tener la oportunidad de conocer y dialogar con otros ACE de todo el mundo. 
Al horario de la cena, estaba la apertura con Larry Ellison que me lo perdi, por suerte se pueden ver los videos On Demand de Open World Keynotes, JavaOne Keynotes, Executive Solutions Sessions y General Sessions https://www.oracle.com/openworld/on-demand/index.html
Con el pase full se tiene de lunes a jueves el almuerzo incluido. El martes a la noche Oracle organizó una cena para los asistentes de Latinoamerica donde tuve oportunidad de conocer gente y de encontrarme con conocidos. El miércoles a la noche Oracle organizó un recital que lo llama Oracle Appreciation Event, este año fue en el AT&T Park Gwen Stefani y Sting. Estuvo buenisimo!!
Asisti a muchas sesiones y varias meetings entre otras de Accenture, Bloggers, etc. Tuve oportunidad de hablar y tener contacto con profesionales de todo el mundo y con Product Managers de Oracle, ademas de asistir al Oracle Application User Expirience, un Tour programado para conocer el lab en Oracle HQ (Nave Nodriza) y las tendencias. 
Además de participar en estas actividades aproveche a conocer San Francisco que es una ciudad espectacular!
Aprovecho este blog para agradecer a todos mis compañeros de AROUG y en especial a Gustavo Gonzalez que gracias a su apoyo pude llegar a ser speaker en este evento.
Si tenes alguna vez la oportunidad de asistir a un Open World, no lo dudes, es una experiencia inolvidable!

Moscone Center
Mi presentación


Mi presentación
Con Arup Nanda


En el Hall de Exposiciones
Oracle ACE Dinner

Con Alex Zabala, Mauro Pagano, Carlos Sierra y Mike Dietrich

Tour Oracle User Experience




martes, 11 de octubre de 2016

OTN Appreciation Day : SQL Profiles

Los SQL Profiles son objetos de la base de datos persistentes en el diccionario de datos. Estos objetos son diferentes a otros objetos de la base porque no se crean con la sentencia "CREATE" como "CREATE TABLE" o "CREATE INDEX", estos objetos tienen que ser generados.
El objetivo de los SQL Profiles es mejorar la performance de los SQL sin modificar el código, y son implementados usando HINTS. Si bien con la vista dba_sql_profiles podemos ver los SQL Profiles creados no hay ninguna vista para ver los HINTS que continen.
Los SQL Profiles una vez generados tienen que ser aceptados para su implementación.
Un SQL Profile se genera e implementa para una sentencia SQL especifica. Una vez implementado, cada vez que ejecuta esa sentencia SQL el optimizador usa el SQL Profile para dicha sentencia y genera un mejor plan de ejecución.
Inicialmente fueron creados por Oracle en 10g para que sean generados por el SQL Tuning Advisor. Luego Carlos Sierra desarrollo un script coe_xfr_sql_profile dentro de su herramienta SQLT que genera SQL Profiles.
Se usan para dos situaciones diferentes:
1 - Cuando tenemos un problema de un SQL con alto consumo de recursos y el plan de ejecución mejoraría con un ajuste de estadisticas, cuando invocamos al SQL Tuning Advisor va a generar un SQL Profile.
2 - Cuando tenemos una sentecia SQL que cambia el elapsed time de un dia para el otro pasando a aumentarlo dramaticamente, el script coe_xfr_sql_profile encuentra el mejor plan de ejecución anterior en el AWR y genera un SQL Profile.

Hay varias diferencias entre los SQL Profiles generados por el SQL Tuning Advisor y los generados por el script coe_xfr_sql_profile.

SQL Profiles generados por SQL Tuning Advisor 
- Son HINTS que ajustan las estadisticas para que el optimizador elija un mejor plan
- Son generados por el ATO (Automatic Tuning Optimizer) que es el optimizador en modo Tuning
- Tiene total dependencia con las estadisticas, si cambian las estadisticas ya quedan obsoletos estos ajustes y el optimizador puede elegir otro plan

SQL Profiles generados por el script coe_xfr_sql_profile
- Son Hints para reproducir un plan de ejecución específico
- Son generados por el script coe_xfr_sql_profile desde el mejor plan de ejecución para esa sentencia que encuentra en el AWR
- No tiene dependencia con las estadisticas, si cambian las estadisticas igual va a repodrocir el mismo plan

Para saber si un SQL esta usando un SQL Profile podemos verlo en su plan de ejecución en la sesion NOTE
Ejemplo:


SQL> select * from table(dbms_xplan.display_cursor);

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------
SQL_ID g3wubsadyrt37, child number 1
-------------------------------------
select count(*) from plan_stability where owner='SYS'

Plan hash value: 363261562

-------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 2476 (100)| |
| 1 | SORT AGGREGATE | | 1 | 6 | | |
|* 2 | TABLE ACCESS FULL| PLAN_STABILITY | 23092 | 135K| 2476 (1)| 00:00:30 |
-------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

2 - filter("OWNER"='SYS')

Note
-----

- SQL profile coe_g3wubsadyrt37_363261562 used for this statement



El SQLT se puede bajar desde MOS
Using Sqltxplain to create a 'SQL Profile' to consistently reproduce a good plan (Doc ID 1487302.1)
o del Blog de Carlos Sierra
https://carlos-sierra.net/2012/04/09/custom-sql-profile-and-plan-stability-on-10g/


La otra forma de generar SQL Profiles manualmente no documentada por Oracle es importando los HINTS con el DBMS_SQLTUNE.IMPORT_SQL_PROFILE.

Este es mi post en agradecimiento a OTN, OTN Appreciation Day es una iniciativa de Tim Hall https://oracle-base.com/blog/2016/09/28/otn-appreciation-day/