Mostrando entradas con la etiqueta SQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta SQL. Mostrar todas las entradas

[ 2018-10-11 ]

ODC Appreciation Day: Minimizando contención con “scalable sequences” en Oracle 18c

Es la primera vez que participo en el Oracle Development Community Appreciation Day, promovido por Tim Hall  para contribuir con la comunidad publicando algo de información sobre la tecnología Oracle que utilizamos a diario. 
En mi caso, trataré en este artículo una nueva funcionalidad incorporada en el último release de Oracle Database 18c.

Con la versión 18.1, se ha introducido una nueva funcionalidad en la base de datos Oracle: Las  "secuencias escalables” o en inglés  "Scalable Sequences".
Se trata de la capacidad de poder crear secuencias escalables para mejorar el rendimiento durante la carga masiva de datos, en tablas que utilizan como claves el valor generado por una secuencia. Las secuencias escalables optimizan el proceso de generación de valores secuenciales mediante el uso de una combinación única del número de instancia y el número de sesión para minimizar la contención sobre los bloques “leaf” en índices durante cargas masivas. Esta es una de las pocas funciones que no es habilita automáticamente y requiere la intervención del DBA para garantizar que su implementación no afecte ni cambie la lógica de negocio necesaria.
Por su parte, desde el punto de vista de negocio, esta funcionalidad brinda una mejora notable en los procesos de carga masiva de datos al reducir, como comenté anteriormente, la contención generada al insertar  datos en tablas que utilizan valores de secuencia.
Al incorporar la capacidad de poder crear valores de secuencias con componente de instancia e identificadores de sesión agregados al valor propio de la secuencia, la contención en la generación  y en las inserciones en bloques de índice para los valores clave, se reduce significativamente. Esto significa que Oracle Database es aún más escalable para la carga de datos y puede admitir tasas de rendimiento en este tipo de operaciones todavía más altas.

[ 2018-06-29 ]

Como verificar, habilitar y deshabilitar paralelismo SQL a nivel sesión

Para saber si está habilitada o no la ejecución de sentencias SQL con paralelismo en nuestra sesión,  podemos consultar la vista v$session. Con sentencias SQL me refiero a operaciones DDL, DML o consultas (queries). Necesitamos como mínimo tener privilegios de select_catalog_role o SELECT sobre la vista para poder hacerlo.
Los campos que nos muestran la información necesaria son:

PDML_ENABLED y  PDML_STATUS: Indican si las operaciones DML en paralelo esta habilitadas o no (ENABLE/DISABLE). Por defecto están deshabilitadas (DISABLED).
PDDL_STATUS:  Indica si está habilitado o no (ENABLE/DISABLE)  el paralelismo para sentencias DDL. Por defecto está habilitado (ENABLED).
PQ_STATUS:  Indica si el “parallel query” está habilitado o deshabilitado (ENABLE/DISABLE).  Por defecto está habilitado (ENABLED)

Veamos un ejemplo de como consultar la vista:

SQL> select PDML_ENABLED, PDML_STATUS, PDDL_STATUS, PQ_STATUS
           from v$session where sid = (select sid from v$mystat where rownum = 1);

PDML_ENABLED PDML_STATUS PDDL_STATUS PQ_STATUS
------------ ----------- ----------- ---------
NO           DISABLED    ENABLED     ENABLED

[ 2017-12-10 ]

Usando AUTOTRACE en SQL Developer

Una de las opciones que tenemos para visualizar el plan de ejecución de una consulta SQL en SQL Developer es utilizando la herramienta "autotrace".
Históricamente, el uso de la variable de entorno AUTOTRACE en SQL*Plus es una de las formas más sencillas de obtener el "explain plan" de una sentencia SQL.
En SQL Developer, también se incorporó la posibilidad de utilizar esta opción.
Los siguientes video tutoriales nos muestran a grandes rasgos como utilizarla:

Query Tuning 101 How Run Autotrace in SQL Developer:

[ 2017-10-23 ]

Cómo utilizar SQLHC para análizar un SQL - Ejemplo práctico


En el post anterior: "Que es SQL Tuning Health-Check (SQLHC)?" hablamos sobre la herramienta SQLHC para analizar y mejorar consultas SQL.       
Ahora vamos a ver un ejemplo de como utilizar esta herramienta sobre una consulta real, y como ver e interpretar los resultados obtenidos.
Para nuestro ejemplo vamos a utilizar una base de datos 12cR1 en la cual creamos un esquema “demo” y una tabla “T1”
A continuación las sentencias utilizadas para la creación de la tabla que utilizaremos en la consulta de nuestro ejemplo:

