2009-08-24 26 views
6

La creación de objetos como tablas e índices es bastante esencial, incluso si el código debe ser autorizado o creado por el dba. ¿Qué otras áreas normalmente llevadas a cabo por dbas debe tener en cuenta el desarrollador experimentado?¿Cuáles son las habilidades esenciales de DBA que un desarrollador debe aprender?

+5

Los desarrolladores deben (y casi siempre lo hacen) saber más que los DBA. –

+0

Por favor, conviértanse en una wiki comunitaria. –

+1

Con todo respeto, Neil, no estoy de acuerdo con eso.Los DBA tienen acceso a estadios de ejecución o planes de ejecución reales, por lo que * saben * cuáles son los cuellos de botella. Los desarrolladores solo asumen en base a los datos esperados. A veces esas suposiciones son correctas, a veces no. Pero ellos * son * suposiciones. – paxdiablo

Respuesta

7

Los pormenores del almacenamiento y la optimización de la base de datos son enormes. Saber cómo indexar y particionar bien las tablas es un conocimiento invaluable.

Además, cómo leer un plan de ejecución de consultas.SQL es un lenguaje tan genial que te dirá exactamente cómo va a ejecutar tu código, siempre y cuando lo solicites amablemente. Esto es absolutamente esencial para optimizar su código y encontrar cuellos de botella.

El mantenimiento de la base de datos (copias de seguridad, archivos contraídos, etc.) siempre es importante para mantener su servidor funcionando sin problemas. Es algo que a menudo se pasa por alto, también.

Los desarrolladores deben saber todo sobre desencadenantes y procedimientos almacenados, conseguir que la base de datos trabaje para usted. Estas cosas pueden ayudar a automatizar tantas tareas y, a menudo, los desarrolladores las pasan por alto y tratan de manejar todo el lado de la aplicación, cuando realmente deberían ser manejadas por algo que piense en conjuntos.

Lo que me lleva al punto más importante, los desarrolladores de bases de datos deben pensar en conjuntos. A menudo escucho, "Por cada fila, quiero ..." y esto generalmente es una alarma en mi cabeza. Debería pensar en cómo interactúa el conjunto y las acciones que desea llevar a cabo en columnas completas.

+0

Algunos buenos puntos allí, thx – DBMarcos99

2

Optimización. Su código siempre debe usar la menor cantidad de recursos que pueda lograr.

+0

¡Me gusta esta respuesta! (Aunque puedo pensar en escenarios donde el uso de recursos no es un problema primordial) – DBMarcos99

8

Un desarrollador es responsable de hacer todo lo que hace que su código a) correcto y b) rápido.

Esto, por supuesto, incluye la creación de índices y tablas.

Hacer un DBA responsable de los índices es una mala idea. ¿Qué sucede si el código se ejecuta lentamente? ¿Quién puede ser culpado: un desarrollador con código incorrecto o un DBA con un índice malo?

A DBA debe llevar operaciones de soporte de base de datos como hacer copias de seguridad, construir la infraestructura, etc., e informar la falta de recursos.

Él o ella no debe ser la única persona para tomar las decisiones que afectan el rendimiento de todo el sistema de la base de datos.

bases de datos relacionales, como por ahora, todavía no están en ese estado que permitiría a la división de la responsabilidad para que los desarrolladores podrían hacer las consultas derecho y la DBA podrían hacerlos rápida. Eso es un mito.

Si hay una falta de recursos (por ejemplo, un índice hace alguna consulta rápida a expensas de alguna operación DML ser lento), esto debe ser informado por un DBA, no fijo.

Ahora, es un momento de toma de decisiones. ¿Qué necesitamos más, consulta rápida o una inserción rápida?

Esta decisión debe tomarla el administrador del programa (y no el DBA o el desarrollador).

Y cuando se toma la decisión, el desarrollador debe recibir la nueva tarea: "hacer que la consulta SELECT sea lo más rápida posible, teniendo en cuenta que no tiene este índice". O bien, "realice una consulta INSERT lo más rápido posible, teniendo en cuenta que tendrá este índice".

Un desarrollador debe saber todo sobre cómo funciona una base de datos, cuando funciona normalmente.

A DBA debe saber todo sobre cómo hacer que una base de datos funcione normalmente.

Esto último incluye la capacidad de hacer una copia de seguridad, la capacidad de restaurar desde una copia de seguridad y la capacidad de detectar e informar una contención de recursos.

+0

Thx para su entrada. Puedo pensar en muchos escenarios donde el dba es responsable de la optimización de consultas: el desarrollador se va, la estructura db cambia, la funcionalidad cambia, se requieren nuevos índices, etc. – DBMarcos99

+1

'DBMarcos99': todo lo que acaba de describir implica (excepto cuando el desarrollador se va) Toma de decisiones. Esto no es responsabilidad de 'DBA', esta es la responsabilidad del administrador del programa. – Quassnoi

+1

@Quassnoi: No estoy de acuerdo; ser un DBA es "TODO" sobre la toma de decisiones y la responsabilidad. No se puede ejecutar cada decisión de un solo minuto por un administrador de programa, nada se haría nunca. Los negocios, que es en lo que estamos todos después de todo, se trata de entregar resultados y esto es lo que facilita el rol del DBA. –

1

Una cosa que ahora viene a la mente es cómo navegar y comprender la información que las tablas/vistas del "sistema" de la base de datos le brindan. P.ej. en el servidor sql las vistas que están bajo la base de datos maestra. Estas vistas contienen información como inicios de sesión actuales, listas de tablas y particiones, etc. que son todas cosas útiles para tratar de rastrear cosas como los inicios de sesión colgados o si los usuarios están actualmente conectados, etc.

+0

Thx para esa respuesta. – DBMarcos99

1

Relaciones de sus tablas. Siempre debe tener una copia impresa reciente y una copia de su base de datos. Necesita conocer las claves principales, las claves externas, las columnas necesarias y las rellenas automáticamente, sin eso creo que no puede escribir consultas eficientes o asegurarse de que su base de datos solo contenga lo que necesita.

Creo que todos los demás lo cubrieron.

2

Recomendaría desarrollar una comprensión de la arquitectura de seguridad para el DBMS relevante.

Hacerlo podría facilitar el desarrollo de un código de seguridad.

Con SQL Server específicamente en cuenta, por ejemplo:

  • entender por qué su “código administrado” (como .NET CLR) no debe concederse privilegios elevados. ¿Cuáles serían las implicaciones de hacerlo?
  • ¿Qué es el encadenamiento de propiedad entre bases de datos? ¿Como funciona?
  • Comprender el contexto de ejecución.
  • ¿Cómo funciona el cifrado de SQL Server nativo?
  • ¿Cómo se puede firmar un procedimiento almacenado? ¿Por qué querrías hacer esto?
  • Etc.

Como regla general, cuanto más se entiende sobre el motor que está trabajando, más rendimiento que se puede exprimir de ella.

+0

Este es un buen ejemplo de lo que considero que es * realmente * una tarea de 'DBA' que los desarrolladores también deben entender. +1. – Quassnoi

0

Tener una buena comprensión de la arquitectura de su sistema de base de datos definitivamente será útil. ¿Puedes dibujar un diagrama de memoria para mostrar los componentes de tu DBMS y sus interacciones?

Cuestiones relacionadas