Database con più file .mdf


10

Ho cercato online ma non ho trovato quello che cercavo.

Il problema / query è a mia conoscenza che un database in SQL Server dovrebbe avere un file .mdf e forse alcuni file .ndf e un file .log.

Ho visto molti database con un solo mdf e più file ndf. Ma recentemente mi sono imbattuto in alcuni database su un server in cui ogni database aveva più file mdf.

Ho preso un backup di alcuni database spostandoli su un altro server e ripristinato il file primario come .mdf e tutti gli altri file come .ndf ovviamente tranne il file di registro che è stato ripristinato come .log.

Ora le mie domande sono:

  1. C'è qualche saggezza nell'avere più file .mdf per un database?
  2. Ci sono degli svantaggi nell'avere più file .mdf?

Era SQL Server 2008 R2 64bit Enterprise Edition

Qualsiasi consiglio o puntatore nella giusta direzione è molto apprezzato. Grazie.

Risposte:


14

Ma recentemente mi sono imbattuto in alcuni database su un server in cui ogni database aveva più file mdf.

Ciò è dovuto a una convenzione di denominazione errata. Microsoft afferma che ogni database ha un file di dati primario ma non significa che può avere solo un "file di dati mdf", il database può avere molti file di dati con .mdfestensione ma solo uno sarà un file di dati primario. È meglio dare l' mdfestensione al file di dati primario e ndfal file di dati secondario per avere una corretta demarcazione, ma questa non è una regola rigida e veloce che puoi anche dare l'estensione .abc al file di dati primario in modo che ciò a cui hai assistito sia normale. È un dato di fatto che puoi dare qualsiasi estensione che ti piace.

C'è qualche saggezza nell'avere più file .mdf per un database?

Se intendi:

C'è qualche saggezza nell'avere più file primari per un database?

La risposta è no, un database può avere solo un file di dati primario.

Ma se vuoi dire:

C'è qualche saggezza nell'avere più file di dati (.mdf, .ndf o con un nome diverso) per un database?

Dipende, puoi e non puoi avere vantaggio con più file di dati. Se sono distribuiti su diverse unità fisiche (sto parlando di mandrini) vedresti qualche vantaggio con l'applicazione intensiva di scrittura. Se si trovano tutti sulle stesse partizioni logiche, non avrà alcun vantaggio perché alla base utilizzerebbero risorse comuni. L'uso di file e filegroup migliora le prestazioni del database, poiché consente di creare un database su più dischi, controller di disco multipli o sistemi RAID (array ridondanti di dischi indipendenti). Ad esempio, se il computer dispone di quattro dischi, è possibile creare un database composto da tre file di dati e un file di registro, con un file su ciascun disco. Quando si accede ai dati, quattro testine di lettura / scrittura possono accedere contemporaneamente ai dati in parallelo.

Come da questo articolo MSOL BOL

I filegroup utilizzano una strategia di riempimento proporzionale su tutti i file all'interno di ciascun filegroup. Man mano che i dati vengono scritti nel filegroup, il Motore di database di SQL Server scrive una quantità proporzionale allo spazio libero nel file su ciascun file all'interno del filegroup, anziché scrivere tutti i dati nel primo file fino al completo. Quindi scrive nel file successivo. Ad esempio, se il file f1 ha 100 MB liberi e il file f2 ha 200 MB liberi, un'estensione viene allocata dal file f1, due estensioni dal file f2 e così via. In questo modo, entrambi i file si riempiono all'incirca nello stesso momento e si ottiene uno striping semplice.

Un altro vantaggio che conosco è considerare un database da 1 TB se avessi un singolo file di dati per esso e desideri ripristinare questo database su qualche altro server, è altamente improbabile che tu abbia 1 TB di spazio libero. Ora, se lo stesso database è distribuito su file diversi, ciascuno con dimensioni 250 G, diventa più facile da ripristinare. Questo potrebbe non essere in realtà il tuo scenario, ma aiuta molto è poco facile trovare un server con quattro unità da 250 G rispetto a un'unità da 1 TB

Direi che invece di molti file di dati è meglio avere diversi gruppi di file, ma di nuovo non ci sono molti ambienti. I database costituiti da più filegroup possono essere ripristinati in più fasi mediante un processo noto come ripristino frammentario. Il ripristino a fasi funziona con tutti i modelli di recupero, ma è più flessibile per i modelli completi e registrati in blocco rispetto alla modalità semplice. File o filegroup in un database possono essere sottoposti a backup e ripristinati singolarmente. Ciò consente di ripristinare solo i file danneggiati senza dover ripristinare il resto del database. I file in un backup di filegroup possono essere ripristinati singolarmente o come gruppo


Se DB ha più di un file file di dati cioè ndf e primario ovvero ancora predefinito. Con questo se uno dei file DB utilizzato per creare tabelle / indici su di esso, crea delle prestazioni generali? Voglio dire, il gruppo di file predefinito è ancora primario ma la tabella e gli indici creati si trovano sui file di dati.
Ciao,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.