You are on page 1of 56

Base de Datos

Ing. Ronald Pérez

rrperez@unimet.edu.ve rperez@shopepk.com ronaldperezr@hotmail.com

Administración de Bases de Datos

Agenda
 


Funciones de un DBA Diseño de grupos de archivos Rendimiento E/S del disco Particionamiento
  

SQL Server MySQL Oracle


Vistas Materializadas Índices

Administración de Bases de Datos

Actores en un Sistema de BD
Administrador de la base de datos (ABD)

Responsable de administrar los recursos del SBD (nivel técnico):

BD + SGBD + Otro Software (aplicaciones/programas de acceso)
Definir/Modificar la estructura de la BD y restricciones de los datos Crear/Modificar estructuras de almacenamiento y métodos de acceso Conceder/Denegar permisos de acceso y controlar dicho acceso a datos (seguridad de la BD) Definir planes de copias de seguridad de los datos de la BD Garantizar el funcionamiento correcto del sistema y proporcionar servicio técnico al usuario (respuesta lenta del sistema...) Adquirir los recursos software y hardware necesarios

Las funciones del ABD incluyen:
 

 

Administración de Bases de Datos

Diseño de grupos de archivos
Los grupos de archivos definen la arquitectura de almacenamiento básica para todos los objetos de una base de datos. Un conjunto de grupos de archivos bien definido puede permitirle dirigir operaciones de copia de seguridad y de restauración a una parte de la base de datos. La estructura de grupos de archivos que se defina puede afectar también a las características de rendimiento para la operaciones de disco y aceptar capacidades de partición.

Administración de Bases de Datos

Diseño de grupos de archivos
Para recuperabilidad Los grupos de archivos tienen que tener como mínimo un archivo y pueden tener muchos archivos que abarcan unidades de disco. Un grupo de archivos crea la frontera de almacenamiento para todos los objetos de una base de datos, excepto las tablas, índices y vistas indizada, puesto que todos tienen particiones.

Los objetos sin particiones deben residir en un grupo e archivos único, aunque la información que contenga un objeto sin partición pueda abarcar más de una archivo

Administración de Bases de Datos

Diseño de grupos de archivos
Para rendimiento El diseño de archivos para rendimiento es, de hecho, una afirmación incorrecta.

Los grupos de archivos no tienen ninguna característica de rendimiento inherente. Las características de rendimiento derivan del archivo o archivos del grupo de archivos.

Administración de Bases de Datos

Rendimiento de E/S del disco
Recordar que la mejora del rendimiento que verá a partir de los diseños de grupos de archivos y la ubicación de archivos se refiere a operaciones que requieren E/S del disco. Si ha diseñado sus aplicaciones y bases de datos utilizando los siguientes principios, los beneficios en rendimiento serán mínimos porque casi todo el acceso a la información se producirá desde la caché de datos en la memoria

Administración de Bases de Datos

Rendimiento de E/S del disco
Principios:  Todas las columnas están definidas con el tipo de datos más pequeño para capturar información  Las aplicaciones extraen sólo el número mínimo de filas necesarias  Las aplicaciones extraen sólo el número mínimo de columnas necesarias  El uso de tablas temporales y variables de tabla ha sido minimizado

Administración de Bases de Datos

Diseño de grupo de archivos para la partición
Además de diseñar grupos de archivos para rendimiento y recuperabilidad, los grupos de archivos tienen un papel fundamental en el diseño de particiones. Al aplicar una partición adecuada, puede alcanzar un aumento importante en la disponibilidad de la información porque ya no esta limitado por procesos de carga masiva o de archivo.
Administración de Bases de Datos

¿Qué es el particionamiento de datos?

Los registros de una tabla se dividen en diferentes trozos(como tablas individuales) Todos las filas siguen perteneciendo a la misma tabla lógica

Administración de Bases de Datos

Esquema de Partición (SQL Server)
El esquema de partición define las estructuras de almacenamiento físicas que se utilizarán con un función de partición especifica. El proceso de crear una partición en una tabla, índice o vista indizadas es el siguiente:  Crear una función de partición  Crear un esquema de partición asignado a una función de partición  Crear una tabla, índice o vista indizada en el esquema de partición

Administración de Bases de Datos

Funciones de partición

Una “función de partición” define los puntos de frontera que utiliza SQL Server para dividir información en un esquema de partición, un ejemplo de función de partición es el siguiente:

