miércoles, 22 de abril de 2015
Actividad #15
Puntos para la optimización de consultas distribuidas SQL
•Identificar sentencias problemáticas
•Verificar las estadísticas
•Revisar los planes de ejecución
•Reestructurar las sentencias SQL
•Reestructurar los índices
•Mantener los planes de ejecución
Para optimizar el uso de la memoria
compartida:
- Escribir código genérico
- Seguir estándares de codificación
- Usar variables a reemplazar en tiempo de ejecución
Optimización global de consultas
La optimización que se realiza en este apartado ordena la forma en que se van a ejecutar las consultas para que los recursos de computación como discos, comunicaciones, etc. puedan ser utilizados de manera eficiente. Debemos tener en cuenta las cardinalidades de los resultados intermedios, las estadísticas de la base de datos y tener presente el modelo de coste que se expresa de la siguiente forma:
Coste_total=Coste_cpu*#instr+C_I/O*#I/Os+C_mensaje*#mensajes+C_transm*#bytesC_mensaje es el coste de enviar o recibir un mensaje.C_transm es el coste de transmitir unidades de un lugar a otro.
Se aplican varios algoritmos de optimización. Muchos son genéricos de las bases de datos relacionales y otros como INGRES, R*, SSD-1 o AHY son específicos de las bases de datos distribuidas.
Coste_total=Coste_cpu*#instr+C_I/O*#I/Os+C_mensaje*#mensajes+C_transm*#bytesC_mensaje es el coste de enviar o recibir un mensaje.C_transm es el coste de transmitir unidades de un lugar a otro.
Se aplican varios algoritmos de optimización. Muchos son genéricos de las bases de datos relacionales y otros como INGRES, R*, SSD-1 o AHY son específicos de las bases de datos distribuidas.
Procesamiento de consultas locales.
Para procesar una
consulta local solo se hace referencia a tablas y bases
de datos locales(no a vistas ni a tablas remotas) , es decir que estén
dentro de la misma instancia del manejador de bases de datos, en una única
maquina y que nos se tenga que conectar al servidor a otras maquinas para
poder efectuar la consulta. Cada subconsulta que se ejecuta en un nodo, llamada
consulta local, es optimizada usando el esquema local del nodo. Hasta este momento, se pueden eligen los algoritmos
para realizar las operaciones relacionales.
La optimización local utiliza los algoritmos de
sistemas centralizado.
La entrada al optimizador consta de la consulta, el esquema de la base de datos(definiciones de tabla e
índice) y las estadísticas de base de datos. Una instrucción SELECT define
únicamente los siguientes elementos:
El
formato del conjunto de resultados. Las tablas que contienen los datos de
origen. Esto se especifica en la cláusula FROM.
Cómo se relacionan lógicamente las tablas para la
instrucción SELECT. Esto se define en las especificaciones de combinación, que
pueden aparecer en la cláusula WHERE o en una cláusula ONE que sigue a FROM.
Las condiciones que deben cumplir las filas de las
tablas de origen para satisfacer los requisitos de la instrucción SELECT.
Estas condiciones se especifican en las cláusulas WHERE y HAVING.
Optimizador de consultas.
El optimizador de consultas
es uno de los componentes más importantes de un sistema de base de datos
SQL. El optimizador de consultas de SQL Server es un optimizador basado en el
costo. El optimizador de consultas debe analizar los planes posibles y elegir
el de menor costo estimado. Algunas instrucciones SELECT complejas tienen miles
de planes de ejecución posibles. El optimizador de consultas de SQL Server
elige, además del plan de ejecución con el costo de recursos mínimo, el plan
que devuelve resultados al usuario con un costo razonable de recursos y con la
mayor brevedad posible. El optimizador de SQL Server utilizará un plan de
ejecución en paralelo para devolver resultados si esto no afecta negativamente
a la carga del servidor. Pueden estar seguros de que el optimizador de
consultas creará un plan de ejecución eficaz para el estado de la base de
datos cada vez que se ejecuta la instrucción.
1.El optimizador de consultas
analiza diferentes formas de acceso a las tablas de origen. La versión
final y optimizada del árbol de la consulta se denomina plan deejecución.
2.El
motor relacional comienza a ejecutar el plan de ejecución. A medida que se procesan
los pasos que necesitan datos de las tablas base, el motor relacional
solicita al motor de almacenamiento que pase los datos de los conjuntos de
filas solicitados desde el motor relacional
Referencias:
http://es.scribd.com/doc/23911262/Procesamiento-de-Consultas-Locales#scribd
http://www.econ.uba.ar/www/departamentos/sistemas/plan97/s_datos/waldbott/chinkes/material/Analisis%20y%20Optimizacion%20de%20Consultas_0107_v2.pdf
lunes, 20 de abril de 2015
Actividad #15
Árboles de consultas.
Son estructuras de datos en forma de árbol, en donde, los datos al estar ordenados en la estructura, hace más ágiles las consultas.
Si los datos estuvieran ordenados alfabéticamente en una estructura tipo lista, por ejemplo, e hicieras una búsqueda (la cual sería secuencial), tu búsqueda duraría, en el peor de los casos, un tiempo proporcional a la cantidad de registros que tengas. Es decir, tu búsqueda es de órden O(n) [n=número de registros)
Pero si tus datos están ordenados alfabéticamente en una estructura tipo árbol, e hicieras en el árbol una búsqueda (la cual sería binaria), tu búsqueda se va recortando en tiempo de acuerdo a la cantidad de registros, el algoritmo de búsqueda binaria en árboles es de órden O(log (n+1)) (n=número de registros). Una función de orden logarítmico es más eficiente que una de orden lineal (como la búsqueda secuencial).

