Está en la página 1de 5

AA9-Ev4 Optimizacin de la Base de Datos

Carlos Antonio Espinosa Orozco


CC No. 77.033.890
Cmo optimizar una base de datos mediante el Asistente para la optimizacin de motor
de base de datos
La optimizacin del acceso a los datos es vital para el tiempo de carga de la pgina,
debido a que suele ser el factor que ms afecta al tiempo que tiene que esperar el
navegador para recibir el HTML. Este tiempo de espera es muy importante, ya que el
resto de recursos de la pgina (imgenes, scripts y hojas de estilo), no se empiezan a
bajar hasta que el navegador no lee el HTML desde el que se hace referencia a estos
recursos.
Este tipo de optimizacin es probablemente la ms compleja de todas, en primer lugar
porque depende de dos factores variables en el tiempo: por un lado, de cmo y de qu
tipo son las consultas que se van a realizar y, por otro, de la carga de trabajo que tenga
que soportar el servidor o servidores. En segundo lugar por la gran cantidad de
conocimientos que hay que tener para saber reescribir consultas, reescribir el cdigo
que ejecuta las consultas, crear ndices, vistas materializadas, particiones horizontales
y verticales, rplicas, tablas de apoyo, saber elegir los tipos de datos a usar, saber
optimizar el esquema sin perder la lgica del modelo de negocio, saber ajustar los
parmetros de configuracin del SGBD, conocer y saber usar sistemas de cach
externos. Adems cada uno de estos puntos, de los que hay muchos libros escritos, se
debe abordar de forma distinta dependiendo de qu SGBD

SQL Server 2008 R2


Puede utilizar la GUI (interfaz grfica de usuario) del Asistente para la optimizacin de
motor de base de datos para optimizar bases de datos mediante tablas o archivos de
carga de trabajo. La GUI del Asistente para la optimizacin de motor de base de datos le
permite ver con facilidad los resultados de la sesin de optimizacin actual y los
resultados de sesiones anteriores. Para obtener ms informacin,
Para optimizar una base de datos mediante una tabla o archivo de carga de trabajo
como entrada
1. Determine las caractersticas de la base de datos (ndices, vistas indizadas y
particiones) que desea que el Asistente para la optimizacin de motor de base
de datos tenga en cuenta para agregarlas, quitarlas o mantenerlas durante el

2.
3.

4.
5.

anlisis. Para obtener ms informacin, vea Acerca de las cargas de


trabajo y Consideraciones para usar el Asistente para la optimizacin de motor
de base de datos.
Cree una carga de trabajo. Para obtener ms informacin, vea Cmo crear cargas
de trabajo
Inicie el Asistente para la optimizacin de motor de base de datos e inicie sesin
en una instancia de Microsoft SQL Server. Para obtener ms informacin,
vea Iniciar el Asistente para la optimizacin de motor de base de datos.
En la ficha General, escriba un nombre en Nombre de sesin para crear una
nueva sesin de optimizacin.
Seleccione Archivo de carga de trabajo o Tabla y escriba la ruta de acceso al
archivo o el nombre de la tabla en el cuadro de texto adyacente.

El formato para especificar una tabla es: database_name.schema_name.table_name

1. Para buscar una tabla o archivo de carga de trabajo, haga clic en el


botn Examinar.
El Asistente para la optimizacin de motor de base de datos presupone que los
archivos de carga de trabajo son archivos de sustitucin incremental. Para
obtener ms informacin acerca de los archivos de sustitucin incremental,
Al usar una tabla de traza como una carga de trabajo, esa tabla debe existir en el
mismo servidor que el Asistente para la optimizacin de motor de base de datos
est optimizando. Si crea una tabla de traza en otro servidor, muvala al servidor
en el que el Asistente para la optimizacin de motor de base de datos est
realizando la optimizacin antes de utilizarla como carga de trabajo.
2. Seleccione las bases de datos y tablas en las que desea ejecutar la carga de
trabajo seleccionada en el paso 5. Para seleccionar las tablas, haga clic en la
flecha Tablas seleccionadas.
3. Seleccione Guardar registro de optimizacin para guardar una copia del registro
de optimizacin. Desactive la casilla de verificacin si no desea guardar una
copia del registro de optimizacin.
Puede ver el registro de optimizacin despus del anlisis; para ello, abra la
sesin y seleccione la ficha Progreso.
4. Haga clic en la ficha Opciones de optimizacin y seleccione las opciones que
figuran en la lista. Para obtener ms informacin, vea Opciones de optimizacin
disponibles.
5. Haga clic en el botn Iniciar anlisis de la barra de herramientas.
Si desea detener la sesin de optimizacin una vez iniciada, en el
men Acciones seleccione una de las siguientes opciones:

Detener anlisis (Con recomendaciones) detiene la sesin de