CREATE PARTITION FUNTION FuncionDeParticion (INT) AS RANGE FOR VALUES (10,20,30,40,50,60)

La clausula AS permite especificar si la función de partición que está creando es RANGE LEFT o RANGE RIGHT. Los parámetros LEFT y RIGHT define que partición incluirá los puntos de fronteras.
Administración de Bases de Datos

Función de partición (RANGE LEFT)
Número de Partición 1 2
3 4 5 6 7

Valor mín. -∞ 11
21 31 41 51 61

Valor máx. 10 20
30 40 50 60 +∞

Administración de Bases de Datos

Función de partición (RANGE RIGHT)
Número de Partición 1 2
3 4 5 6 7

Valor mín. -∞ 10
20 30 40 50 60

Valor máx. 9 19
29 39 49 59 +∞

Como el máximo de particiones de un objeto es 1000, se puede especificar un máximo de 999 puntos de frontera

Administración de Bases de Datos

Esquemas de partición
Un “esquema de partición”, que es una definición alternativa para el almacenamiento, se define para abarcar a uno o más grupos de archivos. Un ejemplo de un esquema de partición es el siguiente:
CREATE PARTITION SCHEME ParticionScheme AS PARTITION FuncionDeParticion TO (Fg1, Fg2, Fg3, Fg4, Fg5, Fg6, Fg7)

Administración de Bases de Datos

Creación de una tabla con partición
La creación de una tabla, índice o vista indizada con partición es similar crear una tabla, índice o vista indizadas sin partición.
Ejemplo: CREATE TABLE Empleado ( IdEmpleado INT NOT NULL ,Nombre VARCHAR(30) NOT NULL ,Apellido VARCHAR(30) NOT NULL ) ON ParticionScheme(IdEmpleado ) GO
Administración de Bases de Datos

Operadores SPLIT y MERGE
Como la información cambia constantemente, las particiones no suele ser estática. Hay dos operadores disponibles para gestionar las definiciones de los puntos de frontera El operador SPLIT introduce un punto de frontera nuevo en una función de partición. MERGE elimina un punto frontera de una función de partición.

Administración de Bases de Datos

Operadores SPLIT y MERGE
Sintaxis general:

ALTER PARTITION FUNTION partition_funtion_name() { SPLIT RANGE (boundary_value) | MERGE RANGE (boundary_value)} [;]

Administración de Bases de Datos

Particionamiento (MySQL)
Para determinar si el servidor MySQL soporta particionamiento puede ejecutar el siguiente comando SHOW VARIABLES LIKE '%partition%‘

También puede ejecutar el comando SHOW PLUGINS;

Administración de Bases de Datos

Particionamiento (MySQL)
Particiones por RANGE
CREATE TABLE Ejemplo (id INT ,NombreVARCHAR(50) ,purchased DATE) PARTITION BY RANGE( YEAR(purchased) ) ( PARTITION p0 VALUES LESS THAN (1990) ,PARTITION p1 VALUES LESS THAN (1995) ,PARTITION p2 VALUES LESS THAN (2000) ,PARTITION p3 VALUES LESS THAN (2005) );
Administración de Bases de Datos

Particionamiento (MySQL)
Particiones por LIST
CREATE TABLE employees (id INT NOT NULL , fname VARCHAR(30) , lname VARCHAR(30) , hired DATE NOT NULL DEFAULT '1970-01-01‘ , separated DATE NOT NULL DEFAULT '9999-12-31‘ , job_code INT , store_id INT ) PARTITION BY LIST(store_id) ( PARTITION pNorth VALUES IN (3,5,6,9,17) ,PARTITION pEast VALUES IN (1,2,10,11,19,20) ,PARTITION pWest VALUES IN (4,12,13,14,18) ,PARTITION pCentral VALUES IN (7,8,15,16) );

Administración de Bases de Datos

Particionamiento (MySQL)
Particiones HASHES
CREATE TABLE employees ( id INT NOT NULL , fname VARCHAR(30) , lname VARCHAR(30) , hired DATE NOT NULL DEFAULT '1970-01-01‘ , separated DATE NOT NULL DEFAULT '9999-12-31‘ , job_code INT , store_id I NT ) PARTITION BY HASH( YEAR(hired) ) PARTITIONS 4;
Administración de Bases de Datos

Particionamiento (MySQL)
Particiones KEY
CREATE TABLE k1 ( id INT NOT NULL PRIMARY KEY ,name VARCHAR(20) ) PARTITION BY KEY() PARTITIONS 2;

Administración de Bases de Datos

Particionamiento en Oracle

Administración de Bases de Datos

Particionamiento en Oracle

Administración de Bases de Datos

Particionamiento en Oracle
Particionamiento Composite
CREATE TABLE TAB2 (ord_id NUMBER(10), ord_day NUMBER(2), ord_month NUMBER(2), ord_year NUMBER(4) ) PARTITION BY RANGE(ord_year) SUBPARTITION BY HASH(ord_id) SUBPARTITIONS 8 ( PARTITION q1 VALUES LESS THAN(2001) ( SUBPARTITION q1_h1 TABLESPACE TBS1, SUBPARTITION q1_h2 TABLESPACE TBS2, SUBPARTITION q1_h3 TABLESPACE TBS3, SUBPARTITION q1_h4 TABLESPACE TBS4 ),

Administración de Bases de Datos

Particionamiento en Oracle
Particionamiento Composite:
PARTITION q2 VALUES LESS THAN(2002) ( SUBPARTITION q2_h5 TABLESPACE TBS5, SUBPARTITION q2_h6 TABLESPACE TBS6, SUBPARTITION q2_h7 TABLESPACE TBS7, SUBPARTITION q2_h8 TABLESPACE TBS8 ), PARTITION q3 VALUES LESS THAN(2003) ( SUBPARTITION q3_h1 TABLESPACE TBS1, SUBPARTITION q3_h2 TABLESPACE TBS2, SUBPARTITION q3_h3 TABLESPACE TBS3, SUBPARTITION q3_h4 TABLESPACE TBS4 ), PARTITION q4 VALUES LESS THAN(2004) ( SUBPARTITION q4_h5 TABLESPACE TBS5, SUBPARTITION q4_h6 TABLESPACE TBS6, SUBPARTITION q4_h7 TABLESPACE TBS7, SUBPARTITION q4_h8 TABLESPACE TBS8 )

)

Administración de Bases de Datos

Vistas Materializadas
La vista materializada no es más que una vista, definida con una sentencia SQL, de la que además de almacenar su definición, se almacenan los datos que retorna, realizando una carga inicial y después cada cierto tiempo un refresco de los mismos.

La creación de este tipo de vistas no es tan compleja como puede parecer, lo más importante es tener claro cada cuánto tiempo queremos actualizar la información de las vistas, y qué método de refresco utilizar.

Administración de Bases de Datos

Vistas Materializadas
CREATE MATERIALIZED VIEW mi_vista_materializada [TABLESPACE mi_tablespace] [BUILD {IMMEDIATE | DEFERRED}] [REFRESH {ON COMMIT | ON DEMAND | [START WITH fecha_inicio] NEXT fecha_intervalo } | {COMPLETE | FAST | FORCE} ] [{ENABLE|DISABLE} QUERY REWRITE] AS SELECT t1.campo1, t2.campo2 FROM mi_tabla1 t1 , mi_tabla2 t2 WHERE t1.campo_fk = t2.campo_pk AND …

Administración de Bases de Datos

Vistas Materializadas
Una de las cosas importantes a tener en cuenta es que para poder utilizar este método casi siempre es necesario haber creado antes un LOG de la Vista materializada, indicando los campos clave en los que se basará el mantenimiento de la vista. Se utiliza la instrucción CREATE MATERIALIZED VIEW LOG ON: Ejemplo CREATE MATERIALIZED VIEW LOG ON mi_tabla_origen WITH PRIMARY KEY INCLUDING NEW VALUES;
Administración de Bases de Datos

Vistas Materializadas
Carga de datos en la vista  BUILD IMMEDIATE: Los datos de la vista se cargan en el mismo momento de la creación  BUILD DEFERRED: Sólo se crea la definición, los datos se cargarán más adelante. Para realizar esta carga se puede utilizar la función REFRESH del package DBMS_MVIEW: begin dbms_mview.refresh('mi_vista_materializada'); end;

Administración de Bases de Datos

Vistas Materializadas
Método y temporalidad del refresco de los datos

REFRESH ON COMMIT: Cada vez que se haga un commit en los objetos origen definidos en el select REFRESH ON DEMAND: Como con la opción DEFERRED del BUILD, se utilizarán los procedures REFRESH, REFRESH_ALL_MVIEWS o REFRESH_DEPENDENT del package DBMS_MVIEW REFRESH [START WITH fecha_inicio] NEXT fecha_intervalo: START WITH indica la fecha del primer refresco (fecha_inicio suele ser un SYSDATE) NEXT indica cada cuánto tiempo se actualizará (fecha_intervalo podría ser SYSDATE +1 para realizar el refresco una vez al día)
Administración de Bases de Datos

