2009-08-24 19 views
6

La creazione di oggetti come tabelle e indici è abbastanza essenziale, anche se il codice deve essere autorizzato o creato dal dba. Quali altre aree normalmente eseguite da DBS dovrebbero essere a conoscenza dello sviluppatore esperto?Quali sono le competenze dba essenziali che uno sviluppatore dovrebbe imparare?

+5

Gli sviluppatori dovrebbero (e quasi sempre fanno) sapere più dei DBA. –

+0

Si prega di rendere questo un wiki della comunità. –

+1

Con rispetto, Neil, non sono d'accordo.I DBA hanno accesso a runstats o piani di esecuzione effettivi, in modo che * sappiano * quali sono i colli di bottiglia. Gli sviluppatori si basano semplicemente sull'ipotesi basata sui dati previsti. A volte queste supposizioni sono corrette, a volte no. Ma loro * sono * ipotesi. – paxdiablo

risposta

7

I dettagli di archiviazione e ottimizzazione del database sono enormi. Sapere come indicizzare e partizionare le tabelle è una conoscenza inestimabile.

Inoltre, come leggere un piano di esecuzione della query.SQL è un linguaggio talmente interessante che ti dirà esattamente il come farà il tuo codice, a patto che tu lo chieda gentilmente. Questo è assolutamente essenziale per ottimizzare il codice e trovare i colli di bottiglia.

La manutenzione del database (backup, restringimento di file, ecc.) È sempre importante per mantenere il server in esecuzione senza intoppi. È qualcosa che è spesso trascurato, anche.

Gli sviluppatori devono sapere tutto sui trigger e sulle stored procedure, ovvero far funzionare il database al posto tuo. Queste cose possono aiutare ad automatizzare così tante attività, e spesso gli sviluppatori le ignorano e cercano di gestirle da tutte le parti delle applicazioni, quando dovrebbero essere gestite da qualcosa che pensa nei set.

Il che mi porta al punto più importante, gli sviluppatori di database devono pensare nei set. Spesso sento "Per ogni riga, voglio ..." e questo è generalmente un allarme nella mia testa. Dovresti pensare a come l'insieme interagisce e le azioni che vuoi intraprendere su intere colonne.

+0

Alcuni punti positivi, thx – DBMarcos99

2

Ottimizzazione. Il tuo codice deve sempre usare poche risorse quante ne puoi ottenere.

+0

Mi piace questa risposta! (anche se posso pensare a scenari in cui l'utilizzo delle risorse non è un problema prevalente) – DBMarcos99

8

Uno sviluppatore è responsabile di fare tutto ciò che rende il suo codice a) corretto e b) veloce.

Questo ovviamente include la creazione di indici e tabelle.

Fare in modo che uno DBA responsabile per gli indici sia una cattiva idea. Cosa succede se il codice funziona lentamente? Di chi si deve incolpare: uno sviluppatore con codice errato o uno DBA con un indice errato?

A DBA A deve trasportare le operazioni di supporto del database come eseguire backup, creare l'infrastruttura ecc. E segnalare la mancanza di risorse.

Lui o lei non dovrebbe essere l'unica persona a prendere le decisioni che influiscono sulle prestazioni dell'intero sistema di database.

database relazionali, come per ora, non sono ancora in quello stato che avrebbe permesso la divisione di responsabilità in modo che gli sviluppatori potrebbero rendere le query destra e la DBA potrebbero renderli veloce. Questo è un mito.

Se v'è una mancanza di risorse (ad esempio, un indice fa qualche ricerca veloce a spese di qualche DML funzionamento è lento), questo dovrebbe essere segnalato da un DBA, non fisso.

Ora, è un tempo di decisione. Di cosa abbiamo bisogno di più, una query veloce o un inserimento veloce?

Questa decisione deve essere presa dal responsabile del programma (e non dallo DBA o dallo sviluppatore).

E quando la decisione viene presa, allo sviluppatore dovrebbe essere assegnata la nuova attività: "rendere la query SELECT la più veloce possibile, tenendo conto che non si dispone di questo indice". Oppure "crea una query INSERT il più veloce possibile, tenendo conto che avrai questo indice".

Uno sviluppatore dovrebbe sapere tutto su come funziona un database, quando funziona normalmente.

A DBA dovrebbe sapere tutto su come far funzionare normalmente un database.

Quest'ultimo include la possibilità di eseguire un backup, la possibilità di ripristinare da un backup e la capacità di rilevare e segnalare un conflitto di risorse.

+0

Thx per l'input. Posso pensare a molti scenari in cui il dba è responsabile dell'ottimizzazione delle query: lo sviluppatore parte, la struttura db cambia, la funzionalità viene cambiata, sono necessari nuovi indici ecc. – DBMarcos99

+1

'DBMarcos99': tutto ciò che hai appena descritto (tranne quando lascia lo sviluppatore) comporta il processo decisionale. Questa non è la responsabilità di 'DBA', questa è la responsabilità del responsabile del programma. – Quassnoi

+1

@Quassnoi: non sono d'accordo; essere un DBA è "TUTTO" sul processo decisionale e sulla responsabilità. Non è possibile eseguire ogni singola decisione da parte di un program manager, non si farebbe mai nulla. Il business, che è tutto ciò che siamo in fin dei conti, riguarda la consegna dei risultati e questo è ciò che facilita il ruolo di DBA. –

1

Una cosa che viene subito in mente è come navigare e comprendere le informazioni che le tabelle/viste del "sistema" del database ti forniscono. Per esempio. in sql server le viste che si trovano sotto il database master. Queste viste contengono informazioni come accessi correnti, elenchi di tabelle e partizioni ecc. Che sono tutte cose utili nel cercare di rintracciare elementi come gli accessi bloccati o se gli utenti sono attualmente connessi ecc.

+0

Thx per quella risposta. – DBMarcos99

1

Relazioni delle vostre tabelle. Dovresti sempre avere una stampa recente e una copia morbida del tuo database. È necessario conoscere le chiavi primarie, le chiavi esterne, le colonne obbligatorie e quelle automatiche, senza che io pensi che non sia possibile scrivere query efficienti o assicurarsi che il proprio database stia trasportando solo ciò di cui ha bisogno.

Penso che tutti gli altri lo coprissero.

2

Si consiglia di sviluppare una comprensione dell'architettura di sicurezza per il DBMS rilevante.

Fare ciò potrebbe facilitare lo sviluppo di codice sicuro.

Con SQL Server specifico in mente, ad esempio:

  • capire perché il vostro “codice gestito” (come ad esempio CLR .NET) non dovrebbe essere concesso privilegi elevati. Quali sarebbero le implicazioni di farlo?
  • Che cos'è il concatenamento di proprietà tra database? Come funziona?
  • Comprendere il contesto di esecuzione.
  • Come funziona la crittografia SQL Server nativa?
  • Come si può firmare una procedura memorizzata? Perché vorresti farlo?
  • Ecc

Come regola generale, più si capisce sul motore si sta lavorando, più prestazioni si può spremere da esso.

+0

Questo è un bell'esempio di ciò che considero essere * veramente * un compito di 'DBA' che gli sviluppatori dovrebbero capire. +1. – Quassnoi

0

Avere una buona conoscenza dell'architettura del proprio sistema di database sarà sicuramente d'aiuto. Puoi disegnare un diagramma a memoria per mostrare i componenti del tuo DBMS e le loro interazioni?

Problemi correlati