[oracle@server01 dbs]$ sqlplus demo/demo

SQL> create table t1 ( c1 int, c2 int, c3 char(10) );
Table created.

SQL> begin
     for i in 1 .. 100000
       loop
         insert into t1 values ( i, dbms_random.value(1,500), dbms_random.string('L', 10) );
         end loop;
         commit;
     end;
    /

PL/SQL procedure successfully completed.

[ 2017-10-12 ]

Que es SQL Tuning Health-Check (SQLHC)?


SQL Tuning Health-Check, también conocido como SQLHC, es una herramienta de tuning SQL basada en scripts y desarrollada por Oracle Server Technologies Center of Expertise. Es un subconjunto de los SQL  utilizados por SQLTXPLAIN (SQLT), otra herramienta desarrollada por Carlos Sierra y que Oracle utiliza para diagnosticar sentencias SQL con bajo rendimiento.
SQLHC se utiliza fundamentalmente  para analizar y verificar el entorno en el cual se ejecuta una sentencia SQL en particular, verificando distintos factores como  ser, estadísticas de optimizador(CBO), metadatos de objetos, parámetros de configuración y demás elementos que pueden influir en la performance  de la sentencia SQL que está siendo analizada.
El objetivo principal es permitir que los usuarios puedan detectar y evitar los problemas previsibles,  que puedan afectar el rendimiento en la ejecución de un SQL,  garantizando de esta manera un entorno de ejecución lo más óptimo posible para un determinado query SQL.

Este utilitario es totalmente gratuito (FREE), pero debemos tener en cuenta que de acuerdo a las opciones que tenemos licenciadas en nuestra base de datos target, vamos a poder obtener menor o mayor información como resultado de la ejecución del script. Al ejecutar la herramienta tendremos que especificar alguna de las diferentes opciones de licenciamiento:

Oracle Pack License (Tuning, Diagnostics or None) [T|D|N] (required)
·         Tuning Pack (T)
·         Diagnostic Pack (D)
·         None (N) ninguna de las opciones disponibles.

En el caso de no pasar este parámetro (licenciamiento) durante la ejecución, nos lo será requerido de forma mandatoria:

SQL>@sqlhc 0j7vkwyr0a2st
Parameter 1:
Oracle Pack License (Tuning, Diagnostics or None) [T|D|N] (required)

[ 2017-09-23 ]

Identificando el SQL_ID de una consulta


En el siguiente artículo vamos a ver dos métodos para obtener el SQL_ID de una sentencia utilizando una parte del texto de la misma (o una secuencia que nos permita identificarla).
Previamente generé una tabla "T1" con dos campos "C1 y C2" y un único registro, esta tabla la voy a utilizar para realizar una consulta y poder ejemplificar el procedimiento.

Ejecutamos una consulta sobre la tabla:

SQL> select c1, c2 from t1;

        C1 C2
---------- --------------------
         1 AAA

Al ejecutarse el query, pasa por todas las fases normales de procesamiento: 
- análisis de la sintaxis (parsing)
- análisis de las variables (binding)
- ejecución (executing)
- recuperación de datos (fetching)
Entre otras cosas se genera el plan de ejecución y se le asigna un "SQL_ID" a la sentencia.

Ahora utilizando la siguiente consulta a la vista  v$sql, vamos a buscar en la shared pool, el SQL_ID de la sentencia ejecutada, indicándole una porción del texto para poder  filtrar por el campo SQL_TEXT:

SELECT sql_id, plan_hash_value, substr(sql_text,1,40) sql_text
      FROM  v$sql
      WHERE sql_text like '%<PORCION DE TEXTO A BUSCAR>%'

[ 2017-06-15 ]

Gestión de "Hints" utilizando SQL Patch

En este post Adding and Disabling Hints Using SQL Patch escrito por Nigel Bayliss
se comenta un poco sobre los cambios incorporados a la API de SQL Patch en 12c Release 2, en esta versión la interfaz se ha mejorado bastante y resulta más facil de utilizar.
Como novedades interesantes, el texto para hints "hint_text" es ahora de tipo CLOB en vez de un varchar2 como lo era hasta 12c R1, además l aAPI incluye un nuevo parametro para el SQL_ID.

Podemos verlo con mas claridad en la documentación:


DBMS_SQLDIAG.CREATE_SQL_PATCH (
    sql_text        IN   CLOB,
    hint_text       IN   CLOB,
    name            IN   VARCHAR2   := NULL,
    description     IN   VARCHAR2   := NULL,
    category        IN   VARCHAR2   := NULL,
    validate        IN   BOOLEAN    := TRUE)
RETURN VARCHAR2;

DBMS_SQLDIAG.CREATE_SQL_PATCH (
    sql_id          IN   VARCHAR2,
    hint_text       IN   CLOB,
    name            IN   VARCHAR2   := NULL,
    description     IN   VARCHAR2   := NULL,
    category        IN   VARCHAR2   := NULL,
    validate        IN   BOOLEAN    := TRUE)
RETURN VARCHAR2;


Como DBAs, es muy probable que muchas veces hayamos encontrado sistemas en los cuales muchisimas sentancias SQL utilizan "Hints" casi como una política o regla de desarrollo. A veces resulta interesante poder averiguar si estos "Hints" realmente están ayudando o no a la ejecución de la consulta y también poder demostrarle a un "team" de desarrollo, que no siempre es tan útil el micro-management del Optimizador de Oracle. A veces, es posible que también que sea necesario aplicar "hints" sobre la marcha.

[ 2015-05-11 ]

Extract DDL de uno o todos los tablespaces de una base de datos

Para hacer de manera rápida un extract DDL desde SQL*Plus, podemos utilizar la función GET_DDL del package DBMS_METADATA.

La forma sería la siguiente:

SET LONG 9000 — Para imprimir el string completo
select
     dbms_metadata.get_ddl('TABLESPACE',tablespace_name)
from
     dba_tablespaces
[where tablespace_name = '{tablespace_name}'];

Si queremos la DDL de todos los tablespace omitimos la cláusula "WHERE", en caso contrario indicamos de que tablespace/s queremoos obtener la sentencia.

[ 2014-07-15 ]

Curso de lenguaje SQL (Módulo VI)

Curso de lenguaje SQL es una serie de vídeos en los que se hace una introducción al lenguaje SQL utilizado en la base de datos Oracle. Todos los vídeos están publicados en Asterisco Más, el canal de YouTube de la Comunidad Oracle Hispana. La creación de este Blog fue hecha específicamente para dar un ordenamiento a las charlas y facilitar el acceso a todos los interesados. 
El curso esta divido en charlas teóricas presentadas por Fernando García y presentaciones prácticas a cargo de Clarisa Mamán Orfali. Por cada módulo se ha creado una lista de reproducción en YouTube. A su vez, se puede acceder a cada vídeo individual por tema desarrollado. Haz click en la imagen Indice de contenidos y podrás ver la estructura del curso completo.


Módulo 6
  1. Juntando tablas
  2. La cláusula NATURAL JOIN
  3. La cláusula JOIN USING
Curso de lenguaje SQL


[ 2014-07-10 ]

Curso de lenguaje SQL (Módulo V)

Curso de lenguaje SQL es una serie de vídeos en los que se hace una introducción al lenguaje SQL utilizado en la base de datos Oracle. Todos los vídeos están publicados en Asterisco Más, el canal de YouTube de la Comunidad Oracle Hispana. La creación de este Blog fue hecha específicamente para dar un ordenamiento a las charlas y facilitar el acceso a todos los interesados. 
El curso esta divido en charlas teóricas presentadas por Fernando García y presentaciones prácticas a cargo de Clarisa Mamán Orfali. Por cada módulo se ha creado una lista de reproducción en YouTube. A su vez, se puede acceder a cada vídeo individual por tema desarrollado. Haz click en la imagen Indice de contenidos y podrás ver la estructura del curso completo


Módulo 5
  1. Las funciones de grupo
  2. La función COUNT
  3. Las funciones SUM y AVG
  4. Las funciones MAX y MIN
  5. La cláusula GROUP BY
  6. La cláusula HAVING



[ 2014-07-08 ]

Curso de lenguaje SQL (Módulo IV)

