Vas a hacer 3 tipos de ajustes, 1 reactivo y 2 proactivo.
Reactivo
De la nada, algunas consultas comienzan a causarle problemas. Podría deberse a un error o función de la aplicación, una tabla que crece más allá de las expectativas, un aumento en el tráfico o el optimizador de consultas se vuelve "creativo". Este podría ser un tipo de asunto en medio de la noche, o podría ser en respuesta a la lentitud del sistema de naturaleza no crítica. De cualquier manera, el carácter definitorio de la afinación reactiva es que ya tiene un problema . No hace falta decir que quieres hacer lo menos posible. Lo que nos lleva a ...
Proactivo
Tipo 1: mantenimiento de rutina
En algún tipo de programación, cada pocos meses o semanas, dependiendo de la frecuencia con la que cambie su esquema y la rapidez con la que crezcan sus datos, debe revisar el resultado de las herramientas de análisis de rendimiento de su base de datos (por ejemplo, informes AWR para Oracle DBA). Está buscando problemas incipientes, es decir, cosas que en su camino requieren un ajuste reactivo, así como fruta baja, elementos que probablemente no causarán problemas pronto pero que pueden mejorar con poco esfuerzo con la esperanza de prevenir mucho -futuros problemas. La cantidad de tiempo que debería dedicar a esto dependerá de la cantidad de tiempo que tenga y en qué otra cosa podría dedicarlo, pero la cantidad óptima nunca es cero. Sin embargo, puede reducir fácilmente la cantidad que necesita gastar haciendo más de ...
Tipo 2: diseño adecuado
La advertencia de Knuth contra la "optimización prematura" es ampliamente conocida y debidamente respetada. Pero debe usarse la definición adecuada de "prematuro". Algunos desarrolladores de aplicaciones, cuando se les permite escribir sus propias consultas, tienden a adoptar la primera consulta a la que acuden que es lógicamente correcta, y no tienen en cuenta el rendimiento, presente o futuro. O pueden probar contra un conjunto de datos de desarrollo que simplemente no es representativo del entorno de producción (consejo: ¡no haga esto! Los desarrolladores siempre deben tener acceso a datos realistas para las pruebas). El punto es que el momento adecuado para ajustar una consulta es cuando se implementa por primera vez, no cuando aparece en una lista de SQL de bajo rendimiento, y definitivamente no cuando causa un problema crítico.
Entonces, ¿qué calificaría como una optimización prematura en terrenos DBA? Al principio de mi lista estaría sacrificando la normalización sin una necesidad demostrada. Seguro que podría mantener una suma en una fila principal en lugar de calcularla en tiempo de ejecución a partir de las filas secundarias, pero ¿realmente necesita hacerlo? Si eres Twitter o Amazon, la desnormalización estratégica y el cálculo previo pueden ser tus mejores amigos. Si está diseñando una pequeña base de datos contable para 5 usuarios, la estructura adecuada para facilitar la integridad de los datos debe ser la máxima prioridad. Otras optimizaciones prematuras son también una cuestión de prioridades. No pierda horas ajustando una consulta que se ejecuta una vez al día y toma 10 segundos, incluso si cree que puede reducirla a 0.1 segundos. Tal vez tenga un informe que se ejecute durante 6 horas diarias, pero explore programarlo como un trabajo por lotes antes de invertir tiempo en ajustarlo. No invierta en una instancia de informes replicada en tiempo real por separado si su carga de producción nunca flota por encima del 10% (suponiendo que pueda administrar la seguridad).
Al realizar pruebas con datos realistas, realizar conjeturas informadas sobre los patrones de crecimiento y tráfico (además de las asignaciones para picos) y aplicar su conocimiento de las peculiaridades del optimizador de su plataforma, puede implementar consultas que se ejecutan (casi) de manera óptima no solo ahora, sino en el futuro , y en condiciones menos que ideales. Cuando aplica las técnicas adecuadas, el rendimiento de la consulta puede predecirse y optimizarse con precisión (en el sentido de que cada componente es tan rápido como debe ser).
(Y mientras lo haces, ¡ aprende estadísticas! )