Documente Academic
Documente Profesional
Documente Cultură
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
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.
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.
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.
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.
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 de Oracle
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).
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.
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 +
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
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:
NUMBER(10,2)
, channel_id
, promo_id
CHAR(1)
NUMBER(6)
, promo_id
NUMBER(6)
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)
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.
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.
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.
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
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" } ] [;]
| ALL}
| 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: