Monitoreo y Optimización de Bases de Datos: Estrategias y Herramientas Clave
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 14,72 KB
Monitoreo y Tareas Principales de la DBA
El monitoreo de un servidor y del SGBD es fundamental para comprobar su funcionamiento. Es recomendable monitorizar regularmente y de forma lo más automatizada posible la base de datos. La herramienta más conveniente debe ser la menos intrusiva (la que menos interfiera en el sistema).
Trazas, Logs y Alertas
- Trazas: Registros cuya información hace referencia a los lugares y datos accedidos por el sistema y al tipo de estos últimos. Son útiles para detectar fallos de la caída del servidor.
- Log: En los sistemas Log, podemos ver cuál fue el fallo por la caída del servidor. Con la opción –log, cuando se haya arrancado, podremos buscar al final del log cuál es la sentencia causante del fallo.
- Alertas: Nos permiten enviar notificaciones o realizar ciertas acciones cuando se dan ciertas situaciones o condiciones propias del SGBD o incluso de la máquina donde se está ejecutando.
Elementos y Parámetros Susceptibles a la Monitorización
“La gestión de los índices en la BD” es crucial, ya que los índices se definen con la intención de mejorar la velocidad de acceso a los datos. A continuación, se presentan diferentes tipos de medidas y cómo nos afectan:
- Transacción por unidad de tiempo: Obtener el rendimiento de las aplicaciones de BD.
- Tiempo de respuesta: Mide el tiempo total requerido por una tarea.
- Escalabilidad: Medidas útiles para sistemas que deben mantener el rendimiento bajo una carga de trabajo variable.
- Concurrencia: Permite obtener el número de solicitudes por segundo que generan en el servidor los usuarios en el momento de máxima actividad.
Optimización: Almacenamiento en Memoria y Espacio en Disco
Resultan críticas las operaciones de E/S en disco para el funcionamiento del mismo; los tiempos de E/S pueden hacer invisibles la velocidad del mejor procesador. El parámetro más relevante se llama “Tiempo de latencia”, que depende de dos factores:
- El tiempo para mover la cabeza del lector.
- La velocidad de giro del disco.
Algunas variables están relacionadas con el uso y gestión de memoria, las podemos separar en:
- Aspectos generales: Podemos mejorar el rendimiento con un sistema operativo que haga una gestión eficiente de la caché de la CPU.
- Motores: InnoDB y MyISAM cuentan con buffers de clave, en los que MySQL almacena los índices que son accedidos, evitando así el acceso a disco.
- Tablas temporales: Se almacenan en memoria y usan índices hash.
- Caché de consultas: La query cache almacena la sentencia y el resultado obtenido de esta.
Ejecución de Consultas
El procesado normal de una consulta consta de 3 partes diferenciadas, aunque se realicen de forma combinada:
- Análisis: Es el paso por el que el intérprete comprueba la sintaxis de la sentencia SQL y la trocea en sus elementos básicos, creando un árbol de análisis sintáctico.
- Procesamiento: Comprueba el árbol de análisis generado y busca semántica adicional.
- Optimización: Si el árbol es válido, el optimizador lo convertirá en un plan de ejecución.
Herramientas y Sentencias para la Gestión de Índices
Los índices son una estructura de datos que permiten un acceso rápido a los registros de la tabla en la que están definidos, aumentando de este modo la velocidad de las operaciones sobre esos datos. Para ver los índices que hay definidos utilizamos:
SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tabla [{FROM | IN} base_datos] [WHERE expresión]
Los índices no pueden ser actualizados directamente, sino que deben ser eliminados y creados nuevamente con las modificaciones que deseemos introducir en ellos. Con el comando OPTIMIZE TABLE podemos actualizar y reordenar los índices al tiempo que desfragmenta el fichero de datos asociado a la tabla. Funciona del siguiente modo:
- Si la tabla ha borrado o dividido registros, repara la tabla.
- Si las páginas índices no están ordenadas, las ordena.
- Si las estadísticas no están actualizadas, y la reparación no es posible ordenando el índice, las actualiza.
Tipos de Índice que Maneja MySQL
- UNIQUE: Formado por campos cuyo valor no se repite en la tabla.
- PRIMARY: Son los que forman la clave primaria de una tabla. Se recomienda que sean numéricos.
- FULL-TEXT: Formados por uno o varios campos de texto, y se suelen usar para buscar palabras dentro de un campo.
- SPATIAL: Índices usados para caracteres especiales, como LINE o CURVE.
Reglas y Clasificación de SGBDD
Reglas de un Sistema Distribuido
- Los nodos de un sistema distribuido deben ser lo más autónomos posible unos de otros.
- Los nodos no deben depender de otro que sea central.
- Operación continua.
- Independencia de la ubicación.
- Independencia de la fragmentación.
- Independencia de la replicación.
- Independencia del sistema operativo.
- Independencia de la red.
- Independencia del SGBD.
- Procesamiento de consultas distribuidas.
- Procesamiento de transacciones distribuidas.
- Independencia del hardware.
Factores que Permiten Clasificar los SGBDD
- Homogeneidad: Nos indica si los SGBD locales son todos iguales, se tiene un único producto.
- Autonomía: Hace referencia a la distribución del control sobre el sistema distribuido. Hay tres niveles de autonomía:
- Diseño.
- Comunicación.
- Ejecución.
Tipos de SGBDD
- Sistemas compuestos o integrados: En estos casos, el acceso se realiza a través del procesador de datos distribuidos, con los nodos dependientes de él, que se encarga de gestionar todas las tareas de administración.
- Sistemas federados o semiautónomos: Permiten que el procesador local de cada nodo actúe de manera independiente, para lo que cada nodo cuenta con sus propios usuarios y administradores junto con los fragmentos necesarios de la BDD.
- Sistemas multibase: En este caso, los procesadores locales no saben cómo ponerse en contacto con otros SGBD y desconocen su existencia, es decir, actúan como SGBD independientes.
Componentes de un SGBDD
- Procesadores de datos locales: Se encargan de la gestión local de los datos de forma muy semejante a como lo hace un SGBD.
- Directorio global (Diccionario): Es análogo al DD de las BD centralizadas. Registra dónde y cómo se guardan los datos.
- Procesador de aplicaciones distribuidas: Se encarga de gestionar las funciones distribuidas.
- Software de comunicaciones: No es parte directa del SGBDD, pero provee al procesador de aplicaciones distribuidas de los servicios de comunicaciones necesarios para realizar su tarea.
Fragmentación
Para realizar la fragmentación es necesario establecer la condición que permite la división en trozos. Los cuatro motivos que podemos emplear para romper el esquema relacional global son:
- Es útil porque BDD funcionan con vistas.
- Mayor eficiencia al almacenarse los datos cerca de donde más se emplean.
- Aumenta el grado de concurrencia.
- Proporciona más seguridad ante el acceso a datos por personas no autorizadas.
Medidas para Asegurar la BD
Para asegurar que la BD no sufrirá cambios semánticos, son:
- Completitud: Todos los datos de una relación fragmentada deben estar en alguno de los fragmentos.
- Disyunción: Los datos que aparecen en un fragmento no deben aparecer en otro, a no ser que se trate de una clave primaria en una fragmentación vertical.
- Reconstrucción: Siempre se debe poder reconstruir la BD original a partir de todos los fragmentos.
Técnicas de Fragmentación
- Fragmentación vertical: Divide la relación en conjuntos de columnas. La fragmentación vertical se basa en realizar una proyección, y emplea la siguiente notación: ri = Пi(r).
- Fragmentación horizontal: Divide una relación en subconjuntos de tuplas o registros, cada uno de ellos con un significado lógico. Hay dos tipos:
- FH primaria: Es una selección de la relación global y se realiza a partir de un predicado (Pi) que establece la semántica de la fragmentación. Se denota por: Ri = σ Pi(R).
- FH derivada: Se realiza en función de los predicados definidos sobre otras relaciones o fragmentos, porque la relación R depende de la relación Q.
- Fragmentación VH: Se aplica primero la vertical y luego la horizontal sobre cada fragmento.
- Fragmentación HV: En este caso, es primero la horizontal y después la vertical a cada trozo.
- Celdas: Se aplican ambas fragmentaciones simultáneamente sobre la relación, formando una red de celdas.
Técnicas de Asignación
El esquema de asignación consiste en repartir los fragmentos entre los correspondientes nodos que constituyen la red de la BDD. Para ello, debe hacerse de la manera más óptima en base a estos parámetros bien definidos:
- Mínimo coste: Minimiza el coste por almacenamiento de los fragmentos en el nodo correspondiente.
- Rendimiento: Se pretende minimizar los tiempos de respuesta y maximizar la capacidad de cada nodo para procesar la información.
Consultas Distribuidas
Estrategias para realizar el procesamiento de una consulta:
- Enviar copias de las relaciones involucradas al sitio que solicita la consulta y en el que se ejecuta.
- Realizar el envío de las relaciones a los sitios necesarios para realizar las operaciones cruzadas agrupadas por pares e ir enviando los resultados para agruparlos con el siguiente bloque de datos.
- Hacer un envío de relaciones optimizando el tamaño de datos que se mandan por la red.
Transacciones Distribuidas
Una transacción es una unidad de la ejecución de un programa que accede y puede actualizar elementos de datos. Hay dos tipos de transacciones que se pueden dar en una BDD:
- Locales: Tienen acceso a los datos y los actualizan solo en una BD local.
- Globales: Tienen acceso a los datos y los actualizan en varias BD locales.
Podemos imaginar que cada sitio encargado de gestionar transacciones está formado de dos partes:
- Gestor de transacciones: Administra la ejecución de las transacciones en un sitio local. Cada una de estas puede ser una transacción local o parte de una global.
- Coordinador de transacciones: Coordina la ejecución de las transacciones iniciadas en un sitio, sean del tipo que sean.
Ventajas y Desventajas de Gestor de Bloqueo
- Único: Hay un único gestor que está en una máquina. Ventaja: Es un sistema muy sencillo de implementar y se tratan de forma sencilla los interbloqueos al gestionarlos en una sola máquina. Desventaja: Se pueden formar cuellos de botella al gestionar una máquina todas las peticiones de bloqueo y si falla la máquina se pierde el controlador de concurrencia, lo que obliga a detener el procesamiento.
- Distribuido: La función del gestor está entre las máquinas. Ventaja: La implementación también es sencilla y al no ser una única máquina la que gestiona los bloqueos no hay riesgo de cuellos de botella. Desventaja: La gestión de interbloques es más compleja.
Optimización de Consultas sobre BDD
En el caso de las bases de datos distribuidas, es necesario tener en cuenta estos otros parámetros:
- Conexiones abiertas: Determina la cantidad máxima de conexiones remotas abiertas de manera concurrente para cada conexión. Es el parámetro OPEN_LINKS.
- Valor del punto de COMMIT: Especifica el valor de commit point site, lugar de punto de commit, en una transacción.
Replicación
Una replicación de ficheros es una copia de los datos en dos o más sitios. Es posible almacenar réplicas de relaciones fragmentadas en vez de hacerlo para relaciones completas. Al hacer réplicas, hemos de considerar:
- Ventajas:
- Disponibilidad: Si falla alguno de los sitios donde se encuentran los datos pertenecientes a esa relación, se pueden seguir procesando las consultas a pesar de que se haya caído el sitio.
- Paralelismo incrementado: Cuando la mayoría de las operaciones a realizar sobre la relación escogida son mayoritariamente de consulta, varios sitios pueden procesar en paralelo las lecturas que necesitan de esa relación.
- Sobre carga incrementada: Todas las réplicas existentes deben ser consistentes con la relación original para evitar posibles errores de coherencia entre los datos que se almacenan en distintos nodos.
Configuración de Nodo Maestro y Nodo Esclavo
Resulta sencillo configurar una replicación en MySQL; la situación más básica es contar con un servidor maestro y otro esclavo. El proceso es:
- Configurar las cuentas de replicación en cada servidor.
- Configurar maestro y esclavo.
- Instruir al esclavo para conectarse y actualizar su réplica desde el maestro.