Hosting en inglés

alojamiento web con Webhostinghub
Hosting SSD con Raiola

¿Como mejorar el rendimiento de las bases de datos?

Las bases de datos son las entrañas de una aplicación. Sin ellas, quedan sólo pieles y esqueletos, que no son tan útiles por sí mismos. Por lo tanto, el rendimiento general de cualquier aplicación depende en gran medida del rendimiento de la base de datos. Hay docenas de factores que afectan el rendimiento, incluyendo cómo se utilizan los índices, cómo se estructuran las consultas y cómo se modelan los datos.

En consecuencia, hacer pequeños ajustes a cualquiera de estos elementos puede tener un gran impacto. Esta guía de ajuste de rendimiento de base de datos cubrirá los conceptos básicos de construcción y mantenimiento de bases de datos que maximicen los recursos del sistema para una eficiencia óptima. Los ejemplos suponen que se está utilizando SQL Server, pero el consejo general es aplicable a cualquier sistema de administración de bases de datos.

Mejore las estrategias de indexación

La indexación a menudo es pasada por alto durante el proceso de desarrollo, pero una buena estrategia de indexación puede ser su mejor herramienta para ajustar su base de datos. Los índices son estructuras de datos que permiten seleccionar y clasificar rápidamente las filas en una tabla de base de datos. Facilitan la recuperación más rápida de datos al proporcionar búsquedas aleatorias y un fácil acceso a registros ordenados. La configuración de índices por lo general no requiere mucha codificación, pero se necesita dedicarle algo de pensamiento. Si no tiene mucha experiencia en la creación de índices, consulte el siguiente diagrama, inspirado en Toptal, que describe las mejores prácticas para estructurar consultas:

Fuente: KeyCDN

El uso de índices a veces puede ser contraproducente. Por ejemplo, si sus tablas son frecuentemente afectadas por sentencias INSERT, UPDATE o DELETE, su rendimiento general podría disminuir porque los índices deben modificarse después de esas operaciones.

Cuando necesite realizar una sola inserción de un lote grande, la eliminación temporal de sus índices puede acelerar el proceso; Sin embargo, tenga en cuenta que al hacerlo afectará a todas las consultas que se ejecuten en las tablas afectadas, por lo que sólo debe hacer esto cuando tiene más de un millón de filas de datos que insertar. No olvide recrear sus índices cuando haya terminado.

Compruebe periódicamente si hay índices que faltan o están duplicados. Sea muy cuidadoso cuando elimine índices que cree que no están usados. En general, es ACEPTABLE eliminar duplicados. Debe tener un conocimiento profundo del sistema y de las cargas de trabajo antes de realizar cualquier cambio.

Evite las subconsultas correlacionadas y los bucles de codificación

Las subconsultas correlacionadas dependen de los valores de una consulta primaria. A los desarrolladores más nuevos les encanta usarlas porque las subconsultas hacen que la codificación sea más conveniente. Desafortunadamente, estructurar consultas de esta manera puede bajar el rendimiento. Tomemos el siguiente ejemplo:

SELECT c.Name,
c.Age
(SELECT StudentName FROM Student WHERE ID = c.StudentID) AS StudentName
FROM Teacher c

En el código anterior, la consulta interna se está ejecutando para cada fila procesada por la consulta externa, que es innecesaria. Puede reestructurar este ejemplo mediante una combinación:

SELECT c.Name,
c.Age,
co.StudentName
FROM Teacher c
LEFT JOIN Student co
ON c.StudentID = co.StudentID

Del mismo modo, debe hacer todo lo posible para evitar codificar bucles a toda costa. Los cursores se utilizan para realizar bucles en SQL Server. El uso de cursores puede hacer que su código se vea bien y ordenado, pero también puede resultar en que la base de datos se vea bombardeada con miles de solicitudes innecesarias. En lugar de agregar cursores, utilice instrucciones SQL bien escritas cuando sea posible. Si debe agregar cursores, utilícelos únicamente para los trabajos que están programados para ejecutarse fuera de las horas pico.

Mantenga ciertos archivos en discos separados

Es posible que desee considerar dedicar un conjunto de unidades exclusivamente a tempdb si no lo ha hecho ya. En realidad, es una buena práctica también poner sus datos, registros y archivos de copia de seguridad en un disco independiente cada vez que configura un servidor de base de datos.

Si no lo hizo desde el principio, el aumento de rendimiento y otros beneficios que recibirá al realizar esos cambios ahora valdrán la pena. Poner todo en un solo disco no sólo baja el rendimiento de la base de datos, sino que también puede crear una crisis en caso de un desastre de recuperación. Particionar no resulta suficiente en etsos casos.

