Oracle Database 12c - Histogramas

Documentos relacionados
FUNCIONES EN SQL SERVER

Computación Web (Curso 2015/2016)

Grandes volúmenes de datos Plan de ejecución. bases de datos

Grandes volúmenes de datos Plan de ejecución. bases de datos

Diccionario de Datos. Boletín 7

Nociones de performance

Una luz dentro del mundo oculto de las estadísticas de SQL Server

Procesamiento de Consultas. Carlos A. Olarte BDII

Consideremos el siguiente ejemplo que crea y se inserta en las tablas que definen la identidad basada en la clave principal como un índice agrupado:

Lenguaje de manipulación de datos

Linux Error 29: Illegal Seek

Máster en Data Analytics SQL

Restricción y Clasificación de los Datos. Copyright Oracle Corporation, All rights reserved.

SELECT listadecampos FROM nombredetablas WHERE condicionesdebúsqueda;

CC BASES DE DATOS OTOÑO Clase 5: SQL (II) Aidan Hogan

Hybrid Columnar Compression HCC en Oracle Exadata

ÍNDICE. Introducción... Capítulo 1. Características, instalación, inicio y entorno de trabajo... 1

SQL. Amparo López Gaona. México, D.F. Noviembre 2003

1. DML. Las consultas de resumen

CC BASES DE DATOS OTOÑO 2018

Datos Agregados por medio de Funciones de Grupo. Copyright Oracle Corporation, All rights reserved.

Diseña y Administra Bases de Datos Guía de Estudio

Insertar Datos en Tablas

CC BASES DE DATOS PRIMAVERA Clase 7: SQL (II) Aidan Hogan

Agrupamiento de registros. Elaboración de claúsulas avanzadas de selección. 31/12/2011. Unidad 9

OPTIMIZADOR ORACLE. 1. La meta: escoger el modo más eficiente de ejecutar una declaración S.Q.L. FILTER 2 NESTED LOOPS

o SUM: suma los valores del campo que especifiquemos. Sólo se puede utilizar en columnas numéricas.

Capítulo 7. Optimización de consultas

BEST PRACTICES DE RDBMS RECOLECCIÓN DE ESTADÍSTICAS EN BASES DE DATOS ORACLE

Maestría en Bioinformática. Bases de Datos y Sistemas de Información SQL: SELECT. Ing. Alfonso Vicente, PMP

Crear BD en. Isis Bonet Cruz, PhD

Serie de consulta LONGO Sql - 1 -

Manual de Sentencias Básicas en SQL

Unidad IV. Aplicaciones sobre Base de Datos

Bases de Datos: Structured Query Language (SQL)

Herramientas para la optimización

ÍNDICE. Introducción... Capítulo 1. Novedades de Access

BASES DE DATOS I CONSULTA DE DATOS

Taller SQL - SUP. Introducción al Lenguaje SQL. Claúsula Where. Sentencia Select Sentencia Insert Sentencia Update Sentencia Delete

Data source name: Nombre por el que se conocerá la conexión ODBC y que será usado en los distintos clientes del driver ODBC.

LENGUAJE DE CONSULTA ESTRUCTURADO (SQL)

Los DLL que permiten crear y definir nuevas bases de datos, campos e índices.

Generación Comentarios de Campos de Tablas en Oracle 9i

SQL, Consultas. Son Importantes las Consultas? Cuál es el Resultado de SELECT? Andrés Moreno S.

Create Database ClaseAutos. Use ClaseAutos

Introducción 1 Recuperación de Datos mediante la Sentencia SQL SELECT

1. Lenguaje de Definición de Datos. 2. Lenguaje de Manipulación de. Datos. M. C. Gustavo Alfonso Gutiérrez Carreón

6.1 Introducción. Fund. Bases de Datos Ing. Felipe Alanís González -ITD- 1

TRANSACT-SQL, DISEÑO Y PROGRAMACIÓN DE BASES DE DATOS EN SQL SERVER 2008

Tema 4. DML (Parte I)

RESUMEN SQL. Tipo de coincidencia Modelo Planteado Coincide No coincide. Varios caracteres 'ab*' 'abcdefg', 'abc' 'cab', 'aab'

