Sistema de base de datos relacionales – "Teradata database" (página 4)
LA DECLARACIÓN EXPLAIN
Teradata SQL provee
una muy poderosa sentencia EXPLAIN que permite ver el plan de
ejecución de una consulta.
La sentencia EXPLAIN no sólo explica
cómo una sentencia será procesada, proporciona
una estimación del número de las filas implicadas
y del impacto en el funcionamiento de la consulta.
Ejemplo de EXPLAIN con un simple "Join
Index"
CREATE TABLE customer (
c_custkey INTEGER,
c_name CHAR(26),
c_address VARCHAR(41),
c_nationkey INTEGER,
c_phone CHAR(16),
c_acctbal DECIMAL(13,2),
c_mktsegment CHAR(21),
c_comment VARCHAR(127)
)
UNIQUE PRIMARY INDEX( c_custkey );
CREATE TABLE orders (
o_orderkey INTEGER NOT NULL,
o_custkey INTEGER,
o_orderstatus CHAR(1),
o_totalprice DECIMAL(13,2) NOT NULL,
o_orderdate DATE FORMAT 'yyyy-mm-dd' NOT
NULL,
o_orderpriority CHAR(21),
o_clerk CHAR(16),
o_shippriority INTEGER,
o_commment VARCHAR(79)
)
UNIQUE PRIMARY INDEX(o_orderkey);
CREATE TABLE lineitem (
l_orderkey INTEGER NOT NULL,
l_partkey INTEGER NOT NULL,
l_suppkey INTEGER,
l_linenumber INTEGER,
l_quantity INTEGER NOT NULL,
l_extendedprice DECIMAL(13,2) NOT NULL,
l_discount DECIMAL(13,2),
l_tax DECIMAL(13,2),
l_returnflag CHAR(1),
l_linestatus CHAR(1),
l_shipdate DATE FORMAT 'yyyy-mm-dd',
l_commitdate DATE FORMAT 'yyyy-mm-dd',
l_receiptdate DATE FORMAT 'yyyy-mm-dd',
l_shipinstruct VARCHAR(25),
l_shipmode VARCHAR(10),
l_comment VARCHAR(44)
)
PRIMARY INDEX( l_orderkey );
La siguiente instrucción define un "join index"
sobre estas tablas:
CREATE JOIN INDEX order_join_line AS SELECT
(
l_orderkey, o_orderdate, o_custkey,
o_totalprice
), (
l_partkey, l_quantity, l_extendedprice,
l_shipdate
)
FROM lineitem
LEFT JOIN orders ON l_orderkey =
o_orderkey
ORDER BY o_orderdate
PRIMARY INDEX (l_orderkey);
La siguiente demostración de EXPLAIN muestra como el
optimizador usó el recientemente creado "join index"
order_join_line, aun cuando allí no es ninguna
referencia al índice en el texto
SQL.
EXPLAIN
SELECTo_orderdate, o_custkey, l_partkey,
l_quantity,
l_extendedprice
FROM lineitem , orders
WHERE l_orderkey = o_orderkey;
Explanation
————————————————————–
1) First, we lock a distinct LOUISB."pseudo table"
for read on a Row Hash to prevent global deadlock for
LOUISB.order_join_line.
2) Next, we lock LOUISB.order_join_line for
read.
3) We do an all-AMPs RETRIEVE step from join index
table LOUISB.order_join_line by way of an all-rows scan with
a condition of ("NOT (LOUISB.order_join_line.o_orderdate IS
NULL)") into Spool 1, which is built locally on the AMPs. The
input table will not be cached in memory, but it is eligible
for synchronized scanning. The result spool file will not be
cached in memory. The size of Spool 1 is estimated to be
1,000,000 rows. The estimated time for this step is 4 minutes
and 27 seconds.
4) Finally, we send out an END TRANSACTION step to
all AMPs involved in processing the request.
DESARROLLO THIRD-PARTY
La base de
datos de Teradata soporta muchos productos de
software de
tercera persona. Los
dos componentes generales de productos soportados incluyen los
de la serie de Transparency y los productos nativos de
interfaz.
Productos TS/API
El producto de
la serie Transparency / Application Program Interface (TS/API)
proporciona una entrada entre los productos DB2 (MVS/TSO) y
SQL/DS (VM/CMS) y la base de datos de
Teradata.
TS/API permite una declaración del SQL
formulada para que DB2 o SQL/DS sea traducido a Teradata SQL
para permitir que DB2 o SQL/DS tengan acceso a los datos
almacenados en una base de datos de Teradata.
Capítulo VI: Distribución de los Datos y Métodos de Acceso
ÍNDICES DE TERADATA
Un índice es un mecanismo físico usado
para almacenar y acceder a las filas de una tabla. Los
índices en una base de datos relacional son muy
parecidos al índice de un libro
– aceleran el acceso a la información.
Teradata soporta los siguientes tipos de
índices:
- Primario
- Secundario
- Join
- Hash
ÍNDICES PRIMARIOS
Teradata sólo requiere un índice
primario para cada tabla. El método
más eficiente de acceso es a través de los
índices primarios.
Los índices primarios:
- Afectan la distribución de filas.
- No tienen subtablas.
- Pueden ser únicos o no
únicos. - Pueden ser particionados o no.
Índices primarios y Claves
primarias
Los valores
escogidos para un índice primario de una tabla son
frecuentemente los mismos valores identificados como claves
primarias durante la fase de modelamiento de datos, pero no
siempre es así.
Clave primaria | Índice |
Las restricciones son usadas para asegurar la | Un mecanismo físico de acceso |
Requeridos por Teradata si la | Requerido por Teradata |
Debe ser única | Puede ser única |
Los valores no pueden cambiar si se desea | Los valores pueden cambiar |
No puede ser nula | Puede ser nula |
No implica un path de acceso | Implica paths de acceso |
Causa que un índice primario unico deba |
Tabla N° 36 Indices
Primarios
ÍNDICES SECUNDARIOS
Permiten el acceso a la información en una
tabla por caminos alternos, caminos menos frecuentes; para
incrementar el rendimiento, evitando así las
búsquedas completas en las tablas.
Los índices secundarios se agregan a la tabla,
implica procesamiento auxiliar, pueden ser eliminados. Los
índices secundarios:
- No afectan la distribución de
filas - Pueden ser únicos o no
- Son usados por el Optimizador para incrementar el
rendimiento
El sistema
construye subtablas para todos los índices secundarios,
esta subtabla contiene las filas que son asociadas con el
valor del
índice.
Índices Primarios vs Índices
Secundarios
Característica | Primario | Secundario |
¿Es requerida o no? | Ambos | No |
Puede ser única o no | Ambos | Ambos |
¿Afecta la distribución de las | Si | No |
¿Es creada y eliminada | No | Si |
¿Mejora el acceso? | Si | Si |
¿Es creado usando muchas definiciones | Si | Si |
¿Requiere una estructura física separada? | No | Si |
¿Requiere procesamiento | No | Si |
Tabla N° 37 Tabla IP vs.
IS
ÍNDICES "JOIN"
Es una estructura de indexación que contiene
columnas de una o más tablas. Algunas consultas pueden ser
satisfechas con solo examinar el índice "join". Son muy
parecido a los índices secundarios, los índices
"join" imponen procesamiento adicional en operaciones de
inserción, eliminación o
actualización.
- Índice "join" de
tabla-única, replica algunas o todas las
columnas en otra tabla - Índice "join" de
tabla-múltiple - Índice "join" agregado, ofrecen
eficiencia
extrema para cierto tipo de consultas.
ÍNDICES HASH
Proveen una estructura de eficiencia-espacio con
relación a otros índices. Tiene las
características similares a un índice join de
tabla-única con un identificador por fila que provee
acceso transparente a la tabla base.
ESPECIFICACIÓN DE
ÍNDICES
Todas las tablas requieren un índice primario.
Si no se especifica una columna o un set de columnas como el
índice primario para la tabla, entonces CREATE TABLE
especifica un índice primario por defecto.
Creando Índices
Para especificar | Se usa la | Y la |
Índice único primario | CREATE TABLE | UNIQUE PRIMARY INDEX |
Índice no-único primario | CREATE TABLE | PRIMARY INDEX |
Índice único secundario | CREATE TABLE | INDEX |
CREATE INDEX | ||
Índice "join" | CREATE JOIN INDEX | |
Índice hash | CREATE HASH INDEX |
Tabla N° 38 Especificación de
Índices
Los índices también son creados cuando
las restricciones PRIMARY KEY y UNIQUE son
especificadas.
FORTALEZAS Y DEBILIDADES DE LOS
ÍNDICES
Teradata no requiere que los usuarios le especifiquen
que índice debe de usar.
El Optimizador de Teradata selecciona la alternativa
más apropiada.
Los índices:
- Pueden tener un impacto directo en todo el
rendimiento de Teradata. - No es un proceso
simple de realizar. - Es basado en parte en expectativas de
uso.
Método de | Fortalezas | Debilidades |
Índice único primario |
|
|
Índice no único primario |
|
|
Índice único secundario |
|
|
Índice no único secundario |
|
|
Búsqueda completa de |
|
|
Tabla N° 39 Fortalezas y Debilidades
de los índices
HASHING
Teradata usa hashing para distribuir los datos en el
disco y usa índices para acceder a dichos datos. Debido
a que la arquitectura de
Teradata es masivamente paralela, requiere un medio eficiente
de distribución y recuperación de
información. Este método es el
hashing.
Todos los índices en teradata son basados (o
parcialmente basados) en filas-hash.
Capítulo VII: Objetos de la Base de
Datos
VISTAS
Actualmente son tablas virtuales que pueden usarse
para obtener datos definiendo columnas de vistas subyacentes
y/o tablas.
Las vistas integran el Diccionario de
Datos porque las definiciones de las vista son almacenadas
allí. Las vistas simplifican el acceso a la
información en Teradata.
Declaraciones SQL relacionadas con las
Vistas
LA | PARA… |
CREATE VIEW | * Nombrar la vista y las columnas en la * Definir un SELECT sobre una o más |
REPLACE VIEW | Alterar las características de una vista |
Tabla N° 40 Declaraciones SQL
Relacionadas a Vistas
PROCEDIMIENTOS ALMACENADOS
Son ejecutados en el espacio del servidor
Teradata, es una combinación de declaraciones SQL, y
declaraciones de control.
Usando los procedimientos
almacenados, se pueden construir grandes y complejas
aplicaciones de base de datos.
Los procedimientos almacenados pueden
contener:
- Entrada múltiple y parámetros de
salida - Variables locales y cursores
- SQL DDL, DCL, DML y SELECT.
Las aplicaciones basadas en procedimientos almacenados
proveen los siguientes beneficios:
- Reducen el tráfico cliente-servidor, ya que los procedimientos
almacenados residen en el servidor. - Permiten encapsulación y cumplimiento de las
reglas en el servidor, contribuyendo al mantenimiento de las aplicaciones. - Proveen mejor control transaccional.
- Proveen mejor seguridad.
- Proveen un mecanismo manejador de
excepciones.
Elementos de un procedimiento
almacenado
Este | Incluye |
Declaraciones de control de | Declaraciones compuestas anidadas o no |
Declaraciones de | DECLARE HANDLER para terminación y Pueden ser:
Declaraciones de cursor DECLARE Declaraciones de variables DECLARE. |
Declaraciones SQL para | DDL, DCL, DML y SELECT |
Modificadores | Soporta todas las declaraciones SQL excepto |
Corchetes y comentarios |
Tabla N° 41 Procedimientos
Almacenados
MACROS
Las macros
consisten en una o más sentencias SQL que pueden ser
ejecutadas con solo ejecutar una sentencia. Cada vez que la
macro es ejecutada, una o más filas pueden ser
retornadas.
Declaraciones SQL relacionadas con las
macros
Use esta | Para… |
CREATE MACRO | Incorporar código SQL frecuentemente usado |
EXECUTE | Correr una macro. * Una macro también puede contener |
DROP MACRO | Elimina una macro |
Tabla N° 42 Declaraciones SQL
relacionadas con las macros
A pesar del número de sentencias en una macro,
Teradata las trata como un pedido simple. Cuando se ejecuta una
macro, el sistema procesa todas las sentencias SQL, o no
procesa ninguna. Si la macro falla, el sistema aborta, y
retorna la base de datos a su estado
original.
TRIGGERS
El trigger se dispara cuando otro evento ocurre. Este
objeto es almacenado en el Diccionario
de Datos, asociado a una tabla llamada tabla subject.
Teradata cumple con las especificaciones ANSI SQL3 sobre
triggers.
Los triggers se ejecutan automáticamente cuando
una de las siguientes operaciones se ejecuta:
- DELETE
- INSERT
- UPDATE
¿En qué momento se
disparan?
Si se | Acción del |
BEFORE | Se ejecuta antes del evento que disparó |
AFTER | Se ejecuta después de que el evento que |
Tabla N° 43 Triggers
A veces una sentencia puede disparar un trigger, que
en su turno, dispara otro trigger. Teradata procesa y optimiza
en paralelo para maximizar el rendimiento del
sistema.
Declaraciones SQL relacionadas a los
triggers
Use esta | Para… |
CREATE TRIGGER | Crear un trigger. |
REPLACE TRIGGER | Cambiar la definición de un trigger si |
DROP TRIGGER | Eliminar la definición de un trigger de |
HELP TRIGGER | Muestra los atributos del trigger |
SHOW TRIGGER | Muestra el texto usado para crear un |
ALTER TRIGGER | Activa, desactiva, o modifica el tiempo * Es una extensión de SQL a las |
RENAME TRIGGER | Cambia el nombre de un trigger |
Tabla N° 44 Declaraciones SQL
Relacionadas Con Triggers
Elementos de un trigger
Elemento | Comentario |
Nombre del | Debe ser único dentro de una base de |
Activo/Desactivo | Cuando se deshabilita un trigger, la Para activar un trigger ALTER TRIGGER nombre_trigger * Es una extensión de Teradata |
Nombre de la | El nombre de la tabla subject debe ser el |
Momento de ejecución | * BEFORE * AFTER |
Evento | El evento es identificado por el tipo de Si el tipo de sentencia es… Entonces la sentencia disparadora puede INSERT
UPDATE
DELETE
|
Nombre de la | Sólo aplicable cuando el evento |
Orden | Cuando se definen múltiples triggers, se Los valores del orden son enteros de 1 a |
Tabla de transición y | La tabla de transición es una tabla Las filas de transición almacenan los No son almacenadas en el Diccionario de |
Cláusula | La cláusula realiza:
Las reglas AFTER y BEFORE son:
|
Acción del |
|
Sentencia SQL | Generalmente comprende una sola sentencia o un |
Tabla N° 45 Elementos de Un
Trigger
Restricciones de los triggers
Restricción | Comentario |
Un cursor no dispara un | Se recibiría un mensaje de |
No se puede definir triggers, | |
El límite para la | Se recibiría un mensaje de |
Tabla N° 46 Relaciones de los
triggers
EL DICCIONARIO DE DATOS
Es un set de tablas del sistema que contienen datos
acerca de las bases de datos,
de los usuarios y las propiedades de éstos,
también contiene información administrativa
acerca de la base de datos Teradata.
El Diccionario de Datos contiene definiciones
actuales, información de control y información
general acerca de:
- Bases de datos
- Usuarios finales
- Roles
- Reglas
- Perfiles
- Cuentas
- Tablas
- Vistas
- Columnas
- Índices
- Restricciones
- Sesiones y atributos de sesión
- Triggers
- Derechos de acceso
- Espacio de disco
- Eventos
- Uso de recursos
- Macros
- Procedimientos almacenados
- Logs
- Traducciones
- Set de caracteres
- Estadísticas
- Procedimientos almacenados extendidos
- Autorizaciones
- Funciones definidas por el Usuario –
UDF - Tipos Definidos por el Usuario –
UDT - Métodos Definidos por el Usuario –
UDM
A continuación se detalla acerca de que
información es almacenada:
Cuando creas | En el Diccionario de Datos se |
una tabla |
|
una base de |
* permanente * contenido en la base de datos * temporal
|
un usuario |
* permanente * contenido en la base de datos * temporal
|
una vista o |
|
un procedimiento |
|
un trigger |
* tabla * trigger * base de datos y tabla * usuario que creó los * usuario que actualizó
* el * los eventos que disparan el * el orden de disparo del trigger
|
una función definida por usuario |
|
un método definido por |
|
un tipo de dato definido por |
|
Tabla N° 47 Listado de diccionario de
datos almacenables
VISTAS DEL DICCIONARIO DE DATOS
Se puede examinar la información en las tablas
de sistema en la base de datos DBC directamente o a
través de una serie de vistas.
El administrador
de la base de datos controla quien tiene acceso a las
vistas.
La siguiente tabla define la información
necesitada por varios tipos de usuarios:
Este tipo de | Necesita |
Final |
|
Supervisor |
|
Administrador de la Base de |
|
Administrador de |
|
Control de |
|
Tabla N° 48 Vistas del diccionario de
datos
Acceso SQL al Diccionario de
Datos
Cada vez que se ingresa a la base de datos Teradata, o
se usa una consulta SQL, o se escribe un password, se usa el
Diccionario de Datos.
Por razones de seguridad, sólo se puede usar la
declaración SELECT. No se puede modificar de ninguna
manera el Diccionario de Datos.
CONTROL DE CONCURRENCIA Y RECUPERACIÓN DE LAS
TRANSACCIONES
El control de concurrencia previene que varios
procesos de
forma incorrecta inserten, borren o modifique los mismos datos.
Se mantiene un control de concurrencia a través de dos
mecanismos:
- Transacciones
- Locks
TRANSACCIONES
Son obligatorios para mantener la integridad de la
base de datos mientras se efectúan muchas operaciones
concurrentes.
Una transacción es una unidad lógica de trabajo y
una unidad de recuperación. Las transacciones son
atómicas: una transacción parcial no
existe.
Teradata soporta:
- Semántica de transacciones ANSI
- Transacciones Teradata
TRANSACCIONES ANSI
Todas las transacciones ANSI son implícitas.
Cualquiera de los siguientes eventos abre una
transacción ANSI:
- Ejecución de la primera sentencia SQL en una
sesión. - Ejecución de la primera sentencia luego de
cerrar una transacción previa.
La transacción se cierra cuando se ejecuta una
sentencia COMMIT, ROLLBACK o ABORT.
En el modo ANSI, el sistema da vuelta atrás a
la transacción entera si el pedido actual:
- Resulta en un punto muerto
- Ejecuta una sentencia DDL que aborta
- Ejecuta una sentencia explícita: ROLLBACK o
ABORT.
TRANSACCIONES TERADATA
Las transacciones pueden ser implícitas o
explícitas. Una macro es un ejemplo de una
transacción implícita.
SENTENCIAS BEGIN TRANSACTION / END
TRANSACTION
Una transacción explícita es cuando
varias sentencias están delimitadas con BEGIN
TRANSACTION / END TRANSACTION. Todas las demás
transacciones son implícitas.
BEGIN TRANSACTION;
DELETE FROM Employee
WHERE Name = ‘Smith T’
;
UPDATE Department
SET EmpCount=EmpCount-1
WHERE DeptNo=500
;
END TRANSACTION;
Si ocurre un error durante el procesamiento del DELETE
o el UPDATE, el sistema restaura ambas tablas a sus estados
anteriores. Si un error ocurre durante una transacción
Teradata, el sistema vuelve atrás la transacción
entera.
LOCKS
Un lock es un medio de petición de derechos a algún
recurso. Teradata puede asegurar muchos diferentes tipos de
recursos de
diferentes formas. Se puede anular algunos locks haciendo
ciertas operaciones. El requerimiento de integridad de datos
decide que tipos de lock el sistema va a usar.
La siguiente figura muestra un ejemplo de por
qué se necesitan los locks.
Figura N° 8 Necesidad de
Locks
Este ejemplo demuestra el problema más
común encontrado en el proceso de transacciones sin
locks.
Teradata permite asegurar los siguientes
objetos:
Objeto | Descripción |
Base de Datos | Asegura todas las filas de todas las tablas en |
Tabla | Asegura todas las filas en la tabla y cualquier |
Fila hash | Asegura la copia primaria de una fila y todas |
Tabla N° 49 Aseguramiento de de
objetos
Un usuario puede asegurar (lock):
- Base de datos
- Tabla
- Fila hash
Tipos de seguros (lock)
Existen cuatro:
Tipo de lock | Descripción |
Exclusivo | El proceso que lo pide tiene derechos exclusivos |
Escribir | El proceso que lo pidió tiene derechos |
Leer | Durante éste el sistema no permite la |
Acceder | Permite las modificaciones de los datos mientras |
Tabla N° 50 Tipos de Locks
La siguiente tabla muestra de mejor manera estos tipos
de lock:
Pedido de | Tipo de lock | ||||
Ninguno | Acceder | Leer | Escribir | Exclusivo | |
Acceder | Concedido | Concedido | Concedido | Concedido | NO |
Leer | Concedido | Concedido | Concedido | NO | NO |
Escribir | Concedido | Concedido | NO | NO | NO |
Exclusivo | Concedido | NO | NO | NO | NO |
Tabla N° 51 Manipulación de
Locks
NIVELES DE LOCK EN LA BASE DE DATOS
Sentencia SQL | Nivel de lock por el tipo de | Modo de lock | |
UPI/NUPI/USI | NUSI/Busq. | ||
SELECT | Row hash | Tabla | Leer |
UPDATE | Row hash | Tabla | Escribir |
DELETE | Row hash | Tabla | Escribir |
INSERT | Row hash | No aplicable | Escribir |
CREATE DATABASE DROP DATABASE MODIFY DATABASE | No aplicable | Database | Exclusivo |
CREATE TABLE DROP TABLE ALTER TABLE | No applicable | Tabla | Exclusivo |
Tabla N° 52 Niveles de
Locks
DEADLOCKS Y RESOLUCIÓN
Un deadlock se produce cuando una transacción 1
pone un lock sobre un recurso A, y entonces necesita poner un
lock a un recurso B. Pero este recurso ya ha tiene puesto un
lock por una transacción 2, quien a su turno necesita
poner un lock al recurso A. A este estado se denomina deadlock
y se resuelve abortando una de las dos transacciones y haciendo
un ROLL BACK para esa transacción.
Las transacciones juegan un rol muy importante en el
proceso porque son usadas para "retroceder hacia atrás"
una serie de actualizaciones a la base de datos.
RECUPERACIÓN DE MEDIOS Y DE
SISTEMA
Restarts
Se produce por una de las siguientes
razones:
- AMP o falla de disco
- Falla en el software
- Error de paridad
Recuperación de
Transacción
Dos tipos de una recuperación automática
de transacción:
- Recuperación de una
transacción - Recuperación de la Base de Datos
HERRAMIENTAS DE ANÁLISIS DE CONSULTA DE
TERADATA
TERADATA VISUAL EXPLAIN
Es una herramienta visual que describe el plan de
ejecución de complejas sentencias SQL de una manera
simplificada.
Cuando se especifica el modificador EXPLAIN en la
sentencia SQL, Teradata Visual EXPLAIN presenta una vista
gráfica de las sentencias rotas en pasos discretos
mostrando el flujo de datos durante la
ejecución.
El plan de ejecución primero debe ser capturado
con Query Capture Database (QCD) por medio de Query Capture
Facility (QCF).
TERADATA STATISTICS WIZARD
Es una herramienta gráfica que ha sido
desarrollada para mejorar el rendimiento de las consultas y de
la base de datos haciendo pruebas
estadísticas de los resultados de cada
operación.
Se | Descripción |
Seleccionar un | Analiza y recibe recomendaciones basadas en los |
Seleccionar una base de datos, | Analiza y recibe recomendaciones basadas en los |
Aplazar | El programa para recolectar |
Mostrar y modificar | De una columna o un índice |
Recibir | Los análisis están basados en |
Tabla N°53 Asistente de
Estadísticas
RECOMENDACIONES
El presente trabajo fue desarrollado usando como
referencia la información encontrada en el sitio
web de
Teradata ()
bajo la versión V6 Release 6.1; este no es un
trabajo integramente completo que describe el comportamiento del sistema, sino por el
contrario, es solo un resumen.
BIBLIOGRAFÍA
Teradata Library
http://www.teradata.com/t/go.aspx/?id=114
Fecha de acceso 2/Junio/2006
Wikipedia
http://en.wikipedia.org/wiki/Main_Page
Fecha de acceso 2/Junio/2006
TRABAJO REALIZADO POR LOS ESTUDIANTES:
Sanchez Guerra, Rudy
Wilson
Mamani Humpiri, Luis Miguel
Universidad Nacional del Altiplano Puno –
Peru
Escuela Profesional de Ingeniería de Sistemas
Asignatura: Fundamentos de Base de Datos.
Página anterior | Volver al principio del trabajo | Página siguiente |