Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server – jenom Windows
FILESTREAM umožňuje aplikacím založeným na SQL Serveru ukládat nestrukturovaná data, jako jsou dokumenty a obrázky, v systému souborů. Aplikace můžou využívat bohatá rozhraní API streamování a výkon systému souborů a současně udržovat transakční konzistenci mezi nestrukturovanými daty a odpovídajícími strukturovanými daty.
FILESTREAM integruje databázový stroj SQL Serveru se systémy souborů NTFS nebo ReFS uložením dat binárního velkého objektu (BLOB ) varbinary(max) jako souborů v systému souborů. Transact-SQL příkazy můžou vkládat, aktualizovat, dotazovat, vyhledávat a zálohovat data FILESTREAM. Rozhraní systému souborů Win32 poskytují přístup ke streamovaným datům.
FILESTREAM používá systémovou mezipaměť NT pro ukládání dat souborů do mezipaměti. Ukládání souborů do mezipaměti systému pomáhá snížit dopad, který data FILESTREAM mohou mít na výkon databázového stroje. Fond vyrovnávací paměti SQL Serveru se nepoužívá. proto je tato paměť k dispozici pro zpracování dotazů.
FileSTREAM není automaticky povolen při instalaci nebo upgradu SQL Serveru. FileSTREAM musíte povolit pomocí NÁSTROJE SQL Server Configuration Manager a aplikace SQL Server Management Studio. Chcete-li použít FILESTREAM, musíte vytvořit nebo upravit databázi tak, aby obsahovala zvláštní typ skupiny souborů. Potom vytvořte nebo upravte tabulku tak, aby obsahovala sloupec varbinary(max) s atributem FILESTREAM. Po dokončení těchto úkolů můžete pomocí Transact-SQL a Win32 spravovat data FILESTREAM.
Kdy použít FILESTREAM
V SQL Serveru můžou být objekty BLOB standardními daty varbinary(max), která ukládají data v tabulkách, nebo objekty FILESTREAM varbinary(max), které ukládají data v systému souborů. Velikost a použití dat určuje, jestli chcete použít úložiště databáze nebo úložiště systému souborů. Pokud jsou splněny následující podmínky, měli byste zvážit použití FILESTREAM:
- Uložené objekty jsou v průměru větší než 1 MB.
- Rychlý přístup ke čtení je důležitý.
- Vyvíjíte aplikace, které používají střední vrstvu pro logiku aplikace.
U menších objektů často ukládání objektů blob varbinary(max) v databázi často poskytuje lepší výkon streamování.
FILESTREAM Storage
Úložiště FILESTREAM se implementuje jako sloupec varbinary(max), ve kterém se data ukládají jako bloby v systému souborů. Velikosti bloků blob jsou omezeny pouze velikostí svazku systému souborů. Standardní omezení varbinary(max) velikosti souborů o velikosti 2 GB se nevztahuje na objekty BLOB, které jsou uložené v systému souborů.
Chcete-li určit, že sloupec by měl uchovávat data v systému souborů, zadejte atribut FILESTREAM ve sloupci varbinary(max). Tento atribut způsobí, že databázový stroj uloží všechna data pro tento sloupec v systému souborů, ale ne v databázovém souboru.
Data FILESTREAM musí být uložena ve skupinách souborů FILESTREAM. FileSTREAM filegroup je speciální skupina souborů, která obsahuje adresáře systému souborů místo samotných souborů. Tyto adresáře systému souborů se nazývají datové kontejnery. Datové kontejnery jsou rozhraní mezi úložištěm databázového stroje a úložištěm systému souborů.
Při použití úložiště FILESTREAM zvažte následující:
- Pokud tabulka obsahuje sloupec FILESTREAM, musí mít každý řádek jedinečné ID řádku, který nemá hodnotu null.
- Do skupiny souborů FILESTREAM je možné přidat více datových kontejnerů.
- Datové kontejnery FILESTREAM nelze vnořit.
- Pokud používáte clustering s podporou převzetí služeb při selhání, musí být skupiny souborů FILESTREAM na sdílených discích.
- Skupiny souborů FILESTREAM můžou být na komprimovaných svazcích.
Integrovaná správa
Vzhledem k tomu, že fileSTREAM je implementován jako sloupec varbinary(max) a integrovaný přímo do databázového stroje, většina nástrojů a funkcí pro správu SQL Serveru funguje bez úprav pro data FILESTREAM. Můžete například použít všechny modely zálohování a obnovení s daty FILESTREAM a data FILESTREAM se zálohuje se strukturovanými daty v databázi. Pokud nechcete zálohovat data FILESTREAM s relačními daty, můžete pomocí částečné zálohy vyloučit skupiny souborů FILESTREAM.
Integrované zabezpečení
V SQL Serveru jsou data FILESTREAM zabezpečená stejně jako ostatní data zabezpečená: udělením oprávnění na úrovni tabulky nebo sloupce. Pokud má uživatel oprávnění ke sloupci FILESTREAM v tabulce, může uživatel otevřít přidružené soubory.
Poznámka:
Šifrování není podporováno u dat FILESTREAM.
Oprávnění ke kontejneru FILESTREAM má pouze účet, pod kterým běží účet služby SQL Server. Doporučujeme, aby ke kontejneru dat nebyla udělena žádná jiná oprávnění.
Poznámka:
Přihlášení SQL nebudou fungovat s kontejnery FILESTREAM. S kontejnery FILESTREAM budou fungovat pouze ověřování NTFS nebo ReFS.
Přístup k datům objektů BLOB pomocí Transact-SQL a přístupu ke streamování systému souborů
Po uložení dat ve sloupci FILESTREAM můžete k souborům přistupovat pomocí Transact-SQL transakcí nebo pomocí rozhraní API Win32.
Transact-SQL Access
Pomocí jazyka Transact-SQL můžete vkládat, aktualizovat a odstraňovat data FILESTREAM:
- Pomocí operace vložení můžete předem naplnit pole FILESTREAM hodnotou null, prázdnou hodnotou nebo relativně krátkými vloženými daty. Velké množství dat se ale efektivněji streamuje do souboru, který používá rozhraní Win32.
- Při aktualizaci pole FILESTREAM upravíte podkladová data objektu BLOB v systému souborů. Pokud je pole FILESTREAM nastaveno na
NULL, data objektu BLOB přidružená k poli se odstraní. K provádění částečných aktualizací dat nemůžete použít Transact-SQL blokovanou aktualizaci implementovanou jakoUPDATE.**Write(). - Když odstraníte řádek nebo odstraníte nebo zkrátíte tabulku obsahující data FILESTREAM, odstraníte podkladová data objektu BLOB v systému souborů.
Přístup ke streamování systému souborů
Podpora streamování Win32 funguje v kontextu transakce SQL Serveru. V rámci transakce můžete pomocí funkcí FILESTREAM získat logickou cestu systému souborů UNC souboru. Pak použijete rozhraní API OpenSqlFilestream k získání popisovače souboru. Tento popisovač pak může používat rozhraní pro streamování souborů Win32, například ReadFile() a WriteFile(), pro přístup k souboru a aktualizaci souboru prostřednictvím systému souborů.
Vzhledem k tomu, že operace se soubory jsou transakční, nemůžete soubory FILESTREAM odstranit ani přejmenovat prostřednictvím systému souborů.
Výstraha
Kontejner FILESTREAM je složka spravovaná SQL Serverem. Nepřidávejte ani neodebívejte soubory ve složce FILESTREAM ručně nebo prostřednictvím jiných aplikací. Pokud to uděláte, dojde k chybám zálohování a nekonzistence. Další informace najdete v tématu MSSQLSERVER_3056, MSSQLSERVER_7908 a MSSQLSERVER_7906.
Model příkazů
Systém souborů FILESTREAM modeluje příkaz Transact-SQL pomocí otevření a zavření souboru. Příkaz začíná při otevření popisovače souboru a končí po zavření popisovače. Když je například uzavřen popisovač zápisu, aktivuje se jakýkoli možný AFTER trigger zaregistrovaný v tabulce, jako by UPDATE byl dokončen příkaz.
Obor názvů úložiště
V FILESTREAM řídí databázový stroj obor názvů fyzického systému souborů BLOB. Nová vnitřní funkce PathName poskytuje logickou cestu UNC objektu BLOB, která odpovídá každé buňce FILESTREAM v tabulce. Aplikace používá tuto logickou cestu k získání popisovače Win32 a práci s daty objektů blob pomocí běžných rozhraní systému souborů Win32. Funkce vrátí NULL , pokud je NULLhodnota FILESTREAM sloupce .
Přístup k transakčnímu systému souborů
Nová vnitřní funkce GET_FILESTREAM_TRANSACTION_CONTEXT poskytuje token, který představuje aktuální transakci, ke které je relace přidružena. Transakce musí být spuštěna a dosud nebyla přerušena nebo potvrzena. Získáním tokenu aplikace sváže operace streamování systému souborů FILESTREAM s spuštěnou transakcí. Funkce vrátí NULL v případě, že není explicitně spuštěna transakce.
Před potvrzením nebo přerušením transakce musí být uzavřeny všechny popisovače souborů. Pokud je popisovač ponechán otevřený mimo rozsah transakce, další čtení proti popisovači způsobit selhání; další zápisy proti popisovači jsou úspěšné, ale skutečná data nejsou zapsána na disk. Podobně platí, že pokud se databáze nebo instance databázového stroje vypne, všechny otevřené popisovače jsou zneplatněny.
Stálost transakcí
S FILESTREAM po potvrzení transakce databázový stroj zajišťuje stálost transakcí pro fileSTREAM blob data, která jsou upravena z přístupu ke streamování systému souborů.
Sémantika izolace
Sémantika izolace se řídí úrovněmi izolace transakcí databázového stroje. Úroveň izolace potvrzená čtením je podporována pro Transact-SQL a přístup k systému souborů. Podporují se opakovatelné operace čtení, serializovatelné a úrovně izolace snímků. Špinavé čtení není podporováno.
Operace otevření přístupu k systému souborů nečeká na žádné zámky. Operace otevření se místo toho okamžitě nezdaří, pokud nemají přístup k datům kvůli izolaci transakcí. Volání rozhraní API streamování selžou s ERROR_SHARING_VIOLATION, pokud operace otevření nemůže pokračovat kvůli narušení izolace.
Aby bylo možné provést částečné aktualizace, může aplikace vydat ovládací prvek služby FS zařízení (FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT), který načte starý obsah do souboru, na který otevřený popisovač odkazuje. Tím se aktivuje kopie starého obsahu na straně serveru. Pokud chcete dosáhnout lepšího výkonu aplikace a vyhnout se potenciálním vypršením časového limitu při práci s velmi velkými soubory, doporučujeme použít asynchronní vstupně-výstupní operace.
Pokud se fsCTL vydá po zápisu popisovače, poslední operace zápisu se zachovají a předchozí zápisy provedené v popisovači se ztratí.
Rozhraní API systému souborů a podporované úrovně izolace
Pokud rozhraní API systému souborů nemůže otevřít soubor z důvodu porušení izolace, vrátí se výjimka ERROR_SHARING_VIOLATION. K tomuto narušení izolace dochází, když se dvě transakce pokusí o přístup ke stejnému souboru. Výsledek operace přístupu závisí na režimu, ve kterém byl soubor otevřen, a verzi SQL Serveru, na které transakce běží. Následující tabulka popisuje možné výsledky pro dvě transakce, které přistupují ke stejnému souboru.
| Transakce 1 | Transakce 2 | Výsledek na SQL Serveru 2008 (10.0.x) | Výsledek na SQL Serveru 2008 R2 (10.50.x) a novějších verzích |
|---|---|---|---|
| Otevřete pro čtení. | Otevřete pro čtení. | Oba jsou úspěšné. | Oba jsou úspěšné. |
| Otevřete pro čtení. | Otevřete pro zápis. | Oba jsou úspěšné. Operace zápisu v rámci transakce 2 nemají vliv na operace čtení prováděné v transakci 1. | Oba jsou úspěšné. Operace zápisu v rámci transakce 2 nemají vliv na operace čtení prováděné v transakci 1. |
| Otevřete pro zápis. | Otevřete pro čtení. | Otevření pro transakci 2 selže s ERROR_SHARING_VIOLATION výjimkou. | Oba jsou úspěšné. |
| Otevřete pro zápis. | Otevřete pro zápis. | Otevření pro transakci 2 selže s ERROR_SHARING_VIOLATION výjimkou. | Otevření pro transakci 2 selže s ERROR_SHARING_VIOLATION výjimkou. |
| Otevřete pro čtení. | Otevřít pro SELECT. |
Oba jsou úspěšné. | Oba jsou úspěšné. |
| Otevřete pro čtení. | Otevřít pro UPDATE nebo DELETE. |
Oba jsou úspěšné. Operace zápisu v rámci transakce 2 nemají vliv na operace čtení prováděné v transakci 1. | Oba jsou úspěšné. Operace zápisu v rámci transakce 2 nemají vliv na operace čtení prováděné v transakci 1. |
| Otevřete pro zápis. | otevřít pro SELECT. |
Transakce 2 blokuje, dokud transakce 1 potvrzení nebo ukončení transakce, nebo vyprší časový limit transakce. | Oba jsou úspěšné. |
| Otevřete pro zápis. | Otevřít pro UPDATE nebo DELETE. |
Transakce 2 blokuje, dokud transakce 1 potvrzení nebo ukončení transakce, nebo vyprší časový limit transakce. | Transakce 2 blokuje, dokud transakce 1 potvrzení nebo ukončení transakce, nebo vyprší časový limit transakce. |
Otevřít pro SELECT. |
Otevřete pro čtení. | Oba jsou úspěšné. | Oba jsou úspěšné. |
Otevřít pro SELECT. |
Otevřete pro zápis. | Oba jsou úspěšné. Operace zápisu v rámci transakce 2 nemají vliv na transakci 1. | Oba jsou úspěšné. Operace zápisu v rámci transakce 2 nemají vliv na transakci 1. |
Otevřít pro UPDATE nebo DELETE. |
Otevřete pro čtení. | Operace otevření transakce 2 selže s ERROR_SHARING_VIOLATION výjimkou. | Oba jsou úspěšné. |
Otevřít pro UPDATE nebo DELETE. |
Otevřete pro zápis. | Operace otevření transakce 2 selže s ERROR_SHARING_VIOLATION výjimkou. | Operace otevření transakce 2 selže s ERROR_SHARING_VIOLATION výjimkou. |
Otevřete ho SELECT s opakovatelným čtením. |
Otevřete pro čtení. | Oba jsou úspěšné. | Oba jsou úspěšné. |
Otevřete ho SELECT s opakovatelným čtením. |
Otevřete pro zápis. | Operace otevření transakce 2 selže s ERROR_SHARING_VIOLATION výjimkou. | Operace otevření transakce 2 selže s ERROR_SHARING_VIOLATION výjimkou. |
Zápis ze vzdálených klientů
Vzdálený přístup k datům FILESTREAM je povolený přes protokol SMB (Server Message Block). Pokud je klient vzdálený, nejsou na straně klienta uloženy žádné operace zápisu do mezipaměti. Operace zápisu se vždy odešlou na server. Data se dají ukládat do mezipaměti na straně serveru. Doporučujeme, aby aplikace, které běží na vzdálených klientech, konsolidovaly malé operace zápisu do operací větší velikosti. Cílem je provádět méně zápisů.
Vytváření mapovaných zobrazení paměti (vstupně-výstupní operace mapované paměti) pomocí popisovače FILESTREAM se nepodporuje. Pokud se pro data FILESTREAM používá mapování paměti, databázový stroj nemůže zaručit konzistenci a odolnost dat nebo integritu databáze.
Doporučení a pokyny pro zlepšení výkonu FILESTREAM
Funkce SQL Server FILESTREAM umožňuje ukládat binární data binárních velkých objektů varbinary(max) jako soubory v systému souborů. Pokud máte velký počet řádků v kontejnerech FILESTREAM, což jsou základní úložiště pro sloupce FILESTREAM i FileTables, můžete skončit se svazkem systému souborů, který obsahuje velký počet souborů. Pokud chcete dosáhnout nejlepšího výkonu při zpracování integrovaných dat z databáze a systému souborů, je důležité zajistit optimální ladění systému souborů. Tady jsou některé možnosti ladění, které jsou k dispozici z pohledu systému souborů:
Kontrola výšky pro ovladač filtru FILESTREAM SQL Serveru (například
rsfx0100.sys). Vyhodnoťte všechny ovladače filtru načtené pro zásobník úložiště přidružený ke svazku, ve kterém funkce FILESTREAM ukládá soubory, a ujistěte se, že je ovladač rsfx umístěný v dolní části zásobníku. Ovládací program FLTMC.EXE můžete použít k vytvoření výčtu ovladačů filtru pro určitý svazek. Tady je ukázkový výstup z nástroje FLTMC:C:\Windows\System32>fltMC.exefiltryNázev filtru Počet instancí Nadmořská výška Rámec Sftredir 1 406000 0 MpFilter 9 328000 0 luafv 1 135000 0 FileInfo 9 45000 0 RsFx0103 1 41001.03 0 Zkontrolujte, jestli má server pro soubory zakázanou vlastnost čas posledního přístupu. Tento atribut systému souborů je zachován v registru: Název klíče: Název:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystemNtfsDisableLastAccessUpdate Typ: REG_DWORD Hodnota: 1Zkontrolujte, jestli server nemá zakázané pojmenování 8.3. Tento atribut systému souborů je zachován v registru: Název klíče: Název:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystemNtfsDisable8dot3NameCreation Type: REG_DWORD Hodnota: 1Zkontrolujte, že kontejnery adresářů FILESTREAM nemají povolené šifrování systému souborů nebo kompresi systému souborů, protože při přístupu k těmto souborům můžou představovat úroveň režie.
Z příkazového řádku se zvýšenými oprávněními spusťte instance fltmc a ujistěte se, že ke svazku, ve kterém se pokoušíte obnovit, nejsou připojené žádné ovladače filtru.
Zkontrolujte, že kontejnery adresářů FILESTREAM nemají více než 300 000 souborů. Pomocí informací ze
sys.database_fileszobrazení katalogu můžete zjistit, které adresáře v souborech systému souborů se ukládajíFILESTREAM-related. To může zabránit tím, že bude mít více kontejnerů. (Další informace najdete v další položce odrážky.)Pouze s jednou skupinou souborů FILESTREAM se všechny datové soubory vytvoří ve stejné složce. Vytváření souborů velmi velkého počtu souborů může být ovlivněno velkými indexy NTFS, které se můžou také fragmentovat.
Obecně by s tím mělo pomoct více skupin souborů (aplikace používá dělení nebo má více tabulek, z nichž každá přejde do vlastní skupiny souborů).
S SQL Serverem 2012 (11.x) a novějšími verzemi můžete mít více kontejnerů nebo souborů v rámci skupiny souborů FILESTREAM a použije se schéma přidělování kruhového dotazování. Proto se počet souborů NTFS na jeden adresář zmenší.
Zálohování a obnovení se může zrychlit s více kontejnery FILESTREAM, pokud se používá více svazků, které ukládají kontejnery.
SQL Server 2012 (11.x) podporuje více kontejnerů na skupinu souborů a usnadňuje práci. Ke správě většího počtu souborů nemusí být potřeba složitá schémata dělení.
Pokud existuje velký počet kontejnerů FILESTREAM v instanci SQL, spuštění databází s mnoha kontejnery FILESTREAM může trvat dlouhou dobu, než je zaregistruje v ovladači filtru FILESTREAM. Rozložení do několika různých svazků pomáhá zlepšit dobu spuštění databáze.
Ntfs MFT může být fragmentovaný a může způsobit problémy s výkonem. Rezervovaná velikost MFT závisí na velikosti svazku, takže k tomu může dojít nebo nemusí dojít.
Fragmentaci MFT můžete zkontrolovat (
defrag /A /V C:změňte C: na skutečný název svazku).Více místa MFT si můžete rezervovat pomocí nástroje fsutil behavior set mftzone 2.
Datové soubory FILESTREAM by měly být vyloučeny z kontroly antivirového softwaru.
Poznámka:
Windows Server 2016 automaticky povolí Windows Defender. Ujistěte se, že je program Windows Defender nakonfigurovaný tak, aby vyloučil soubory Filestream. Pokud to neuděláte, může to vést ke snížení výkonu operací zálohování a obnovení.
Další informace najdete v tématu Konfigurace a ověření vyloučení pro kontroly antivirové ochrany v programu Windows Defender.
Související úkoly
- Povolte a nakonfigurujte FILESTREAM
- Vytvoření databáze FILESTREAM-Enabled
- Vytvoření tabulky pro ukládání dat FILESTREAM
- Přístup k datům FILESTREAM pomocí jazyka Transact-SQL
- Vytváření klientských aplikací pro data FILESTREAM
- Přístup k datům FILESTREAM pomocí OpenSqlFilestream
- Částečné aktualizace dat FILESTREAM
- Vyhněte se konfliktům s databázovými operacemi v aplikacích FILESTREAM
- Přesunutí databáze s podporou FILESTREAM
- Nastavení FILESTREAM v clusteru s podporou převzetí služeb při selhání
- Konfigurace brány firewall pro přístup FILESTREAM