Bases de Datos. Práctica 7 WinRDBI. Consultas en cálculo relacional y SQL

El Lenguaje SQL TEMA V. Grupo de Bas ses de Datos Avanzadas Univ. Carlo os III de Madrid. V.1 SQL como Lenguaje de Definición de Datos

INTRODUCCIÓN A LAS BASES DE DATOS. L.I Gerardo Benavides Pérez

SQL SERVER SQL Server 2005 permite tres tipos de operaciones con conjuntos: UNION, disponible en todas las versiones de SQL Server.

SINTAXIS DE SQL-92. <definición de esquema >::= CREATE SCHEMA <cláusula de nombre de esquema> [ <elemento de esquema>... ]

Bases de datos relacionales y SQL

Subconsultas Multi-Columna. Copyright Oracle Corporation, All rights reserved.

Procedimientos para agrupar y resumir datos

OpenOffice & Postgres

El SQL es un lenguaje estándar de programación para el acceso a bases de datos.

Diseño de bases de datos

Bases de Datos SQL - Ejemplos

Conexión a la base desde OO. OpenOffice & Postgres. Conexión a la base desde OO. Conexión a la base desde OO. Conexión a la base desde OO

SQL (DML) Carlos A. Olarte Gestión y Modelación de SQL Datos (DML)

Bases de datos relacionales y SQL

PROGRAMANDO BASES DE DATOS PostgreSQL INTRODUCCIÓN INTRODUCCIÓN A LAS BASES DE DATOS (L1)