Son estructuras de datos en forma de árbol, en donde, los datos al estar ordenados en la estructura, hace más ágiles las consultas.
Si los datos estuvieran ordenados alfabéticamente en una estructura tipo lista, por ejemplo, e hicieras una búsqueda (la cual sería secuencial), tu búsqueda duraría, en el peor de los casos, un tiempo proporcional a la cantidad de registros que tengas. Es decir, tu búsqueda es de órden O(n) [n=número de registros)
Pero si tus datos están ordenados alfabéticamente en una estructura tipo árbol, e hicieras en el árbol una búsqueda (la cual sería binaria), tu búsqueda se va recortando en tiempo de acuerdo a la cantidad de registros, el algoritmo de búsqueda binaria en árboles es de órden O(log (n+1)) (n=número de registros). Una función de orden logarítmico es más eficiente que una de orden lineal (como la búsqueda secuencial).
Transformaciones equivalentes
Cuando una base de datos se encuentra en múltiples servidores y
Join en bucles (ciclos) anidados
Si z = r s, r recibirá el nombre de relación externa y s se llamará relación interna, el algoritmo de bucles anidados se puede presentar como sigue:
Para cada tupla tr en s si (tr,ts) si satisface la condición, entonces añadir tr * ts al resultado Donde tr * ts será la concatenación de las tuplas tr y ts. Como para cada registro de r se tiene que realizar una exploración completa de ts, y suponiendo el peor caso, en el cual la memoria intermedia sólo puede concatenar un bloque de cada relación, entonces el número de bloques a acceder es de sr bn b. Por otro lado, en el mejor de los casos si se pueden contener ambas relaciones en la memoria intermedia entonces sólo se necesitarían accesos a bloques.
Join en bucles anidados por bloques
Una variante del algoritmo anterior puede lograr un ahorro en el acceso a bloques, si se procesan las relaciones por bloques en vez de por tuplas. Para cada bloque Br dar a igual para cada bloque Bs de s, para cada tupla tr en Br.
La diferencia principal en costos de este algoritmo con el anterior es que en el peor de los casos cada bloque de la relación interna s se lee una vez por cada bloque de dr y no por cada tupla de la relación externa.
Join por mezcla
Este algoritmo se puede utilizar para calcular si un Join natural es óptimo en la búsqueda o consulta. Para tales efectos, ambas relaciones deben estar ordenadas para los atributos en común es decir se asocia un puntero a cada relación, al principio estos punteros apuntan al inicio de cada una de las relaciones. Según avance el algoritmo el puntero se mueve a través de la relación. De este modo se leen en memoria un grupo de tuplas de una relación con el mismo valor en los atributos de las relaciones.
¿Qué se debe de tomar en cuenta en este algoritmo?
•Se tiene que ordenar primero, para después utilizar este método.
•Se tiene que considerar el costo de ordenarlo / las relaciones.
•Es más fácil utilizar pequeñas tuplas.
Join por asociación.
Al igual que el algoritmo de join por mezcla, el algoritmo de join por asociación se puede utilizar para un Join natural o un equi-join. Este algoritmo utiliza una función de asociación h para dividir las tuplas de ambas relaciones. La idea fundamental es dividir las tuplas de cada relación en conjuntos con el mismo valor de la función de asociación en los atributos de join.
El número de bloques ocupados por las particiones podría ser ligeramente mayor que.
Debido a que los bloques no están completamente llenos. El acceso a estos bloques puede añadir un gasto adicional de 2·max a lo sumo, ya que cada una de las particiones podría tener un bloque parcialmente ocupado que se tiene que leer y escribir de nuevo.
Join por asociación híbrida
El algoritmo de join por asociación híbrida realiza otra optimización; es útil cuando el tamaño de la memoria es relativamente grande paro aún así, no cabe toda la relación s en memoria. Dado que el algoritmo de join por asociación necesita max +1 bloques de memoria para dividir ambas relaciones se puede utilizar el resto de la memoria (M – max – 1 bloques)para guardar en la memoria intermedia la primera partición de la relación s, esto es, así no es necesaria leerla ni escribirla nuevamente y se puede construir un índice asociativo.
Cuando r se divide, las tuplas de tampoco se escriben en disco; en su lugar, según se van generando, el sistema las utiliza para examinar el índice asociativo en y así generar las tuplas de salida del join. Después de utilizarlas, estas tuplas se descartan, así que la partición no ocupa espacio en memoria. De este modo se ahorra un acceso de lectura y uno de escritura para cada bloque de y.
Join Complejos
Los join en bucle anidado y en bucle anidado por bloques son útiles siempre, sin embargo, las otras técnicas de join son más eficientes que estas, pero sólo se pueden utilizar en condiciones particulares tales como join natural o equi-join. Se pueden implementar join con condiciones más complejas tales como conjunción o disyunción Dado un join de las forma se pueden aplicar una o más de las técnicas de join descritas anteriormente en cada condición individual, el resultado total consiste en las tuplas del resultado intermedio que satisfacen el resto de las condiciones. Estas condiciones se pueden ir comprobado según se generen las tuplas. La implementación de la disyunción es homóloga a la conjunción.
Outer Join (Join externos)
Un outer join es una extensión del operador join que se utiliza a menudo para trabajar con la información que falta.
Por ejemplo:
Suponiendo que se desea generar una lista con todos los choferes y los autos que manejan (si manejan alguno) entonces se debe cruzar la relación Chofer con la relación Móvil. Si se efectúa un join corriente se perderán todas aquellas tuplas que pertenecen a los choferes, en cambio con un outer join se pueden desplegar las tuplas resultado incluyendo a aquellos choferes que no tengan a cargo un auto.
El outer join tiene tres formas distintas: por la izquierda, por la derecha y completo. El join por la izquierda ( ) toma todas las tuplas de la relación de la izquierda que no coincidan con ninguna tupla de la relación de la derecha, las rellena con valores nulos en los demás atributos de la relación de la derecha y las añade al resultado del join natural.
Un outer join por la derecha ( ) es análogo al procedimiento anterior y el outer join completo es aquel que efectúa ambas operaciones.
Para el caso de un outer join completo se puede calcular mediante extensiones de los algoritmos de join por mezcla y join por asociación.
distribuye a un numero determinado de nodos tenemos:
1.-el servidor recibe una petición de un nodo
2.-el servidor es atacado por el acceso concurrente a la base de datos cargada localmente
3.-el servidor muestra un resultado y le da un hilo a cada una de las maquinas nodo de la red local.
Cuando una base de datos es accesada de esta manera la técnica que se utiliza es la de fragmentación de datos que puede ser hibrida, horizontal y vertical.
En esta fragmentación lo que no se quiere es perder la consistencia de los datos, por lo tanto se respetan las formas normales de la base de datos ok.
Bueno para realizar una transformación en la consulta primero desfragmentamos siguiendo los estandares marcados por las reglas formales y posteriormente realizamos el envio y la maquina que recibe es la que muestra el resultado pertinente para el usuario, de esta se puede producir una copia que sera la equivalente a la original.
1.-el servidor recibe una petición de un nodo
2.-el servidor es atacado por el acceso concurrente a la base de datos cargada localmente
3.-el servidor muestra un resultado y le da un hilo a cada una de las maquinas nodo de la red local.
Cuando una base de datos es accesada de esta manera la técnica que se utiliza es la de fragmentación de datos que puede ser hibrida, horizontal y vertical.
En esta fragmentación lo que no se quiere es perder la consistencia de los datos, por lo tanto se respetan las formas normales de la base de datos ok.
Bueno para realizar una transformación en la consulta primero desfragmentamos siguiendo los estandares marcados por las reglas formales y posteriormente realizamos el envio y la maquina que recibe es la que muestra el resultado pertinente para el usuario, de esta se puede producir una copia que sera la equivalente a la original.
Métodos de ejecución de Join.
Existen diferentes algoritmos que pueden obtener transformacioneseficientes en el procesamiento de consultas.
Join en bucles (ciclos) anidados
Si z = r s, r recibirá el nombre de relación externa y s se llamará relación interna, el algoritmo de bucles anidados se puede presentar como sigue:
Para cada tupla tr en s si (tr,ts) si satisface la condición, entonces añadir tr * ts al resultado Donde tr * ts será la concatenación de las tuplas tr y ts. Como para cada registro de r se tiene que realizar una exploración completa de ts, y suponiendo el peor caso, en el cual la memoria intermedia sólo puede concatenar un bloque de cada relación, entonces el número de bloques a acceder es de sr bn b. Por otro lado, en el mejor de los casos si se pueden contener ambas relaciones en la memoria intermedia entonces sólo se necesitarían accesos a bloques.
Join en bucles anidados por bloques
Una variante del algoritmo anterior puede lograr un ahorro en el acceso a bloques, si se procesan las relaciones por bloques en vez de por tuplas. Para cada bloque Br dar a igual para cada bloque Bs de s, para cada tupla tr en Br.
La diferencia principal en costos de este algoritmo con el anterior es que en el peor de los casos cada bloque de la relación interna s se lee una vez por cada bloque de dr y no por cada tupla de la relación externa.
Join por mezcla
Este algoritmo se puede utilizar para calcular si un Join natural es óptimo en la búsqueda o consulta. Para tales efectos, ambas relaciones deben estar ordenadas para los atributos en común es decir se asocia un puntero a cada relación, al principio estos punteros apuntan al inicio de cada una de las relaciones. Según avance el algoritmo el puntero se mueve a través de la relación. De este modo se leen en memoria un grupo de tuplas de una relación con el mismo valor en los atributos de las relaciones.
¿Qué se debe de tomar en cuenta en este algoritmo?
•Se tiene que ordenar primero, para después utilizar este método.
•Se tiene que considerar el costo de ordenarlo / las relaciones.
•Es más fácil utilizar pequeñas tuplas.
Join por asociación.
Al igual que el algoritmo de join por mezcla, el algoritmo de join por asociación se puede utilizar para un Join natural o un equi-join. Este algoritmo utiliza una función de asociación h para dividir las tuplas de ambas relaciones. La idea fundamental es dividir las tuplas de cada relación en conjuntos con el mismo valor de la función de asociación en los atributos de join.
El número de bloques ocupados por las particiones podría ser ligeramente mayor que.
Debido a que los bloques no están completamente llenos. El acceso a estos bloques puede añadir un gasto adicional de 2·max a lo sumo, ya que cada una de las particiones podría tener un bloque parcialmente ocupado que se tiene que leer y escribir de nuevo.
Join por asociación híbrida
El algoritmo de join por asociación híbrida realiza otra optimización; es útil cuando el tamaño de la memoria es relativamente grande paro aún así, no cabe toda la relación s en memoria. Dado que el algoritmo de join por asociación necesita max +1 bloques de memoria para dividir ambas relaciones se puede utilizar el resto de la memoria (M – max – 1 bloques)para guardar en la memoria intermedia la primera partición de la relación s, esto es, así no es necesaria leerla ni escribirla nuevamente y se puede construir un índice asociativo.
Cuando r se divide, las tuplas de tampoco se escriben en disco; en su lugar, según se van generando, el sistema las utiliza para examinar el índice asociativo en y así generar las tuplas de salida del join. Después de utilizarlas, estas tuplas se descartan, así que la partición no ocupa espacio en memoria. De este modo se ahorra un acceso de lectura y uno de escritura para cada bloque de y.
Join Complejos
Los join en bucle anidado y en bucle anidado por bloques son útiles siempre, sin embargo, las otras técnicas de join son más eficientes que estas, pero sólo se pueden utilizar en condiciones particulares tales como join natural o equi-join. Se pueden implementar join con condiciones más complejas tales como conjunción o disyunción Dado un join de las forma se pueden aplicar una o más de las técnicas de join descritas anteriormente en cada condición individual, el resultado total consiste en las tuplas del resultado intermedio que satisfacen el resto de las condiciones. Estas condiciones se pueden ir comprobado según se generen las tuplas. La implementación de la disyunción es homóloga a la conjunción.
Outer Join (Join externos)
Un outer join es una extensión del operador join que se utiliza a menudo para trabajar con la información que falta.
Por ejemplo:
Suponiendo que se desea generar una lista con todos los choferes y los autos que manejan (si manejan alguno) entonces se debe cruzar la relación Chofer con la relación Móvil. Si se efectúa un join corriente se perderán todas aquellas tuplas que pertenecen a los choferes, en cambio con un outer join se pueden desplegar las tuplas resultado incluyendo a aquellos choferes que no tengan a cargo un auto.
El outer join tiene tres formas distintas: por la izquierda, por la derecha y completo. El join por la izquierda ( ) toma todas las tuplas de la relación de la izquierda que no coincidan con ninguna tupla de la relación de la derecha, las rellena con valores nulos en los demás atributos de la relación de la derecha y las añade al resultado del join natural.
Un outer join por la derecha ( ) es análogo al procedimiento anterior y el outer join completo es aquel que efectúa ambas operaciones.
Para el caso de un outer join completo se puede calcular mediante extensiones de los algoritmos de join por mezcla y join por asociación.
lunes, 13 de abril de 2015
viernes, 27 de marzo de 2015
Actividad #14
Una
base de datos no replicada guarda una base de datos en un solo sitio por
consiguiente, por consiguiente no existe no existen base de datos duplicadas.
Varios
factores influyen en la decisión de utilizar replicas de datos.
Tamaño
de base de datos.
Frecuencia
de usos.
Costos-
de desempeño, software, indirectos y de administración, - asociados con
la sincronización de las transacciones y de sus componentes vs beneficios de
tolerancias a las fallas asociados con los datos replicados.
Permite
maximizar el costo de comunicación y al mismo tiempo maximizar el tiempo
de respuesta. El administrador de bases de datos debe de evaluar el modo de
operar de la base de datos, es decir como su nombre lo indica no podemos
realizar el algoritmo en aquellas copias, pero debe ser sobre la base de datos
original .La fragmentación hibrida es de preferencia lo que debe de llevar este
tipo de algoritmos, porque estas utilizan las tres fragmentaciones y las
mas aconsejables.
Hablar
de algoritmos implica sobre la Programación
Hay
gestores que son muy flexibles en cuestiones de programación, mientras que
otros ofrecen más rendimiento. Así, al diseñar el algoritmo tendrá que hacer
toda la información referente a la vida de la base de datos pero por otro lado
deberá buscar siempre de darle soluciones al usuario, pues este será el que al
final de cuentas interesa. Existen en la actualidad infinidad de tecnologías en
cuanto a los gestores de la base de datos se refiere, el que utilizaremos (el
mas actual) será SQL SERVER, este gestor comenzó a crearse por la década
de los 90´s, ofrece muchas ventajas sobre otros gestores, la única desventaja
que podríamos encontrar en su compatibilidad con los Windows mas comerciales
como el 98, XP entre otros. Se preguntaran que tiene que ver el gestor con
los algoritmos de datos no replicados, sin embargo la respuesta es muy
sencilla, y esta es que este algoritmo es fácil de implantar en SQL SERVER.
Ejercicios
Ejercicio de diseño de base de datos distribuidos:
La sociedad médica.
Primero se realiza una proyección de la tabla:
∏código, nombre,
dirección, salario, centro (empleado where (centro.código=0))
Fragmentación vertical.
|
Código
|
Nombre
|
Dirección
|
Salario
|
Centro
|
En el resto de centros, los horarios de sus
consultas y la información de su personal y de sus especialidades.
Se hace una proyección de en su mayoría los
campos de la tabla centro, después también se toman las demás tablas para saber
la informacion que se quiere obtener.
∏código, nombre,
dirección, teléfono (centro) AND hora (consulta) AND fecha_inic (empleado) AND
descripción (especialidad)
Fragmentación vertical.
|
Código
|
Nombre
|
Dirección
|
Teléfono
|
Hora
|
Fecha_inic
|
Descripción
|
Ejercicio de diseño de base de datos distribuidoas:
servicios informáticos.
Se realiza una fragmentación horizontal (selección)
de los atributos de la tabla proyecto.
código, nombre, presupuesto,
empresa, jefe, unidad (proyecto)
Fragmentación horizontal.
|
Código
|
Nombre
|
Presupuesto
|
Empresa
|
Jefe
|
Unidad
|
Así mismo, se realiza también
una fragmentación horizontal (selección) con la tabla empleado, arrojando los
siguientes datos:
código, nombre, apellidos,
dirección, unidad (empleado)
Fragmentación horizontal.
|
Código
|
Nombre
|
Apellidos
|
Dirección
|
Unidad
|
La unidad de recursos humanos
realiza la facturación y usa todos los datos de las empresas. El resto de
unidades sólo necesita el código y nombre de las empresas con las que trabaja.
Como se desea saber todos los
datos de la empresa se hace una selección de todos los atributos de la misma,
luego se impone una condición donde solo se necesita el código de las empresas,
y los proyectos con los que se esta trabajando.
código, nombre, dirección,
correos (empresa where empresa.código=
proyecto.empresa AND (proyecto.unidad=unidad.código AND
(unidad.edificio=edificio.código=0)))
Fragmentación
horizontal.
|
Código
|
Nombre
|
Dirección
|
Correos
|
|
|
|
|
|
código, nombre (empresa where
(empresa.código=proyecto.empresa AND (proycto.unidad=unidad.código NOT
(unidad.edificio=edificio.código=0)))
Fragmentación
horizontal.
|
Código
|
Nombre
|
Hay proyectos internos, y por
tanto sin factura, que tienen valor nulo en su campo empresa.
código, nombre, presupuesto,
jefe, unidad (proyecto)
Fragmentación
horizontal.
|
Código
|
Nombre
|
Presupuesto
|
Jefe
|
Unidad
|
miércoles, 25 de marzo de 2015
Actividad 13 ejercicios
Ejercicios.
Sociedad médica.
• Cuenta con una oficina central y 3 centros médicos. Cada centro médico atiende ciertas especialidades. Una especialidad se puede atender en varios centros. Todo centro médico tiene al menos una especialidad.
• Actualmente utilizan la siguiente BD relacional centralizada:

• Diseñar esquemas de fragmentación y álgebra relacional de una BDD que tenga la mayor autonomía local, sabiendo que en los centros se necesita:
– En la oficina central (Centro.Código=0) la información para realizar las nóminas de todos los empleados.

Algebra relacional :
σ (nombre, salario, IRPF, centro) where codigo=0 (Empleado)
π(se debe de tomar la clave en las proyecciones) código, nombre, dirección, Tfno (Centro)
En el resto de centros, los horarios de sus consultas y la información de su personal y de sus especialidades.
Esquema de fragmentación:
Álgebra relacional:
π código, nombre, dirección, Tfno (Centro)
σ centro, hora (Consulta)
π código, nombre, dirección, salario, IRPD, fecha_inic, centro (Empleado)
π código, nombre, descripcion (Especialidad)
Suscribirse a:
Entradas (Atom)









