none
Dividere un database su più dischi RRS feed

  • Domanda

  • Salve a tutti,

    La mia azienda ha la necessità di dividere la scrittura di un DB su più Harddisk.
    premetto che non abbiamo molte conoscenze in merito.

    Quale è la procedura/comandi da dover utilizzare per dividere un DB in modo che scriva per esempio sia sul disco D che F?

    grazie in anticipo

     

    martedì 29 novembre 2011 13:52

Risposte

  • Ciao,

    ci sono diverse considerazioni sull'argomento e non sono proprio brevi... Cerco di riassumere:

    1) Organizzazione generale dei databases e dei dischi

    E' buona norma separare il carico di lavoro sui dischi in una installazione di SQL Server tenendo su dischi fisici separati il file dati (.mdf), il file di log (.ldf) ed il tempdb (sia il file dati che il file di log). I files dati vengono acceduti in maniera random, mentre i log in maniera sequenziale, quindi già così separo la tipologia di I/O. (Es. disco C: per S.O. e binari di SQL Server, disco E: per i dati (mdf), disco L: per i log (ldf), disco T: per i dati del tempdb).

    Oltre a separare le lettere di unità è ovviamente indicato utilizzare tecnologie RAID per avere anche la fault tolerance nel caso in cui si guasti un disco. Quindi nell'esempio sopra considera RAID 1 per C:, RAID 5 o 10 per E:, RAID 1 per L: e RAID 1/5 o 10 per T:)

    Qui trovi indicazioni sul RAID.

    2) Files multipli

    Posso aggiungere per ogni databases una serie di files, che avranno estensione .ndf, solitamente perchè ho terminato lo spazio nel file principale :-), ma anche per suddividere il carico di lavoro sui dischi (devo però averli creati contestualmente alla creazione del database, altrimenti non li riempe in parallelo, ma in cascata)

    3) Filegroups

    Insieme alla 1) la tecnica più consona se ho dei databases molto grandi (o con tanto traffico sui dischi) per separare il carico: posso mettere i dati e/o gli indici e/o i campi di tipo binario (immagini, documenti, etc) su file appartenenti a filegroups diversi, ciascuno su un disco fisico diverso.

    Normalmente SQL Server crea un unico filegroup PRIMARY in cui mette le tabelle di sistema e, per default, le mie tabelle.

    Però posso, in fase di creazione del database, creare uno o più filegroups e metterci tabelle, indici o campi binari.

    Maggiori informazioni qui, qui e qui.

     

    Quindi, per tornare alla tua domanda, non c'è un modo unico per suddividere l'I/O sui dischi, ed in generale l'architettura del database andrebbe progettata prima di crearlo. Puoi ovviamente intervenire anche in seguito, ma devi fare attenzione, soprattutto in presenza di db di grandi dimensioni.

    Qual'è l'esigenza specifica ? Per quale motivo avete l'esigenza di dividere la scrittura del db su più dischi ?


    Danilo Dominici MCP MCDBA MCITP MCSE MCAD Questo post è fornito "così com'è". Non conferisce garanzie o diritti di alcun tipo. Ricorda di usare la funzione "segna come risposta" per i post che ti hanno aiutato a risolvere il problema e "deseleziona come risposta" quando le risposte segnate non sono effettivamente utili. Questo è particolarmente utile per altri utenti che leggono il thread, alla ricerca di soluzioni a problemi similari. ENG: This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" on the post that helps you, and to click "Unmark as Answer" if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.
    martedì 29 novembre 2011 15:45