Uso de SQL. "WHERE id = " + cuentas[i].getid() o bien ResulSet r =s.executequery("select nombre FROM alumno" + "WHERE id = " + cuentas[i].

BASES DE DATO TO I VISTAS curso 2008

Modulo I: Introducción Gestores de Bases De Datos

MANUAL BÁSICO DEL LENGUAJE SQL

Estudio del tiempo de ejecución de consultas MDX en modelos en estrella y de tabla plana

TEMA 4.6: Procesamiento y optimización de consultas

Velneo ODBC Driver V7

S.Q.L. (Lenguaje de Consulta Estructurada)

SQL SERVER Curso Teórico-Práctico

CUBE, ROLLUP, GROUPING del SQL

Temario. Índices simples Árboles B Hashing

Consultas SQL II. Diego Egüez. Universidad San Francisco de Quito (USFQ)

Desarrollo Web en Entorno Servidor

MANUAL BÁSICO DEL LENGUAJE SQL

BASES DE DATOS SQL MÁS S DE SQL (DML) OPERADOR UNION (L30) <SELECT1> UNION <SELECT2> UNION <SELECTN> Copyright 2006, 2007 Instituto Gala

Índice de contenido. Velneo ODBC Driver 20. Telf. (+34) velneo.es

m046a Curso Consultando SQL Server 2005/2008 con Transact-SQL, 15 h

TEMA 4.. CONSULTA DE DATOS I.

Laboratorios de BASES DE DATOS. (I.T. Informática)

SQL. Dra. Amparo López Gaona () Posgrado en Ciencia e Ingeniería de la Compu. Abril 2012 / 14

Índice de contenido. Velneo ODBC Driver Telf. (+34) velneo.es

MATERIAL INTRODUCTORIO ORACLE 11G

Base de datos Oracle: Arquitectura Oracle. Arquitectura. Marzo Luis Vinuesa Martínez

Access SQL: DDL y DML. Una empresa de Ingeniería precisa una base de datos para la gestión de sus proyectos.

INSTITUCIÓN EDUCATIVA GABRIEL GARCIA MÁRQUEZ BASE DE DATOS. DESARROLLO DE SOFTWARE Página 1 de 28 SQL SQL

SQL (Structured Query Language)

Transcripción:

Oracle Database 12c - Histogramas Gaston Aprile Mail to: gaaprile@cl.ibm.com gasaprile@gmail.com 2016 2015 IBM Corporation

Contenido Performance Que son las estadísticas? Que son los Histogramas? Tipos de Histogramas Como calcularlos? Cuando usamos Histogramas? 18 November 2016 2

Si una consulta tarda 15 horas la consulta no es performante? El objetivo es comprender porque son 15 horas 18 November 2016 3

Que son las estadísticas? La estadística es información que colecta la Base de Datos relacionada a los objetos y por la cual el optimizador toma sus decisiones al momento de la ejecución de consultas. 18 November 2016 4

Que son los Histogramas? Son datos estadísticos que reflejan la distribución de la información dentro de una tabla. Esto quiere decir, conoce como es la distribución de los datos dentro de los campos de la tabla. Buckets 254 (11.2)/ 2048 pero con 254 default (en 12.1) 18 November 2016 5

Tipos de Histogramas Frecuency (pre-12c) Height-Balanced (pre-12c) Top Frecuency (nuevo en 12c) Hybrid (nuevo en 12c) 18 November 2016 6

Tipos de Histogramas - Frecuency (pre-12c) El número de Buckets es igual al número de Distinct Values El End_Point_Number es el número del Bucket. Representa el valor numérico en sí acumulado de la frecuencia. El End_Point_Value muestra una representación numérica del valor en sí del número del Bucket. En el caso de valores no-numéricos, los valores de los histogramas se transforman a un valor numérico. 18 November 2016 7

Tipos de Histogramas - Frecuency (pre-12c) SQL> set linesize 220 pages 10000 SQL> select valor2, count(1) from table group by valor2 order by valor2; VALOR2 COUNT(1) ---------- ---------- 101 8 102 25 103 68 104 185 105 502 106 212 6 rows selected. SQL> SELECT endpoint_value, endpoint_number, endpoint_number - LAG(endpoint_number, 1, 0) OVER (ORDER BY endpoint_value) AS frequency FROM user_tab_histograms WHERE table_name = 'TABLA' AND column_name = 'VALOR2' ORDER BY endpoint_value; ENDPOINT_VALUE ENDPOINT_NUMBER FREQUENCY -------------- --------------- ---------- 101 8 8 102 33 25 103 101 68 104 286 185 105 788 502 106 1000 212 Nombre del Bucket Es la cantidad de valores en el Bucket Buckets 6 rows selected. 18 November 2016 8

Tipos de Histogramas - Frecuency (pre-12c) explain plan set statement_id '101' for select * from tabla where valor2 = 101; explain plan set statement_id '102' for select * from tabla where valor2 = 102; explain plan set statement_id '103' for select * from tabla where valor2 = 103; explain plan set statement_id '104' for select * from tabla where valor2 = 104; explain plan set statement_id '105' for select * from tabla where valor2 = 105; explain plan set statement_id '106' for select * from tabla where valor2 = 106; select statement_id, cardinality from plan_table where id = 0; STATEMENT_ID CARDINALITY ------------------------------ ----------- 101 8 102 25 103 68 104 185 105 502 106 212 6 rows selected. explain plan set statement_id '105' for select * from tabla where valor2 = 105; --------------------------------------------------------------------------- Id Operation Name Rows Bytes Cost (%CPU) Time --------------------------------------------------------------------------- 0 SELECT STATEMENT 502 130K 12 (0) 00:00:01 * 1 TABLE ACCESS FULL TABLA 502 130K 12 (0) 00:00:01 --------------------------------------------------------------------------- 18 November 2016 9

Tipos de Histogramas - Frecuency (pre-12c) Que pasa cuando el valor2 no existe en el histograma? explain plan set statement_id '090' for select * from tabla where valor2 = 90; explain plan set statement_id '103.5' for select * from tabla where valor2 = 103.5; explain plan set statement_id '111' for select * from tabla where valor2 = 111; select statement_id, cardinality from plan_table where id = 0; STATEMENT_ID CARDINALITY ------------------------------ ----------- 090 1 103.5 4 111 1 3 rows selected. Si el valor está entre el mínimo y el máximo el optimizador toma el histograma con menor valor y lo divide por 2. En nuestro caso el Bucket 101 tiene 8 valores, por la cual la cardinalidad es 4 Si el valor esta fuera del mínimo y el máximo dependerá de la distancia entre el mínimo valor y el máximo valor respecto a la frecuencia 18 November 2016 10

Tipos de Histogramas - Height-Balanced (pre-12c) La cantidad de Buckets es menor a la cantidad de Distinct Values Se agrega el Bucket 0 para indicar el valor mínimo de los histogramas El Endpoint_Value intenta representar el valor de la columna dentro del Histograma El Endpoint_Number muestra el número del Bucket Cada Bucket representa un rango de valores que contienen aproximadamente la misma cantidad de registros. 18 November 2016 11

Tipos de Histogramas - Height-Balanced (pre-12c) SQL> exec dbms_stats.gather_table_stats( ownname => 'SH', tabname => 'CUSTOMERS', estimate_percent => 100,method_opt => 'FOR ALL COLUMNS SIZE 254',cascade => true); SQL> select count(distinct CUST_CITY_ID) from sh.customers group by 1; COUNT(DISTINCTCUST_CITY_ID) --------------------------- 620 SQL> SELECT count(1) FROM dba_tab_histograms WHERE owner = 'SH' and table_name = 'CUSTOMERS' AND column_name = 'CUST_CITY_ID'; COUNT(1) ---------- 212 18 November 2016 12

Tipos de Histogramas - Height-Balanced (pre-12c) SELECT owner, table_name, column_name, endpoint_number, endpoint_value FROM dba_tab_histograms WHERE owner = 'SH' and table_name = 'CUSTOMERS' AND column_name = 'CUST_CITY_ID' ORDER BY endpoint_value; OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ENDPOINT_VALUE ----- ---------- -------------------- --------------- -------------- SH CUSTOMERS CUST_CITY_ID 0 51040 SH CUSTOMERS CUST_CITY_ID 1 51043 SH CUSTOMERS CUST_CITY_ID 2 51044 SH CUSTOMERS CUST_CITY_ID 3 51046 SH CUSTOMERS CUST_CITY_ID 4 51049 SH CUSTOMERS CUST_CITY_ID 5 51053 SH CUSTOMERS CUST_CITY_ID 6 51055 SH CUSTOMERS CUST_CITY_ID 7 51057 SH CUSTOMERS CUST_CITY_ID 8 51059 SH CUSTOMERS CUST_CITY_ID 9 51061 SH CUSTOMERS CUST_CITY_ID 10 51062 SH CUSTOMERS CUST_CITY_ID 11 51067 SH CUSTOMERS CUST_CITY_ID 14 51069 SH CUSTOMERS CUST_CITY_ID 15 51073 SH CUSTOMERS CUST_CITY_ID 17 51075 SH CUSTOMERS CUST_CITY_ID 18 51078 SH CUSTOMERS CUST_CITY_ID 19 51080 SH CUSTOMERS CUST_CITY_ID 20 51153 SH CUSTOMERS CUST_CITY_ID 21 51158 SH CUSTOMERS CUST_CITY_ID 22 51162 SH CUSTOMERS CUST_CITY_ID 23 51164 SH CUSTOMERS CUST_CITY_ID 25 51166 SH CUSTOMERS CUST_CITY_ID 26 51170 select CUST_CITY_ID, count(1) from sh.customers where CUST_CITY_ID between 51044 and 51046 group by CUST_CITY_ID order by 2 desc; CUST_CITY_ID COUNT(1) ------------ ---------- 51044 145 51045 158 51046 25 Un Bucket puede contener mas de un Distinct Value (2 vs 3) 18 November 2016 13

Tipos de Histogramas - Height-Balanced (pre-12c) El siguiente ejemplo es la estimación realizada por el optimizador cuando se utilizan Histogramas Heigth-Balance: explain plan set statement_id 'C52372' for select * from sh.customers where CUST_CITY_ID = 52372; Tiene 16 registros explain plan set statement_id 'C52374' for select * from sh.customers where CUST_CITY_ID = 52374; Tiene 238 registros explain plan set statement_id 'C51806' for select * from sh.customers where CUST_CITY_ID = 51806; Tiene 932 registros STATEMENT_ID CARDINALITY ------------------------------ ----------- C52372 66 C52374 66 C51806 874 18 November 2016 14

Tipos de Histogramas - Height-Balanced (pre-12c) El gran problema con los Histogramas Balanceados es que un cambio en la distribución de los datos dentro de la columna, puede dar lugar a que un Valor pase a ser Popular por la cual la estimación de la Cardinalidad en el cálculo del plan de ejecución cambia rotundamente: SQL> col owner format a5 col table_name format a10 col column_name format a20 select owner, table_name, column_name, endpoint_number, endpoint_value, Jumps, decode(jumps,1, 'Non-popular Value','Popular Value') as popular from ( SELECT owner, table_name, column_name, endpoint_number, endpoint_value,endpoint_number - LAG(endpoint_number, 1, 0) OVER (ORDER BY endpoint_value) AS Jumps FROM dba_tab_histograms WHERE owner = 'SH' and table_name = 'CUSTOMERS' AND column_name = 'CUST_CITY_ID' ORDER BY endpoint_value) where endpoint_value in (51806, 52372, 52374) order by endpoint_value; OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ENDPOINT_VALUE JUMPS POPULAR ----- ---------- ------------- --------------- -------------- ------ ------------- SH CUSTOMERS CUST_CITY_ID 142 51806 4 Popular Value (numrows_tabla)*(num_de_endpoints_del_valor/total_endpoints) SH CUSTOMERS CUST_CITY_ID 228 52374 1 Non-popular Value (numrows_tabla) * density 0 +certero y 1 certero (La densidad se puede ver en la vista DBA_TAB_COLUMNS) 18 November 2016 15

Tipos de Histogramas - Top Frecuency (nuevo en 12c) Se basan en los Histogramas Frecuencia Para que los Top-Frecuency sean útiles, el numero de valores Populares tiene que ser al mayor o igual al número de Buckets generados, cuando los valores No-Populares tienden a ser descartados El % de registros Populares tiene que ser mayor al % P -> (1-(1/n))*100, donde n es el número de Buckets 18 November 2016 16

Tipos de Histogramas - Top Frecuency (nuevo en 12c) SQL> select registro, count(1) from tabla3 group by registro order by 1; REGISTRO COUNT(1) ---------- ---------- 1 1064 2 1149 3 1107 4 1190 5 1128 6 1040 7 1138 8 1083 9 1091 9991 1 9992 1 9993 1 9994 1 9995 1 9996 1 9997 1 9998 1 9999 1 10000 1 19 rows selected. 18 November 2016 17

Tipos de Histogramas - Top Frecuency (nuevo en 12c) set linesize 220 pages 1000 col owner format a6 col table_name format a10 col column_name format a20 select owner, table_name, column_name, endpoint_number, endpoint_value, Jumps, decode(jumps,1,'non-popular Value','Popular Value') as Popular from ( SELECT owner, table_name, column_name, endpoint_number, endpoint_value,endpoint_number - LAG(endpoint_number, 1, 0) OVER (ORDER BY endpoint_value) AS Jumps FROM dba_tab_histograms WHERE owner = 'SYSTEM' and table_name = 'TABLA3' AND column_name = 'REGISTRO' ORDER BY endpoint_value) order by endpoint_value; OWNER TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ENDPOINT_VALUE JUMPS POPULAR ------ ---------- -------------------- --------------- -------------- ---------- ----------------- SYSTEM TABLA3 REGISTRO 1064 1 1064 Popular Value SYSTEM TABLA3 REGISTRO 2213 2 1149 Popular Value SYSTEM TABLA3 REGISTRO 3320 3 1107 Popular Value SYSTEM TABLA3 REGISTRO 4510 4 1190 Popular Value SYSTEM TABLA3 REGISTRO 5638 5 1128 Popular Value SYSTEM TABLA3 REGISTRO 6678 6 1040 Popular Value SYSTEM TABLA3 REGISTRO 7816 7 1138 Popular Value SYSTEM TABLA3 REGISTRO 8899 8 1083 Popular Value SYSTEM TABLA3 REGISTRO 9990 9 1091 Popular Value SYSTEM TABLA3 REGISTRO 9991 10000 1 Non-popular Value 10 rows selected. SQL> 18 November 2016 18

Tipos de Histogramas - Hybrid (nuevo en 12c) Combina características de los Histogramas de Frecuencia y los Balanceados Cada Distinct Value es asociado a un Bucket. El concepto de Popular Value no existe Por lo tanto, cada Bucket tiene un número distinto de registros Oracle 12c tiende a utilizar los Histogramas Híbridos en lugar a los Balanceados Agrega el concepto de Endpoint_repeat_count que indica la cantidad de veces que un Endpoint_value se repite dentro del Bucket 18 November 2016 19

Tipos de Histogramas - Hybrid (nuevo en 12c) set linesize 220 pages 1000 col owner format a6 col table_name format a10 col column_name format a20 select owner, table_name, column_name, endpoint_value, endpoint_number, endpoint_repeat_count from dba_tab_histograms WHERE owner = 'SYSTEM' and table_name = 'TABLA4' AND column_name = 'REGISTRO'; OWNER TABLE_NAME COLUMN_NAME ENDPOINT_VALUE ENDPOINT_NUMBER ENDPOINT_REPEAT_COUNT ------ ---------- ----------------- -------------- --------------- --------------------- SYSTEM TABLA4 REGISTRO 1 47 47 SYSTEM TABLA4 REGISTRO 2 102 55 SYSTEM TABLA4 REGISTRO 3 148 46 SYSTEM TABLA4 REGISTRO 4 188 40 SYSTEM TABLA4 REGISTRO 5 240 52 SYSTEM TABLA4 REGISTRO 6 314 74 SYSTEM TABLA4 REGISTRO 7 361 47 SYSTEM TABLA4 REGISTRO 8 415 54 SYSTEM TABLA4 REGISTRO 9 470 55 SYSTEM TABLA4 REGISTRO 10 511 41 SYSTEM TABLA4 REGISTRO 11 575 64 SYSTEM TABLA4 REGISTRO 12 629 54 SYSTEM TABLA4 REGISTRO 13 675 46 SYSTEM TABLA4 REGISTRO 14 723 48 SYSTEM TABLA4 REGISTRO 15 769 46 SYSTEM TABLA4 REGISTRO 16 810 41 SYSTEM TABLA4 REGISTRO 17 878 68 SYSTEM TABLA4 REGISTRO 18 934 56 SYSTEM TABLA4 REGISTRO 19 975 41 SYSTEM TABLA4 REGISTRO 20 1030 55 SYSTEM TABLA4 REGISTRO 21 1077 47 SYSTEM TABLA4 REGISTRO 22 1131 54 SYSTEM TABLA4 REGISTRO 23 1177 46 La información que tiene el Histograma Hibrido es mas completa en comparación con el Histograma Balanceado SQL> select * from ( select registro, count(1) from tabla4 group by registro order by 1) REGISTRO COUNT(1) ---------- ---------- 1 47 2 55 3 46 4 40 5 52 6 74 7 47 8 54 9 55 10 41 11 64 12 54 13 46 14 48 15 46 16 41 17 68 18 56 19 41 20 55 18 November 2016 20

Como calcularlos? FOR ALL COLUMNS SIZE AUTO Generarahistogramaspara todacolumnaque detecte que los datos no son Uniformes FOR ALL COLUMNS SIZE REPEAT Re-Generara los histogramas para las columnas que ya tenga histogramas generados previamente METHOD_OPT=>'FOR COLUMNS REGISTRO SIZE 10 Le indicamosque para la columna registro, genere 10 Buckets METHOD_OPT=>'FOR COLUMNS SIZE 1 Forzamosa la No generaciónde Histogramas La información de como se utilizan las columnas se encuentra en la vista SYS.COL_USAGE$. La próxima vez que se generen estadísticas, el paquete DBMS_STATS consultará la vista y determinará si se necesitan histogramas. Si la tabla nunca se uso, nunca habrá información en la COL_USAGE$. 18 November 2016 21

Cuando usamos Histogramas? SI tener Histogramas En columnas que aparecen en el Where de Querys En columnas donde la distribución no es uniforme No tener Histogramas Cuando en el Where se utilizan Binds La información en la columna esta distribuida de manera uniforma En columnas donde no aparecen en los Where de Querys En columnas Unique 18 November 2016 22

18 November 2016 23