Curso de lenguaje SQL es una serie de vídeos en los que se hace una introducción al lenguaje SQL utilizado en la base de datos Oracle. Todos los vídeos están publicados en Asterisco Más, el canal de YouTube de la Comunidad Oracle Hispana. La creación de este Blog fue hecha específicamente para dar un ordenamiento a las charlas y facilitar el acceso a todos los interesados. 
El curso esta divido en charlas teóricas presentadas por Fernando García y presentaciones prácticas a cargo de Clarisa Mamán Orfali. Por cada módulo se ha creado una lista de reproducción en YouTube. A su vez, se puede acceder a cada vídeo individual por tema desarrollado. Haz click en la imagen Indice de contenidos y podrás ver la estructura del curso completo

  1. Las funciones
  2. Las funciones LOWER, UPPER, INITCAP, CONCAT y LENGTH
  3. Las funciones LPAD, RPAD y TRIM
  4. Las funciones INSTR y SUBSTR
  5. La función REPLACE
  6. Las funciones ROUND y TRUNC
  7. Trabajando con fechas
  8. Las funciones SYSDATE, MONTHS_BETWEEN, ADD_MONTHS, NEXT_DAY y LAST_DAY
  9. Las funciones de conversión
  10. Las funciones NVL, NVL2 y NULLIF
  11. La función DECODE
  12. La expresión CASE


[ 2014-07-02 ]

Curso de lenguaje SQL (Módulo III)

Curso de lenguaje SQL es una serie de vídeos en los que se hace una introducción al lenguaje SQL utilizado en la base de datos Oracle. Todos los vídeos están publicados en Asterisco Más, el canal de YouTube de la Comunidad Oracle Hispana. La creación de este Blog fue hecha específicamente para dar un ordenamiento a las charlas y facilitar el acceso a todos los interesados. 
El curso esta divido en charlas teóricas presentadas por Fernando García y presentaciones prácticas a cargo de Clarisa Mamán Orfali. Por cada módulo se ha creado una lista de reproducción en YouTube. A su vez, se puede acceder a cada vídeo individual por tema desarrollado. Haz click en la imagen Indice de contenidos y podrás ver la estructura del curso completo

Módulo 3 (33 minutos)

  1. La cláusula WHERE (Demostración Práctica)
  2. Los operadores de comparación (Demostración Práctica)
  3. Los operadores booleanos (Demostración Práctica)
  4. Los operadores BETWEEN e IN
  5. El operador LIKE
  6. El operador IS NULL
  7. La cláusula ORDER BY 

Curso de lenguaje SQL


[ 2014-06-28 ]

Curso de lenguaje SQL (Módulo II)

Curso de lenguaje SQL es una serie de vídeos en los que se hace una introducción al lenguaje SQL utilizado en la base de datos Oracle. Todos los vídeos están publicados en Asterisco Más, el canal de YouTube de la Comunidad Oracle Hispana. La creación de este Blog fue hecha específicamente para dar un ordenamiento a las charlas y facilitar el acceso a todos los interesados. 
El curso esta divido en charlas teóricas presentadas por Fernando García y presentaciones prácticas a cargo de Clarisa Mamán Orfali. Por cada módulo se ha creado una lista de reproducción en YouTube. A su vez, se puede acceder a cada vídeo individual por tema desarrollado. Haz click en la imagen Indice de contenidos y podrás ver la estructura del curso completo.

Módulo 2 (1 hora 10 minutos)
  1. El comando SELECT (Demostración Práctica)
  2. Usuarios y esquemas (Demostración Práctica)
  3. El comando DESCRIBE (Demostración Práctica)
  4. La palabra clave DISTINCT (Demostración Práctica)
  5. Expresiones, literales y alias (Demostración Práctica)
  6. La tabla DUAL (Demostración Práctica)
  7. El valor NULL (Demostración Práctica)


[ 2014-06-10 ]

Curso de lenguaje SQL (Módulo I)

Curso de lenguaje SQL es una serie de vídeos en los que se hace una introducción al lenguaje SQL utilizado en la base de datos Oracle. Todos los vídeos están publicados en Asterisco Más, el canal de YouTube de la Comunidad Oracle Hispana. La creación de este Blog fue hecha específicamente para dar un ordenamiento a las charlas y facilitar el acceso a todos los interesados. 
El curso esta divido en charlas teóricas presentadas por Fernando García y presentaciones prácticas a cargo de Clarisa Mamán Orfali. Por cada módulo se ha creado una lista de reproducción en YouTube. A su vez, se puede acceder a cada vídeo individual por tema desarrollado. Haz click en la imagen Indice de contenidos y podrás ver la estructura del curso completo.

Módulo 1 (57 minutos)
  1. Introducción al lenguaje SQL (Demostración Práctica)
  2. Las tablas (Demostración Práctica)
  3. Historia y características del lenguaje
  4. Los comandos SQL
  5. Herramientas y Recursos (Demostración Práctica)
El módulo 1 incluye: Introducción al lenguaje SQL Las tablas Historia y características del lenguaje Los comandos SQL Herramientas y Recursos

[ 2014-01-15 ]