Vistas Materializadas
Ejemplo:

CREATE MATERIALIZED VIEW LOG ON mi_tabla_origen WITH PRIMARY KEY INCLUDING NEW VALUES; CREATE MATERIALIZED VIEW mi_vista_materializada REFRESH FAST NEXT SYSDATE + 7 AS SELECT campo1, campo2, campo8 FROM mi_tabla_origen WHERE campo2 > 5000;
Administración de Bases de Datos

Vistas Materializadas

Administración de Bases de Datos

Índices
Los índices se utilizan para mejorar el rendimiento de las peticiones de datos. En un mundo perfecto, podría crear muchos índices para satisfacer todas las permutaciones de consulta que crease un usuario. No obstante, los índices necesitan mantenimiento. A medida que se inserta, se actualiza y se elimina información, hay que volver a calcular los índices. La creación de índices debe ser equilibrada para que cree suficientes índices para mejorar las consultas y al mismo tiempo asegurar el mínimo impacto en las modificaciones de datos
Administración de Bases de Datos

Índices (consideración)
Un índice sólo es útil si proporciona un medio para encontrar la información fácilmente a pesar del volumen de información almacenado.

Administración de Bases de Datos

Árboles-B (B-trees)
La estructura que utiliza SQL Server,Oracle,… para construir y mantener índices se denomina “árbol equilibrado” o “árbol-B” (balanced tree o B-tree)

Administración de Bases de Datos

Árboles-B (B-trees)

Administración de Bases de Datos

Índices (Clasificación)
Lógica  Una columna o concatenado: Una sola o varias columnas clave  Único o no único: Permite o no valores duplicados en la clave  Basado en funciones: Basado en funciones sobre una o más columnas de la tabla.  Mecanismo eficiente para evaluar consultas que contienen funciones en su cláusula WHERE
 CREATE INDEX cantidad_a_despachar_idx

ON item(cantidad - cantidad_despachada);  SELECT orden.id, item.id FROM item WHERE (cantidad - cantidad_despachada) > 0;
Administración de Bases de Datos

Índices (Clasificación)
Física
 


 

Particionado o no particionado Árbol B Normal Invertido Bitmap Bitmap Join

Administración de Bases de Datos

Almacenamiento de índices

Cuando se crea un índice se asigna automáticamente un segmento de índice. Se puede administrar el espacio de un segmento de índice de la siguiente forma:

Especificando los parámetros de almacenamiento relacionados con la asignación de extents Especificando el parámetro PCTFREE

Se puede asignar un tablespace diferente al tablespace de los datos, mejorando así el desempeño. Cuando se crea el índice, el DBMS hace sort sobre las columnas del índice y almacena el rowid y el valor del índice para cada fila.
Administración de Bases de Datos

Restricciones sobre índices

Se pueden crear tantos índices sobre las tablas como combinaciones de columnas diferentes existan. Se puede crear un índice sobre el mismo conjunto de columnas, si las mismas están ordenadas de forma diferente. No se pueden crear dos índices sobre el mismo atributo. Se puede borrar un índice sin alterar los datos de la tabla de datos.

Administración de Bases de Datos

Restricciones sobre índices
Oracle crea automáticamente:  Un índice UNIQUE basado en B*-tree para mantener las columnas que se hayan definido como clave primaria de una tabla utilizando el CONSTRAINT PRIMARY KEY de una tabla no organizada por índice.  Un índice UNIQUE basado en B*-tree para mantener las columnas sobre las que se definió el CONSTRAINT UNIQUE.  Un índice basado en B*-tree para mantener las columnas que se hayan definido como clave primaria y todas las filas de una tabla organizada por índice.  Un índice basado en hashing para mantener las filas de un grupo de tablas (cluster) organizado por hash.
Administración de Bases de Datos

Ventaja de la estructura de árbol B

  

Todos los nodos hojas están al mismo nivel, recuperación de cualquier registro toma el mismo tiempo Arboles B permanecen balanceados automáticamente Todos los bloques están llenos en un 75% en promedio Proveen un buen desempeño para consultas exactas y por rangos Inserciones, modificaciones y eliminaciones son eficientes, y se mantiene el orden de las claves para una recuperación rápida El desempeño es bueno para tablas pequeñas y grandes y no se degrada cuando la tabla crece.

