Bewährte Methoden zu FILESTREAM

Dieses Thema enthält empfohlene bewährte Methoden zur Verwendung von FILESTREAM.

Physische Konfiguration und Verwaltung

Beachten Sie beim Einrichten von FILESTREAM-Speichervolumes die folgenden Richtlinien:

  • Deaktivieren Sie kurze Dateinamen auf FILESTREAM-Computersystemen. Bei kurzen Dateinamen dauert das Erstellen erheblich länger. Um kurze Dateinamen zu deaktivieren, verwenden Sie das Windows-Dienstprogramm fsutil.

  • Defragmentieren Sie FILESTREAM-Computersysteme in regelmäßigen Abständen.

  • Verwenden Sie 64-KB-NTFS-Cluster. Komprimierte Volumes müssen auf 4-KB-NTFS-Cluster festgelegt werden.

  • Deaktivieren Sie die Indizierung auf FILESTREAM-Volumes, und legen Sie disablelastaccess fest. Verwenden Sie dazu das Windows-Dienstprogramm fsutil.

  • Deaktivieren Sie Virenüberprüfung für FILESTREAM-Volumes, wenn diese nicht erforderlich ist. Wenn eine Virenüberprüfung erforderlich ist, vermeiden Sie die Festlegung von Richtlinien, durch die verdächtige oder infizierte Dateien automatisch gelöscht werden.

  • Richten Sie die RAID-Stufe für Fehlertoleranz und die für Anwendungen erforderliche Leistung ein.

RAID-Stufe

Schreibleistung

Leseleistung

Fehlertoleranz

Hinweise

RAID 5

Normal

Normal

Hervorragend

Die Leistung ist besser als bei einem einzelnen Datenträger oder JBOD und geringer als bei RAID 0 oder RAID 5 mit Striping.

RAID 0

Hervorragend

Hervorragend

Nicht vorhanden

RAID 5 + Striping

Hervorragend

Hervorragend

Hervorragend

Die aufwendigste Option.

Physischer Datenbankentwurf

Beachten Sie beim Entwerfen einer FILESTREAM-Datenbank die folgenden Richtlinien:

  • FILESTREAM-Spalten müssen von einer entsprechenden uniqueidentifier ROWGUID-Spalte begleitet werden. Diese Arten von Tabellen müssen außerdem auch von einem eindeutigen Index begleitet werden. In der Regel ist dieser Index kein gruppierter Index. Wenn die Datenbanken-Geschäftslogik einen gruppierten Index erfordert, müssen Sie sicherstellen, dass die im Index gespeicherten Werte nicht zufällig sind. Zufallsvariablen bewirken, dass der Index bei jedem Hinzufügen oder Entfernen einer Zeile aus der Tabelle neu geordnet wird.

  • Aus Leistungsgründen sollten die FILESTREAM-Dateigruppen und -Container nicht auf Volumes gespeichert werden, auf denen sich das Betriebssystem, die SQL Server-Datenbank, das SQL Server-Protokoll, tempdb oder die Auslagerungsdatei befindet.

  • Speicherplatzverwaltung und Richtlinien werden von FILESTREAM nicht direkt unterstützt. Sie können jedoch indirekt Speicherplatz verwalten und Richtlinien anwenden, indem Sie jede FILESTREAM-Dateigruppe einem separaten Volume zuweisen und die Verwaltungsfeatures des Volumes verwenden.

Anwendungsentwurf und -implementierung

  • Wenn Sie Anwendungen entwerfen und implementieren, die FILESTREAM verwenden, beachten Sie die folgenden Richtlinien:

  • Verwenden Sie NULL statt 0x, um eine nicht initialisierte FILESTREAM-Spalte darzustellen. Der 0x-Wert bewirkt, dass eine Datei erstellt wird. Bei NULL ist dies nicht der Fall.

  • Vermeiden Sie Einfüge- und Löschvorgänge in Tabellen, die FILESTREAM-Spalten ungleich NULL enthalten. Bei Einfüge- und Löschvorgängen können die FILESTREAM-Tabellen geändert werden, die für Garbage Collection verwendet werden. Dies kann dazu führen, dass die Leistung einer Anwendung mit der Zeit nachlässt.

  • Verwenden Sie in Anwendungen, die Replikation verwenden, NEWSEQUENTIALID() statt NEWID(). NEWSEQUENTIALID() erzielt in diesen Anwendungen bei der GUID-Generierung eine bessere Leistung als NEWID().

  • Die FILESTREAM-API ist für Win32-Streamingzugriff auf Daten vorgesehen. Vermeiden Sie die Verwendung von Transact-SQL zum Lesen oder Schreiben von FILESTREAM-BLOBs (Binary Large Objects), die größer als 2 MB sind. Wenn Sie BLOB-Daten aus Transact-SQL lesen oder schreiben müssen, stellen Sie sicher, dass alle BLOB-Daten verarbeitet werden, bevor Sie versuchen, den FILESTREAM-BLOB über Win32 zu öffnen. Werden nicht alle Transact-SQL-Daten verarbeitet, schlagen möglicherweise alle folgenden FILESTREAM-Vorgänge zum Öffnen oder Schließen fehl.

  • Vermeiden Sie Transact-SQL-Anweisungen, die FILESTREAM-BLOBs aktualisieren oder Daten anfügen bzw. voranstellen. Dies bewirkt, dass die BLOB-Daten in die Datenbank tempdb und anschließend zurück in eine neue physische Datei gespoolt werden.

  • Vermeiden Sie, kleine BLOB-Updates an ein FILESTREAM-BLOB anzufügen. Jeder Anfügevorgang bewirkt, dass die zugrunde liegenden FILESTREAM-Dateien kopiert werden. Wenn eine Anwendung kleine BLOBs anfügen muss, schreiben Sie die BLOBs in eine varbinary(max)-Spalte, und führen Sie dann einen einzelnen Schreibvorgang für den FILESTREAM-BLOB durch, wenn die Anzahl der BLOBs eine vorher festgelegte Beschränkung erreicht.

  • Vermeiden Sie, die Datenlänge von vielen BLOB-Dateien in einer Anwendung abzurufen. Dies ist ein zeitaufwendiger Vorgang, da die Größe nicht in SQL Server Database Engine (Datenbankmodul) gespeichert wird. Wenn Sie die Länge einer BLOB-Datei festlegen müssen, verwenden Sie die Transact-SQL-DATALENGTH()-Funktion, um die Größe des BLOB zu bestimmen, wenn dieses geschlossen ist. DATALENGTH() öffnet die BLOB-Datei nicht, um deren Größe zu bestimmen.

  • Wenn eine Anwendung das SMB (Server Message Block)-Protokoll verwendet, sollten FILESTREAM-BLOB-Daten in einem Vielfachen von 60 KB gelesen werden, um die Leistung zu optimieren.

Siehe auch

Konzepte