optimizacin y pregunta al usuario si desea que el Asistente para la
optimizacin de motor de base de datos genere recomendaciones
basadas en el anlisis realizado hasta este punto.
o Detener anlisis detiene la sesin de optimizacin sin generar ninguna
recomendacin.
Optimizacin de consultas
o

Para finalizar, algunos breves consejos para optimizar consultas:

Cambiar los OR por IN, cuando tenemos ms de un valor para comparar.


Minimizar el coste de los JOIN: La concatenacin natural o JOIN es la operacin ms
costosa de las bases de datos relaciones, ya que requiere realizar una
multiplicacin cartesiana y una seleccin de valores. Algunas tcnicas que podemos
usar para minimizar su efecto consisten en:
Reordenarlos para concatenar primero las relaciones con menos filas para
reducir el nmero de cruces.
Crear subconsultas en donde se filtren o limiten el nmero de filas de las
relaciones grandes antes de realizar los siguientes JOINs.
A veces, dividir una consulta en varias, es mejor que hacerlo todo con una sola
consulta, de forma que podemos obtener en una primera consulta unos pocos
identificadores que podemos pasar con un IN a la siguiente consulta, en lugar de
realizar un JOIN.
Cambiar los JOIN por EXISTS si no se va a mostrar ningn dato de la relacin con
la que se realiza el cruce.
Tener en cuenta el problema del N + 1: El n+1 se produce normalmente cuando
tenemos un listado en el que para mostrarlo como queremos, por cada tem
necesitamos realizar una consulta adicional (el ms uno del n+1). En este caso,
suele ser mejor realizar uno o varios JOIN adicionales, en la consulta que recupera
el listado de tems. De esta forma obtenemos el listado tal y como lo necesitamos, y
no se tienen que lanzar consultas adicionales para cada tem.
Especificar siempre los nombres de las columnas en las SELECT, si no el SGBD leer
todas las filas del disco. El asterisco se debe usar s y solo s se utiliza COUNT, en
cuyo caso el SGBD sabr que no tiene que leer todas las columnas.
Crear ndices: los ndices permiten un acceso a los datos no secuencial mucho ms
rpido, pero son costosos de crear, as que no es conveniente su uso si tenemos
muchas ms lecturas que escrituras. Debemos analizar el plan de ejecucin de las
consultas (cada SGBD tiene su manera de verlo) para saber donde debemos crear
ndices.
Normalmente, crearemos los ndices en claves ajenas y en las columnas que se usen

con ORDER BY o WHERE. Si se crean ndices compuestos, se deben poner las


columnas en el mismo orden que se vayan a usar en las consultas
Cachear las consultas ms frecuentes
Activar la cach de base de datos del SGBD a veces puede empeorar el
rendimiento. Esto depende del volumen de datos al que se acceda ms frecuentemente.
Si el volumen de datos es alto y se actualiza frecuentemente, estaremos siempre
escribiendo en la cach en lugar de leer de ella. As que normalmente es preferible
recurrir a un sistema de cach externo, en el cual podamos controlar que se van a
cachear realmente los datos ms frecuentes y ms frescos. Si el sistema de cach no nos
provee de esta funcionalidad, podemos implementarla nosotros. Una buena forma de
hacerlo sin el sobrecoste de almacenar el nmero de veces que se accede a una consulta,
es generar un nmero aleatorio y cachear la consulta si ese nmero pasa de cierto valor.
Por ejemplo, supongamos que generamos un nmero aleatorio entre 1 y 100 y la
consulta se cachea si dicho nmero es menor que 10, de esta forma se guardar la
consulta en cach con una probabilidad del 10% en cada peticin, as si la consulta tiene
ms peticiones, ser ms probable que se guarde en cach.
Optimizar la paginacin
La paginacin suele ser una tarea costosa cuando tenemos que mostrar varios nmeros
de pgina, porque para eso se tiene que calcular el nmero de filas en la relacin, lo que
puede requerir una lectura completa de la misma, dependiendo del SGBD. Siempre
ser ms eficiente mostrar enlaces de anterior y siguiente, recuperando todas las filas
a mostrar y una ms, de manera que se muestra el enlace de siguiente pgina, si nos
llega esta fila adicional desde la BD. Alternativamente, podemos mantener en una
relacin independiente el nmero de filas.
Otra cosa que puede afectar a las paginaciones, es que cuando estamos en una pgina
interior se deben descartar un cierto nmero de filas, pertenecientes a las pginas
anteriores, y que son ledas del disco con todas las columnas que aparezcan en la
consulta. Una forma de evitar esto es realizar un JOIN con una subconsulta que recupere
los identificadores que necesitamos antes de leer toda la informacin. Ejemplo:
SELECT dato1, dato2, dato3 FROM Foo INNER JOIN( SELECT id FROM Foo ORDER BY
dato1 LIMIT 50,10) AS FooPaginado USING(id)