Administración de Bases de Datos

Búsqueda en índices basados en árbol B
Búsqueda exacta
  

 

   

Empieza en el nodo raíz Búsqueda de clave más pequeña mayor o igual que el valor Si es mayor que la clave, se sigue el apuntador anterior hasta el hijo. Si es igual a la clave, se sigue el apuntador hasta el hijo Si no existe uno mayor o igual, se sigue el apuntador del valor más alto del bloque. Repita los pasos si el hijo es un nodo “interno”. Busca en la hoja la clave igual al valor. Si la clave se encuentra, retorna el ROWID Si la clave no se encuentra, la fila no existe.

Administración de Bases de Datos

Búsqueda en índices basados en árbol B
Búsqueda por rango:  Similar al scan único pero buscando el límite inferior del rango  Busca en las hojas todas las claves menores o iguales al límite inferior  Se aprovecha la lista enlazada de hojas.

Administración de Bases de Datos

Tipos básicos de índices
Índices Ordenados: Estos índices están basados en una disposición ordenada de los valores Índices Asociativos (Índices Hash): Estos índices están basados en una distribución uniforme de los valores a través de una serie de cajones (buckets); El valor asignado a cada cajón está determinado por una función, llamada función de asociación (Hash Function)

Técnicas de Indexación / Técnicas de Asociación

Administración de Bases de Datos

Criterios de valoración
Tipos de Acceso: Los tipos de acceso que se soportan eficazmente (estos tipos podrían incluir la búsqueda de registros con un valor concreto en un atributo o buscar los registros cuyos atributos contengan valores en un rango especificado) Tiempo de Acceso: El tiempo que se tarda en buscar un determinado elemento de datos o conjunto de elementos, usando la técnica en cuestión

Administración de Bases de Datos

Criterios de valoración
Tiempo de Inserción: El tiempo empleado en insertar un nuevo elemento de datos (este valor incluye el tiempo utilizado en buscar el lugar apropiado donde insertar el nuevo elemento de datos, así como el tiempo empleado en actualizar la estructura de índice) Tiempo de Borrado: El tiempo empleado en borrar un elemento de datos (este valor incluye el tiempo utilizado en buscar el elemento a borrar, así como el tiempo empleado en actualizar la estructura de índice)

Administración de Bases de Datos

Criterios de valoración

Espacio Adicional Requerido: El espacio adicional ocupado por la estructura del índice (como normalmente la cantidad necesaria de espacio adicional suele ser moderada, es razonable sacrificar el espacio para alcanzar un rendimiento mejor)

Administración de Bases de Datos

Claves de Búsqueda
Los atributos o conjuntos de atributos usados para buscar en un archivo se llaman claves de búsqueda Esta definición de clave de búsqueda no tiene nada que ver con clave primaria, clave candidata y superclave

Administración de Bases de Datos

Índices en SQL Server
Sintaxis general: CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name ON <object> ( column [ ASC | DESC ] [ ,...n ] ) [ INCLUDE ( column_name [ ,...n ] ) ] [ WITH ( <relational_index_option> [ ,...n ] ) ] [ ON { partition_scheme_name ( column_name ) | filegroup_name | default } ] [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ] [;]

Administración de Bases de Datos

Deshabilitar/ Habilitar un índice (SQL Server)

Sintaxis general: ALTER INDEX { index_name ON <object> DISABLE [;] | ALL}

ALTER INDEX { index_name ON <object> REBUILD[;]

| ALL}

Administración de Bases de Datos

Índices en Oracle
Table Index: CREATE [UNIQUE|BITMAP] INDEX [esquema.]index_name ON [esquema.]table_name [tbl_alias] (col [ASC | DESC]) index_clause index_attribs

Administración de Bases de Datos

Índices en Oracle
Bitmap Join Index: CREATE [UNIQUE|BITMAP] INDEX [esquema.]index_name ON [esquema.]table_name [tbl_alias] (col_expression [ASC | DESC]) FROM [esquema.]table_name [tbl_alias] WHERE condition [index_clause] index_attribs

Administración de Bases de Datos

Índices en Oracle
Cluster Index: CREATE [UNIQUE|BITMAP] INDEX [esquema.]index_name ON CLUSTER [esquema.]cluster_name index_attribs

Administración de Bases de Datos