Sunteți pe pagina 1din 60

Administracin de Base de Datos

Tcnicas de Optimizacin
Ing. Ronald Prez
rrperez@unimet.edu.ve rperez@shopepk.com

Agenda
Diseo de grupos de archivos Arquitectura de Oracle Diseo de un grupo de archivos para la particin Qu es el particionamiento de datos? Esquemas de particin Operadores SPLIT y MERGE Particionamiento en Oracle Ventajas del particionamiento Desventajas del particionamiento Vistas materializadas ndices rboles - B Almacenamiento de ndices Restricciones sobre ndices Tipos bsicos de ndices Criterios de valoracin ndices en SQL Server ndices en Oracle

Diseo de grupos de archivos

Los grupos de archivos definen la arquitectura de almacenamiento bsica 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 restauracin a una parte de la base de datos. La estructura de grupos de archivos que se defina puede afectar tambin a las caractersticas de rendimiento para la operaciones de disco y aceptar capacidades de particin.

Diseo de grupos de archivos

Para recuperabilidad Los grupos de archivos tienen que tener como mnimo 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 informacin que contenga un objeto sin particin pueda abarcar ms de una archivo.

Diseo de grupos de archivos

Para rendimiento El diseo de archivos para rendimiento es, de hecho, una afirmacin incorrecta. Los grupos de archivos no tienen ninguna caracterstica de rendimiento inherente. Las caractersticas de rendimiento derivan del archivo o archivos del grupo de archivos.

Rendimiento de E/S del disco

Recordar que la mejora del rendimiento que ver a partir de los diseos de grupos de archivos y la ubicacin de archivos se refiere a operaciones que requieren E/S del disco. Si ha diseado sus aplicaciones y bases de datos utilizando los siguientes principios, los beneficios en rendimiento sern mnimos porque casi todo el acceso a la informacin se producir desde la cach de datos en la memoria.

Rendimiento de E/S del disco

Principios:

Todas las columnas estn definidas con el tipo de datos ms pequeo para capturar informacin. Las aplicaciones extraen slo el nmero mnimo de filas necesarias. Las aplicaciones extraen slo el nmero mnimo de columnas necesarias. El uso de tablas temporales y variables de tabla ha sido minimizado.

Arquitectura general de Oracle

Arquitectura de Oracle

Diseo de un grupo de archivos para la particin

Adems de disear grupos de archivos para rendimiento y recuperabilidad, los grupos de archivos tienen un papel fundamental en el diseo de particiones. Al aplicar una particin adecuada, puede alcanzar un aumento importante en la disponibilidad de la informacin porque ya no esta limitado por procesos de carga masiva o de archivo.

Qu es el particionamiento de datos?
La particin de tablas permite que se creen tablas, ndices y vistas materializadas en varios grupos de archivos al tiempo que permite que el administrador de la base de datos especifique qu parte del objeto ser restaurado en un grupo de archivos especfico.
Los registros de una tabla se dividen en diferentes trozos(como tablas individuales).

Todos las filas siguen perteneciendo a la misma tabla lgica.

Esquema de particin (SQL Server)


El esquema de particin define las estructuras de almacenamiento fsicas que se utilizarn con un funcin de particin especifica.
El proceso de crear una particin en una tabla, ndice o vista indizadas es el siguiente: Crear una funcin de particin. Crear un esquema de particin asignado a una funcin de particin. Crear una tabla, ndice o vista indizada en el esquema de particin.

Funciones de particin
Una funcin de particin define los puntos de frontera que utiliza SQL Server para dividir informacin en un esquema de particin, un ejemplo de funcin de particin 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 funcin de particin que est creando es RANGE LEFT o RANGE RIGHT. Los parmetros LEFT y RIGHT define que particin incluir los puntos de fronteras.

Funcin de particin (RANGE LEFT)

Nmero de Particin 1 2 3 4 5 6 7

Valor mn. - 11 21 31 41 51 61

Valor mx. 10 20 30 40 50 60 +

Funcin de particin (RANGE RIGTH)

Nmero de Particin 1 2 3 4 5

Valor mn. - 10 20 30 40

Valor mx. 9 19 29 39 49

6
7

50
60

59
+

Como el mximo de particiones de un objeto es 1000, se puede especificar un mximo de 999 puntos de frontera

