Preguntas Específicas por Rol (Desarrollador, Administrador, DevOps)
Desarrollador: ¿Cómo optimizas una consulta SQL que tiene un rendimiento lento?
Respuesta:
Comenzaría analizando el plan de consulta utilizando EXPLAIN ANALYZE. Luego, buscaría índices faltantes, joins ineficientes o escaneos completos de tablas. Reescribir subconsultas, usar tipos de datos apropiados y limitar los conjuntos de resultados son también técnicas comunes de optimización.
Desarrollador: Explica la diferencia entre UNION y UNION ALL.
Respuesta:
UNION combina los conjuntos de resultados de dos o más sentencias SELECT y elimina las filas duplicadas, realizando efectivamente una operación DISTINCT. UNION ALL también combina conjuntos de resultados pero incluye todas las filas de ambas consultas, incluidos los duplicados, lo que lo hace generalmente más rápido.
Desarrollador: ¿Qué es un ORM y cuáles son sus pros y contras?
Respuesta:
Un ORM (Object-Relational Mapper) mapea objetos en un lenguaje de programación a tablas en una base de datos relacional. Los pros incluyen un desarrollo más rápido, reducción de código SQL repetitivo e independencia de la base de datos. Los contras son la posible sobrecarga de rendimiento, la fuga de abstracción y un menor control sobre SQL complejo.
Administrador: ¿Cómo abordas las estrategias de copia de seguridad y recuperación de bases de datos?
Respuesta:
Implemento una estrategia de múltiples niveles que incluye copias de seguridad completas, diferenciales y de registros de transacciones. El Objetivo de Punto de Recuperación (RPO) y el Objetivo de Tiempo de Recuperación (RTO) dictan la frecuencia y el tipo de copias de seguridad. Las pruebas regulares de los procedimientos de recuperación son cruciales para garantizar la integridad y disponibilidad de los datos.
Administrador: ¿Cuáles son las causas comunes de contención en bases de datos y cómo las resuelves?
Respuesta:
Las causas comunes incluyen transacciones de larga duración, deadlocks, bloqueos excesivos y consultas ineficientes. La resolución implica identificar sesiones bloqueantes, optimizar consultas problemáticas, implementar indexación adecuada y, a veces, ajustar los niveles de aislamiento o usar bloqueo a nivel de fila.
Administrador: Describe tu experiencia con la aplicación de parches y actualizaciones de bases de datos.
Respuesta:
Sigo un enfoque estructurado: reviso las notas de la versión, pruebo en un entorno no productivo, planifico la reversión y programo durante las ventanas de mantenimiento. El monitoreo del rendimiento y los registros después de la actualización es esencial. Las herramientas de automatización pueden agilizar el proceso para tareas repetitivas.
DevOps: ¿Cómo implementas cambios en el esquema de la base de datos en un pipeline de CI/CD?
Respuesta:
Utilizo herramientas de migración de bases de datos como Flyway o Liquibase para gestionar las versiones del esquema. Los cambios se scriptan como migraciones idempotentes, se controlan por versión y se aplican automáticamente como parte del pipeline de CI/CD, primero a entornos inferiores y luego a producción.
DevOps: ¿Qué es la base de datos como código (Database as Code) y por qué es importante?
Respuesta:
La Base de Datos como Código (DBaC) trata el esquema de la base de datos, la configuración y, a veces, los datos como código controlado por versión. Es importante para la consistencia, la repetibilidad, la auditabilidad y para permitir despliegues automatizados, reduciendo errores manuales y desviaciones entre entornos.
DevOps: ¿Cómo monitoreas el rendimiento de la base de datos en un entorno de producción?
Respuesta:
Utilizo una combinación de herramientas de base de datos integradas (por ejemplo, contadores de rendimiento, monitores de actividad), soluciones de monitoreo externas (por ejemplo, Prometheus, Grafana, Datadog) y scripts personalizados. Las métricas clave incluyen el uso de CPU, latencia de E/S, conexiones activas, tiempos de ejecución de consultas y tasas de error.
DevOps: Explica el concepto de infraestructura inmutable en el contexto de las bases de datos.
Respuesta:
La infraestructura inmutable significa que una vez que se implementa una instancia de base de datos, nunca se modifica. En cambio, cualquier cambio (parche, actualización, configuración) desencadena la creación de una nueva instancia actualizada, y la antigua se reemplaza. Esto reduce la deriva de configuración y mejora la fiabilidad.