Actualice su hardware

Al igual que la mayoría de las cuestiones relacionadas con la tecnología, siempre se puede aumentar el rendimiento de la base de datos invirtiendo dinero en el hardware. Dado que cada consulta debe ejecutarse a través de la memoria, la adición de capacidad a su servidor puede acelerar las cosas; Sin embargo, si desea aprovechar al máximo la memoria adicional, debe configurar correctamente su servidor.

Debe vigilar la latencia del disco. Aumentará junto con la carga de la unidad de disco duro, lo que causará una disminución en el rendimiento general de la base de datos. Aproveche todos los mecanismos de almacenamiento en caché disponibles para aliviar este problema.

Si tiene más dinero para gastar, podría considerar la posibilidad de actualizar a unidades de estado sólido. Se están volviendo más asequibles, por lo que si usted trabaja para una empresa, ahora puede ser un buen momento para hablar con los encargados para que realicen la inversión requerida. No obstante, aún así debe colocar todos sus archivos de datos, registros y copias de seguridad de la base de datos en una unidad separada de todo lo demás.

Conozca quién tiene acceso

Realizarr un balance de las aplicaciones y servicios que tienen acceso a su base de datos puede ayudarle a identificar los cuellos de botella de rendimiento. Un rendimiento deficiente de un solo servicio puede estar ralentizando toda laoperación. Si todos los clientes de su base de datos parecen estar sufriendo un rendimiento deficiente, entonces debe comprobar la salud de su host.

Compruebe la capacidad de conexión

Si una gran parte del tiempo de respuesta de su base de datos se consume debido a la adquisición de conexión, es posible que tenga que volver a configurar su grupo de conexiones. Debe conocer el número exacto de conexiones que puede manejar su base de datos; No establezc el valor predeterminado al máximo porque esto puede causar problemas para otros clientes conectados a la base de datos.

El tamaño de una agrupación de conexiones debe permanecer constante, por lo que siempre establezca el mínimo y el máximo con el mismo valor. Para determinar la capacidad de conexión, aumente gradualmente la carga y el número de conexiones mientras supervisa las métricas del servidor de base de datos. Cuando la CPU o la memoria se agote, conocerá sus límites.

Más sugerencias para mejorar el rendimiento de la base de datos

Ahora que hemos cubierto los problemas estructurales más grandes que afectan al rendimiento de la base de datos, he aquí una lista de modificaciones rápidas que puede hacer para ver algunas mejoras pequeñas pero instantáneas:

  1. Cree una clave primaria como un índice agrupado para cada tabla. También debe configurar un índice para cualquier columna que sea una clave externa.
  2. Utilice SET NOCOUNT ON en la parte superior de cada procedimiento y SET NOCOUNT OFF en la parte inferior de cada procedimiento.
  3. A menos que esté escribiendo software bancario, entonces no se moleste con el bloqueo. Utilizar SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED en la parte superior y volver a READ COMMITTED al final de los procedimientos de almacenamiento es más eficaz que usar la sugerencia NOLOCK.
  4. Siéntase libre de utilizar las transacciones cuando sea necesario, pero no permita ninguna interacción del usuario mientras estén en curso. Lo mejor es mantener todas sus transacciones dentro de un procedimiento almacenado.
  5. No utilice las tablas temporales a menos que las necesite absolutamente.
  6. Escanee su código para encontrar códigos del comando NOT IN y sustitúyalo con un join left externo.
  7. Hablando de eso, convierta en un hábito revisar su código antes y después de cada cambio que realice.
  8. Encuentre maneras de reducir la cantidad de viajes redondos requeridos al servidor. Por ejemplo, intente devolver varios ResultSets.
  9. No se moleste en usar sugerencias de índices o unir sugerencias.
  10.  En lugar de utilizar las sentencias SELECT *, debe especificar individualmente cada columna que necesita incluso si necesita cada columna de una tabla.
  11. Al comprobar si existe un registro, utilice EXISTS () en lugar de COUNT (). Ambos son eficaces, pero EXISTS () deja de ejecutarse automáticamente una vez que encuentra el registro solicitado, lo que dará como resultado un mejor rendimiento y un código más limpio.

 

SUSCRÍBETE SIN COSTO ALGUNO A NUESTRO BOLETÍN

Escribe tú correo electrónico:

Recibe contenido de este sitio sin costo alguno en tu e-mail. Solamente enviaremos los últimos artículos de Internetrcc, sin ningún tipo de spam

Acelera tu sitio

Leave a Reply