Esquemas de particin
Un esquema de particin, que es una definicin alternativa para el almacenamiento, se define para abarcar a uno o ms grupos de archivos. Un ejemplo de un esquema de particin es el siguiente: CREATE PARTITION SCHEME ParticionScheme AS PARTITION FuncionDeParticion TO (Fg1, Fg2, Fg3, Fg4, Fg5, Fg6, Fg7)

Esquemas de particin
La creacin de una tabla, ndice o vista indizada con particin es similar crear una tabla, ndice o vista indizadas sin particin. Ejemplo: CREATE TABLE Empleado ( IdEmpleado INT NOT NULL ,Nombre VARCHAR(30) NOT NULL ,Apellido VARCHAR(30) NOT NULL ) ON ParticionScheme (IdEmpleado) GO

Operadores SPLIT y MERGE


Como la informacin cambia constantemente, las particiones no suele ser esttica. Hay dos operadores disponibles para gestionar las definiciones de los puntos de frontera El operador SPLIT introduce un punto de frontera nuevo en una funcin de particin. MERGE elimina un punto frontera de una funcin de particin.

Operadores SPLIT y MERGE

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

Particionamiento en Oracle

Particionamiento en Oracle

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 ),

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 ) )

Particionamiento
Ejemplo:

Ventajas del particionamiento


Ejemplo particionamiento por rango:
CREATE TABLE time_range_sales ( prod_id , cust_id , time_id , channel_id , promo_id NUMBER(6) NUMBER DATE CHAR(1) NUMBER(6)

, quantity_sold NUMBER(3) , amount_sold )


PARTITION BY RANGE (time_id) (PARTITION SALES_1998 VALUES LESS THAN (TO_DATE('01-JAN-1999','DD-MON-YYYY')), PARTITION SALES_1999 VALUES LESS THAN (TO_DATE('01-JAN-2000','DD-MON-YYYY')), PARTITION SALES_2000 VALUES LESS THAN (TO_DATE('01-JAN-2001','DD-MON-YYYY')), PARTITION SALES_2001 VALUES LESS THAN (MAXVALUE) );

NUMBER(10,2)

Ventajas del particionamiento


Ejemplo particionamiento por rango :

Ventajas del particionamiento

Ejemplo particionamiento hash:


CREATE TABLE hash_sales ( prod_id , cust_id , time_id NUMBER(6) NUMBER DATE

, channel_id
, promo_id

CHAR(1)
NUMBER(6)

, quantity_sold NUMBER(3) , amount_sold ) NUMBER(10,2)

PARTITION BY HASH (prod_id)


PARTITIONS 2;

Ventajas del particionamiento


Ejemplo particionamiento hash:

Ventajas del particionamiento


Ejemplo particionamiento por lista:
CREATE TABLE list_sales ( prod_id , cust_id , time_id , channel_id NUMBER(6) NUMBER DATE CHAR(1)

, promo_id

NUMBER(6)

, quantity_sold NUMBER(3) , amount_sold ) PARTITION BY LIST (channel_id) NUMBER(10,2)

(PARTITION even_channels VALUES (2,4),


PARTITION odd_channels VALUES (3,9) );

Ventajas del particionamiento


Ejemplo particionamiento por lista:

Ventajas del particionamiento


Un mejor equilibrio de carga. Mejores prestaciones. Mayor disponibilidad. Mejores posibilidades de recuperacin. Seguridad.

Desventajas del particionamiento

Complejidad. Reduccin de las prestaciones. Duplicacin.

Vistas materializadas
La vista materializada no es ms que una vista, definida con una sentencia SQL, de la que adems de almacenar su definicin, se almacenan los datos que retorna, realizando una carga inicial y despus cada cierto tiempo un refresco de los mismos. La creacin de este tipo de vistas no es tan compleja como puede parecer, lo ms importante es tener claro cada cunto tiempo queremos actualizar la informacin de las vistas, y qu mtodo de refresco utilizar.

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

Vistas materializadas
Una de las cosas importantes a tener en cuenta es que para poder utilizar este mtodo 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 instruccin CREATE MATERIALIZED VIEW LOG ON: Ejemplo CREATE MATERIALIZED VIEW LOG ON mi_tabla_origen WITH PRIMARY KEY INCLUDING NEW VALUES; .

Vistas materializadas
Carga de datos en la vista BUILD IMMEDIATE: Los datos de la vista se cargan en el mismo momento de la creacin BUILD DEFERRED: Slo se crea la definicin, los datos se cargarn ms adelante. Para realizar esta carga se puede utilizar la funcin REFRESH del package DBMS_MVIEW: begin dbms_mview.refresh('mi_vista_materializada'); end; .

