Procedure consigliate per FILESTREAM

In questo argomento vengono riportate le procedure consigliate per l'utilizzo di FILESTREAM.

Configurazione fisica e manutenzione

Quando si configurano i volumi di archiviazione FILESTREAM, tenere presenti le linee guida seguenti:

  • Disattivare i nomi di file brevi nei sistemi FILESTREAM. La creazione di nomi di file brevi richiede tempi sensibilmente più lunghi. Per disabilitare i nomi di file brevi, utilizzare l'utilità fsutil di Windows.

  • Deframmentare regolarmente i sistemi FILESTREAM.

  • Utilizzare cluster NTFS da 64 KB. I volumi compressi devono essere impostati su cluster NTFS da 4 KB.

  • Disabilitare l'indicizzazione nei volumi FILESTREAM e impostare disablelastaccess. Per impostare disablelastaccess, utilizzare l'utilità fsutil di Windows.

  • Disabilitare l'analisi per la ricerca di virus nei volumi FILESTREAM quando non è non necessaria. Se tale analisi è necessaria, evitare di impostare criteri per l'eliminazione automatica dei file infetti.

  • Configurare e ottimizzare il livello RAID per la tolleranza di errore e le prestazioni richieste da un'applicazione.

Livello RAID

Prestazioni di scrittura

Prestazioni di lettura

Tolleranza di errore

Osservazioni

RAID 5

Normali

Normali

Eccellente

Le prestazioni sono più elevate rispetto all'utilizzo di un unico disco o di JBOD e meno elevate rispetto all'utilizzo di RAID 0 o RAID 5 con striping.

RAID 0

Eccellenti

Eccellente

Nessuna

RAID 5 + striping

Eccellenti

Eccellenti

Eccellente

Opzione più costosa.

Progettazione fisica di database

Quando si progetta un database FILESTREAM, tenere presenti le linee guida seguenti:

  • Le colonne FILESTREAM devono essere associate a una corrispondente colonna uniqueidentifier ROWGUID. Questi tipi di tabelle devono inoltre essere associati a un indice univoco. Solitamente questo indice non è cluster. Se la logica di business dei database richiede un indice cluster, è necessario assicurarsi che i valori archiviati nell'indice non siano casuali. In caso contrario, l'indice verrà riordinato ogni volta che viene aggiunta o rimossa una riga dalla tabella.

  • Ai fini delle prestazioni, i contenitori e i filegroup FILESTREAM dovrebbero risiedere in volumi anziché nel sistema operativo, nel database di SQL Server, nel log di SQL Server o nel file di paging.

  • La gestione dello spazio e i criteri non sono supportati direttamente da FILESTREAM. È tuttavia possibile gestire lo spazio e applicare criteri in modo indiretto assegnando ogni filegroup FILESTREAM a un volume distinto e utilizzando le funzionalità di gestione di quest'ultimo.

Progettazione e implementazione di applicazioni

  • Quando si progettano e implementano applicazioni che utilizzano FILESTREAM, tenere presenti le linee guida seguenti:

  • Utilizzare NULL anziché 0x per rappresentare una colonna FILESTREAM non inizializzata. Il valore 0x provoca la creazione di un file, a differenza di NULL.

  • Evitare di eseguire operazioni di inserimento ed eliminazione nelle tabelle che contengono colonne FILESTREAM non Null. Le operazioni di inserimento ed eliminazione possono modificare le tabelle FILESTREAM utilizzate per Garbage Collection. In questo caso, è possibile che le prestazioni dell'applicazione si riducano nel corso del tempo.

  • Nelle applicazioni che utilizzano la replica, utilizzare NEWSEQUENTIALID() anziché NEWID(). NEWSEQUENTIALID() offre prestazioni migliori di NEWID() per la generazione dei GUID in queste applicazioni.

  • L'API FILESTREAM è progettata per l'accesso ai dati tramite flusso Win32. Evitare di utilizzare Transact-SQL per la lettura o la scrittura di oggetti BLOB di FILESTREAM di dimensioni maggiori di 2 MB. Se è necessario leggere o scrivere dati BLOB da Transact-SQL, verificare che tutti i dati BLOB vengano utilizzati prima di tentare di aprire l'oggetto BLOB di FILESTREAM da Win32. Se non vengono utilizzati tutti i dati Transact-SQL, è possibile che le successive operazioni di apertura o chiusura di FILESTREAM non riescano.

  • Evitare di utilizzare istruzioni Transact-SQL per aggiornare, aggiungere o anteporre dati all'oggetto BLOB di FILESTREAM. In caso contrario, si verificherà lo spooling dei dati BLOB nel database tempdb e quindi in un nuovo file fisico.

  • Evitare di aggiungere piccoli aggiornamenti BLOB a un oggetto BLOB di FILESTREAM. Con ogni operazione di aggiunta, vengono copiati i file FILESTREAM sottostanti. Se un'applicazione deve aggiungere piccoli oggetti BLOB, scrivere tali oggetti in una colonna varbinary(max), quindi eseguire una sola operazione di scrittura nell'oggetto BLOB di FILESTREAM quando il numero di oggetti BLOB raggiunge un limite predeterminato.

  • Evitare di recuperare la lunghezza dei dati di molti file BLOB in un'applicazione. Si tratta di un'operazione dispendiosa in termini di tempo perché le dimensioni non vengono archiviate nel Motore di database di SQL Server. Se è necessario determinare la lunghezza di un file BLOB, utilizzare la funzione Transact-SQL DATALENGTH() per determinare le dimensioni dell'oggetto BLOB, se è chiuso. DATALENGTH() non apre il file BLOB per determinarne le dimensioni.

  • Se un'applicazione utilizza il protocollo Message Block1 (SMB1), i dati BLOB di FILESTREAM devono essere letti in multipli di 60 KB per ottimizzare le prestazioni.

Vedere anche

Concetti