Ci sono due parti in questa domanda: quando aggiungere un nuovo FILEGROUP e quando aggiungere un nuovo FILE in un filegroup. Per prima cosa parliamo di teoria:
Mark ha ragione sul motivo principale per cui le prestazioni.
Il motivo secondario è il ripristino di emergenza. Con SQL Server 2005 e versioni successive, è possibile eseguire ripristini di filegroup. Quando si verifica un disastro, è possibile ripristinare prima solo il filegroup primario e rendere parzialmente online il database per le query. Gli utenti possono eseguire query mentre ripristini altri filegroup. Ciò è utile per i database con una grande quantità di dati storici che potrebbero non essere richiesti immediatamente o per i data warehouse che devono caricare i dati nelle tabelle correnti senza bisogno di dati storici per l'accesso.
Un altro motivo è il profilo di lettura / scrittura di gruppi di dati. Se si dispone di alcuni dati su cui viene costantemente scritto e altri dati che richiedono attività di lettura pesanti, è possibile creare diversi tipi di archiviazione per soddisfare tali esigenze. Potresti mettere le cose pesanti nel raid 10 e lasciare le cose distorte in lettura nel raid 5 più economico.
Ora parliamo di file rispetto a filegroup. Quando si posizionano oggetti in SQL Server, è necessario posizionarli a livello di filegroup. È possibile inserire una tabella o un indice in un filegroup, ma non è possibile selezionare un file specifico. Quindi tutto ciò di cui abbiamo discusso finora riguardava quando aggiungere un filegroup - ma quando aggiungi un file?
Se stai progettando spazio di archiviazione e hai 80 dischi rigidi, ci sono alcuni modi in cui puoi romperlo:
- Un pool di 80 unità
- Due pool da 40 unità
- Quattro pool di 20 unità, ecc ...
Diversi sottosistemi di archiviazione hanno profili delle prestazioni diversi. Ho lavorato con alcune SAN che si sono comportate meglio con array di unità 12-16 e qualsiasi cosa più grande di così non ha avuto un miglioramento delle prestazioni. Un altro esempio sono le SAN con multipath: se hai diversi HBA che collegano il tuo server alla tua memoria e se il tuo software multipath non è realmente attivo / attivo, potresti aver bisogno di un array per percorso per distribuire il carico. Quattro percorsi, quattro pool di unità offriranno prestazioni migliori su questi tipi di unità.
In questi casi, si ottengono quattro array diversi, quattro unità diverse in Windows (a meno che non si utilizzino punti di montaggio e anche in questo caso si tratti di cartelle diverse) e saranno necessari quattro file separati in SQL Server. Quei file separati possono essere nello stesso filegroup.