Vistas materializadas
Mtodo 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 opcin DEFERRED del BUILD, se utilizarn 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 cunto tiempo se actualizar (fecha_intervalo podra ser SYSDATE +1 para realizar el refresco una vez al da) .

Vistas materializadas
Mtodo 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 opcin DEFERRED del BUILD, se utilizarn 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 cunto tiempo se actualizar (fecha_intervalo podra ser SYSDATE +1 para realizar el refresco una vez al da) .

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; .

ndices
Los ndices se utilizan para mejorar el rendimiento de las peticiones de datos. En un mundo perfecto, podra 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 informacin, hay que volver a calcular los ndices. La creacin de ndices debe ser equilibrada para que cree suficientes ndices para mejorar las consultas y al mismo tiempo asegurar el mnimo impacto en las modificaciones de datos.

ndices
Un ndice slo es til si proporciona un medio para encontrar la informacin fcilmente a pesar del volumen de informacin almacenado.

rboles - B
La estructura que utiliza SQL Server,Oracle, para construir y mantener ndices se denomina rbol equilibrado o rbol-B (balanced tree o B-tree)

Ventajas de la estructura de rbol B

Todos los nodos hojas estn al mismo nivel, recuperacin de cualquier registro toma el mismo tiempo Arboles B permanecen balanceados automticamente Todos los bloques estn llenos en un 75% en promedio Proveen un buen desempeo para consultas exactas y por rangos Inserciones, modificaciones y eliminaciones son eficientes, y se mantiene el orden de las claves para una recuperacin rpida El desempeo es bueno para tablas pequeas y grandes y no se degrada cuando la tabla crece.

Bsqueda en ndices basados en rbol B


Bsqueda exacta Empieza en el nodo raz Bsqueda de clave ms pequea 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 ms 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..

Bsqueda en ndices basados en rbol B


Bsqueda por rango: Similar al scan nico pero buscando el lmite inferior del rango Busca en las hojas todas las claves menores o iguales al lmite inferior Se aprovecha la lista enlazada de hojas.

ndices (Clasificacin) Lgica 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 ms columnas de la tabla. Mecanismo eficiente para evaluar consultas que contienen funciones en su clusula WHERE
CREATE INDEX cantidad_a_despachar_idx ON item(cantidad - cantidad_despachada); SELECT orden.id, item.id FROM item WHERE (cantidad - cantidad_despachada) > 0;

ndices (Clasificacin)

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

Almacenamiento de ndices
Cuando se crea un ndice se asigna automticamente un segmento de ndice. Se puede administrar el espacio de un segmento de ndice de la siguiente forma: oEspecificando los parmetros de almacenamiento relacionados con la asignacin de extents oEspecificando el parmetro PCTFREE Se puede asignar un tablespace diferente al tablespace de los datos, mejorando as el desempeo. 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.

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 estn 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.

Restricciones sobre ndices

Oracle crea automticamente: 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.

Tipos bsicos de ndices


ndices Ordenados: Estos ndices estn basados en una disposicin ordenada de los valores. ndices Asociativos (ndices Hash): Estos ndices estn basados en una distribucin uniforme de los valores a travs de una serie de cajones (buckets); El valor asignado a cada cajn est determinado por una funcin, llamada funcin de asociacin (Hash Function) Tcnicas de Indexacin / Tcnicas de Asociacin

Criterios de valoracin
Tipos de Acceso: Los tipos de acceso que se soportan eficazmente (estos tipos podran incluir la bsqueda 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 tcnica en cuestin.

Criterios de valoracin
Tiempo de Insercin: 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)

Criterios de valoracin
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)

Claves de bsqueda
Los atributos o conjuntos de atributos usados para buscar en un archivo se llaman claves de bsqueda Esta definicin de clave de bsqueda no tiene nada que ver con clave primaria, clave candidata y superclave

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" } ] [;]

Habilitar / Deshabilitar un ndice en SQL Server


Sintaxis general:

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

| ALL}

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

| ALL}

ndices en Oracle
Sintaxis general:

CREATE [UNIQUE|BITMAP] INDEX [esquema.]index_name ON [esquema.]table_name [tbl_alias] (col [ASC | DESC]) index_clause index_attribs

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

ndices en Oracle
Cluster Index:

CREATE [UNIQUE|BITMAP] INDEX [esquema.]index_name ON CLUSTER [esquema.]cluster_name index_attribs

S-ar putea să vă placă și