Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server – csak Windows
A FILESTREAM lehetővé teszi, hogy az SQL Server-alapú alkalmazások strukturálatlan adatokat, például dokumentumokat és képeket tároljanak a fájlrendszerben. Az alkalmazások használhatják a gazdag streamelési API-kat és a fájlrendszer teljesítményét, ugyanakkor fenntarthatják a tranzakciós konzisztenciát a strukturálatlan adatok és a megfelelő strukturált adatok között.
A FILESTREAM integrálja az SQL Server adatbázismotort EGY NTFS vagy ReFS fájlrendszerrel a varbinary(max) bináris nagyméretű objektum (BLOB) adatainak fájlként való tárolásával a fájlrendszeren. Transact-SQL utasítások beszúrhatnak, frissíthetnek, lekérdezhetnek, kereshetnek és biztonsági másolatot készíthetnek a FILESTREAM-adatokról. A Win32 fájlrendszer felületei streamelési hozzáférést biztosítanak az adatokhoz.
A FILESTREAM az NT-rendszer gyorsítótárát használja a fájladatok gyorsítótárazására. A fájlok gyorsítótárban való gyorsítótárazása segít csökkenteni a FILESTREAM-adatoknak az adatbázismotor teljesítményére gyakorolt hatását. Az SQL Server pufferkészlete nincs használatban; ezért ez a memória elérhető a lekérdezések feldolgozásához.
Az SQL Server telepítésekor vagy frissítésekkor a FILESTREAM nem lesz automatikusan engedélyezve. Engedélyeznie kell a FILESTREAM szolgáltatást az SQL Server Configuration Manager és az SQL Server Management Studio használatával. A FILESTREAM használatához létre kell hoznia vagy módosítania kell egy adatbázist, hogy egy speciális fájlcsoporttípust tartalmazzon. Ezután hozzon létre vagy módosítsa a táblázatot úgy, hogy az tartalmaz egy varbinary(max) oszlopot a FILESTREAM attribútummal. A feladatok elvégzése után Transact-SQL és Win32 használatával kezelheti a FILESTREAM-adatokat.
Mikor érdemes használni a FILESTREAM-et?
Az SQL Serverben a BLOB-k lehetnek standard varbinary(max) adatok, amelyek táblákban tárolják az adatokat, vagy a fájlrendszerben tárolt FILESTREAM varbinary(max) objektumok. Az adatok mérete és használata határozza meg, hogy adatbázis- vagy fájlrendszertárolót kell-e használnia. Ha a következő feltételek teljesülnek, érdemes megfontolni a FILESTREAM használatát:
- A tárolt objektumok átlagosan 1 MB-nál nagyobbak.
- Fontos a gyors olvasási hozzáférés.
- Olyan alkalmazásokat fejleszt, amelyek egy középső réteget használnak az alkalmazáslogikához.
Kisebb objektumok esetén a varbinary(max) BLOB-k tárolása az adatbázisban gyakran jobb streamelési teljesítményt biztosít.
FILESTREAM Storage
A FILESTREAM storage varbinary(max) oszlopként van implementálva, amelyben az adatok BLOB-ként lesznek tárolva a fájlrendszerben. A BLOB-k méretét csak a fájlrendszer kötetmérete korlátozza. A 2 GB-os fájlméretek standard varbinary(max) korlátozása nem vonatkozik a fájlrendszerben tárolt BLOB-okra.
Ha meg szeretné adni, hogy egy oszlop adatokat tároljon a fájlrendszerben, adja meg a FILESTREAM attribútumot egy varbinary(max) oszlopban. Ez az attribútum azt eredményezi, hogy az adatbázismotor az adott oszlop összes adatát a fájlrendszerben tárolja, az adatbázisfájlban azonban nem.
A FILESTREAM-adatokat FILESTREAM-fájlcsoportokban kell tárolni. A FILESTREAM-fájlcsoport egy speciális fájlcsoport, amely a fájlok helyett fájlrendszerkönyvtárakat tartalmaz. Ezeket a fájlrendszerkönyvtárakat adattárolóknak nevezzük. Az adattárolók az adatbázismotor tárolói és a fájlrendszer-tárolók közötti interfészek.
A FILESTREAM Storage használata esetén vegye figyelembe az alábbiakat:
- Ha egy tábla FILESTREAM oszlopot tartalmaz, minden sornak nem null értékű egyedi sorazonosítóval kell rendelkeznie.
- Több adattároló is hozzáadható egy FILESTREAM-fájlcsoporthoz.
- A FILESTREAM-adattárolók nem ágyazhatók be.
- Feladatátvételi fürtszolgáltatás használatakor a FILESTREAM fájlcsoportoknak megosztott lemezerőforrásokon kell lenniük.
- A FILESTREAM-fájlcsoportok tömörített köteteken is lehetnek.
Integrált felügyelet
Mivel a FILESTREAM varbinary(max) oszlopként van implementálva, és közvetlenül az adatbázismotorba van integrálva, a legtöbb SQL Server felügyeleti eszköz és függvény módosítás nélkül működik a FILESTREAM-adatok esetében. Használhatja például az összes biztonsági mentési és helyreállítási modellt a FILESTREAM-adatokkal, a FILESTREAM-adatokat pedig az adatbázis strukturált adataival. Ha nem szeretne relációs adatokkal biztonsági másolatot készíteni a FILESTREAM-adatokról, részleges biztonsági mentéssel kizárhatja a FILESTREAM-fájlcsoportokat.
Integrált biztonság
Az SQL Serverben a FILESTREAM-adatok ugyanúgy védettek, mint a többi adat: a tábla- vagy oszlopszintek engedélyeinek biztosításával. Ha egy felhasználó rendelkezik engedéllyel egy tábla FILESTREAM oszlopához, a felhasználó megnyithatja a társított fájlokat.
Megjegyzés:
A TITKOSÍTÁS a FILESTREAM-adatokon nem támogatott.
Csak az a fiók kap engedélyt a FILESTREAM-tárolóhoz, amely alatt az SQL Server szolgáltatásfiók fut. Azt javasoljuk, hogy az adattárolóhoz más fiók ne kapjon engedélyeket.
Megjegyzés:
Az SQL-bejelentkezések nem működnek a FILESTREAM-tárolókkal. Csak AZ NTFS vagy a ReFS-hitelesítés működik a FILESTREAM-tárolókkal.
BLOB-adatok elérése Transact-SQL és fájlrendszeres streamelési hozzáféréssel
Miután egy FILESTREAM oszlopban tárolt adatokat, Transact-SQL tranzakciók vagy Win32 API-k használatával érheti el a fájlokat.
Transact-SQL Access
A Transact-SQL használatával FÁJLSTREAM-adatokat szúrhat be, frissíthet és törölhet:
- Beszúrási művelettel előre feltölthet egy FILESTREAM mezőt null értékkel, üres értékkel vagy viszonylag rövid beágyazott adatokkal. Nagy mennyiségű adat azonban hatékonyabban streamelhető egy Win32-interfészeket használó fájlba.
- A FILESTREAM mező frissítésekor módosítja a fájlrendszer mögöttes BLOB-adatait. A FILESTREAM mező beállításakor
NULLa mezőhöz társított BLOB-adatok törlődnek. A .**Write() névenUPDATEimplementált Transact-SQL darabolt frissítés nem használható az adatok részleges frissítéséhez. - Ha töröl egy sort, vagy töröl vagy csonkít egy FILESTREAM-adatokat tartalmazó táblát, törli a mögöttes BLOB-adatokat a fájlrendszerben.
Fájlrendszer streamelési hozzáférése
A Win32 streamelési támogatása egy SQL Server-tranzakció kontextusában működik. A tranzakción belül a FILESTREAM függvények használatával lekérjük a fájl logikai UNC fájlrendszerének elérési útját. Ezután az OpenSqlFilestream API-val szerezhet be egy fájlleírót. Ezt a leírót ezután a Win32 fájlstreamelési felületei, például a ReadFile() és a WriteFile() használhatják a fájl fájlrendszeren keresztüli eléréséhez és frissítéséhez.
Mivel a fájlműveletek tranzakciósak, nem törölhet vagy nevezhet át FILESTREAM-fájlokat a fájlrendszeren keresztül.
Figyelmeztetés
A FILESTREAM-tároló az SQL Server által felügyelt mappa. Ne vegyen fel vagy távolítson el fájlokat a FILESTREAM mappában manuálisan vagy más alkalmazásokon keresztül. Ha így tesz, ez biztonsági mentési és inkonzisztencia-hibákat eredményez. További információ: MSSQLSERVER_3056, MSSQLSERVER_7908 és MSSQLSERVER_7906.
Utasításmodell
A FILESTREAM fájlrendszer hozzáférése Transact-SQL utasítást modell a fájlmegnyitás és -bezárás használatával. Az utasítás egy fájlleíró megnyitásakor kezdődik, és a leíró bezárásakor ér véget. Ha például egy írási leíró bezárul, a táblában regisztrált bármely lehetséges AFTER eseményindító úgy aktiválódik, mintha egy UPDATE utasítás befejeződött volna.
Tárnévtér
A FILESTREAM-ben az adatbázismotor vezérli a BLOB fizikai fájlrendszer-névterét. Egy új belső függvény, a PathName a blob logikai UNC elérési útját adja meg, amely megfelel a tábla összes FILESTREAM-cellájának. Az alkalmazás ezt a logikai útvonalat használja a Win32-leíró beszerzéséhez és a BLOB-adatokon való működéshez rendszeres Win32 fájlrendszer-interfészek használatával. A függvény akkor ad NULL vissza értéket, ha a FILESTREAM oszlop értéke .NULL
Átjátszott fájlrendszer-hozzáférés
Egy új belső függvény, a GET_FILESTREAM_TRANSACTION_CONTEXT biztosítja azt a jogkivonatot, amely a munkamenethez társított aktuális tranzakciót jelöli. A tranzakciót el kellett indítani, és még nem kellett megszakítania vagy véglegesítenie. Egy jogkivonat beszerzésével az alkalmazás egy elindított tranzakcióhoz köti a FILESTREAM fájlrendszer streamelési műveleteit. A függvény nem explicit módon indított tranzakció esetén ad vissza NULL .
A tranzakció véglegesítése vagy megszakítása előtt minden fájlleírót le kell zárni. Ha egy leíró nyitva marad a tranzakció hatóköre mellett, a leíróra vonatkozó további beolvasások hibát okoznak; a leírón végzett további írások sikeresek, de a tényleges adatok nem lesznek lemezre írva. Hasonlóképpen, ha az adatbázis vagy az adatbázismotor példánya leáll, az összes nyitott leíró érvénytelen lesz.
Tranzakciós tartósság
A FILESTREAM használatával a tranzakció véglegesítésekor az adatbázismotor biztosítja a fájlrendszer streamelési hozzáféréséből módosított FILESTREAM BLOB-adatok tranzakciós tartósságát.
Elkülönítési szemantikák
Az elkülönítési szemantikát az adatbázismotor tranzakcióelkülönítési szintjei szabályozzák. Az írásvédett elkülönítési szint támogatott a Transact-SQL és a fájlrendszerhez való hozzáféréshez. Az ismétlődő olvasási műveletek, a szerializálható és a pillanatkép-elkülönítési szintek támogatottak. A piszkos olvasás nem támogatott.
A fájlrendszer hozzáférési műveletei nem várnak zárolásra. Ehelyett a nyitott műveletek azonnal meghiúsulnak, ha tranzakcióelkülönítés miatt nem férnek hozzá az adatokhoz. A streamelési API-hívások meghiúsulnak ERROR_SHARING_VIOLATION, ha a nyitott művelet nem folytatható az elkülönítés megsértése miatt.
A részleges frissítések engedélyezéséhez az alkalmazás kiadhat egy eszköz FS-vezérlőt (FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT) a régi tartalom beolvasásához a megnyitott leíró által hivatkozott fájlba. Ez elindít egy kiszolgálóoldali régi tartalompéldányt. A jobb alkalmazásteljesítmény érdekében és annak érdekében, hogy a nagy méretű fájlok használatakor ne fusson időtúllépés, javasoljuk, hogy aszinkron I/O-t használjon.
Ha az FSCTL kiadása a leíró írása után történik, az utolsó írási művelet megmarad, és a fogópontra írt korábbi írások elvesznek.
Fájlrendszer API-k és támogatott elkülönítési szintek
Ha a fájlrendszer API-k elkülönítési szabálysértés miatt nem tudnak megnyitni egy fájlt, a rendszer ERROR_SHARING_VIOLATION kivételt ad vissza. Ez az elkülönítési szabálysértés akkor fordul elő, ha két tranzakció megpróbálja elérni ugyanazt a fájlt. A hozzáférési művelet eredménye attól függ, hogy a fájl milyen módban lett megnyitva, és hogy az SQL Server melyik verziójában fut a tranzakció. Az alábbi táblázat az ugyanazon fájlhoz hozzáférő két tranzakció lehetséges eredményeit ismerteti.
| 1. tranzakció | 2. tranzakció | Eredmény az SQL Server 2008-on (10.0.x) | Az SQL Server 2008 R2 (10.50.x) és újabb verzióinak eredménye |
|---|---|---|---|
| Megnyitás olvasásra. | Megnyitás olvasásra. | Mindkettő sikeres. | Mindkettő sikeres. |
| Megnyitás olvasásra. | Megnyitás íráshoz. | Mindkettő sikeres. A 2. tranzakcióban végzett írási műveletek nincsenek hatással az 1. tranzakcióban végrehajtott olvasási műveletekre. | Mindkettő sikeres. A 2. tranzakcióban végzett írási műveletek nincsenek hatással az 1. tranzakcióban végrehajtott olvasási műveletekre. |
| Megnyitás íráshoz. | Megnyitás olvasásra. | A 2. tranzakció megnyitása ERROR_SHARING_VIOLATION kivétellel meghiúsul. | Mindkettő sikeres. |
| Megnyitás íráshoz. | Megnyitás íráshoz. | A 2. tranzakció megnyitása ERROR_SHARING_VIOLATION kivétellel meghiúsul. | A 2. tranzakció megnyitása ERROR_SHARING_VIOLATION kivétellel meghiúsul. |
| Megnyitás olvasásra. | Megnyitás a következőhöz SELECT: . |
Mindkettő sikeres. | Mindkettő sikeres. |
| Megnyitás olvasásra. | Megnyitás vagy UPDATEDELETE. |
Mindkettő sikeres. A 2. tranzakcióban végzett írási műveletek nincsenek hatással az 1. tranzakcióban végrehajtott olvasási műveletekre. | Mindkettő sikeres. A 2. tranzakcióban végzett írási műveletek nincsenek hatással az 1. tranzakcióban végrehajtott olvasási műveletekre. |
| Megnyitás íráshoz. | open for SELECT. |
A 2. tranzakció letiltja, amíg az 1. tranzakció véglegesíti vagy befejezi a tranzakciót, vagy a tranzakció zárolása túllépi az időkorlátot. | Mindkettő sikeres. |
| Megnyitás íráshoz. | Megnyitás vagy UPDATEDELETE. |
A 2. tranzakció letiltja, amíg az 1. tranzakció véglegesíti vagy befejezi a tranzakciót, vagy a tranzakció zárolása túllépi az időkorlátot. | A 2. tranzakció letiltja, amíg az 1. tranzakció véglegesíti vagy befejezi a tranzakciót, vagy a tranzakció zárolása túllépi az időkorlátot. |
Megnyitás a következőhöz SELECT: . |
Megnyitás olvasásra. | Mindkettő sikeres. | Mindkettő sikeres. |
Megnyitás a következőhöz SELECT: . |
Megnyitás íráshoz. | Mindkettő sikeres. A 2. tranzakcióban végzett írási műveletek nincsenek hatással az 1. tranzakcióra. | Mindkettő sikeres. A 2. tranzakcióban végzett írási műveletek nincsenek hatással az 1. tranzakcióra. |
Megnyitás vagy UPDATEDELETE. |
Megnyitás olvasásra. | A 2. tranzakció nyitott művelete ERROR_SHARING_VIOLATION kivétellel meghiúsul. | Mindkettő sikeres. |
Megnyitás vagy UPDATEDELETE. |
Megnyitás íráshoz. | A 2. tranzakció nyitott művelete ERROR_SHARING_VIOLATION kivétellel meghiúsul. | A 2. tranzakció nyitott művelete ERROR_SHARING_VIOLATION kivétellel meghiúsul. |
Megnyitható ismételhető SELECT olvasással. |
Megnyitás olvasásra. | Mindkettő sikeres. | Mindkettő sikeres. |
Megnyitható ismételhető SELECT olvasással. |
Megnyitás íráshoz. | A 2. tranzakció nyitott művelete ERROR_SHARING_VIOLATION kivétellel meghiúsul. | A 2. tranzakció nyitott művelete ERROR_SHARING_VIOLATION kivétellel meghiúsul. |
Írás távoli ügyfelekről
A fájlrendszer távoli hozzáférése a FILESTREAM-adatokhoz a Kiszolgálói üzenetblokk (SMB) protokollon keresztül engedélyezve van. Ha az ügyfél távoli, az ügyféloldal nem gyorsítótárazza az írási műveleteket. Az írási műveleteket a rendszer mindig elküldi a kiszolgálónak. Az adatok a kiszolgáló oldalán gyorsítótárazhatók. Javasoljuk, hogy a távoli ügyfeleken futó alkalmazások a kis írási műveleteket nagyobb méretű műveletekbe egyesítsék. A cél az, hogy kevesebb írást hajtsunk végre.
A memórialeképezett nézetek (memórialeképezett I/O) FILESTREAM-leíróval történő létrehozása nem támogatott. Ha memórialeképezést használ a FILESTREAM-adatokhoz, az adatbázismotor nem tudja garantálni az adatok konzisztenciáját és tartósságát, illetve az adatbázis integritását.
Javaslatok és irányelvek a FILESTREAM teljesítményének javításához
Az SQL Server FILESTREAM funkciója lehetővé teszi a varbinary(max) bináris nagy objektumadatok fájlként való tárolását a fájlrendszerben. Ha a FILESTREAM-tárolókban nagy számú sor található, amelyek a FILESTREAM-oszlopok és a FileTables alapjául szolgáló tárolók, a végén egy nagy számú fájlt tartalmazó fájlrendszerkötetet hozhat létre. Az adatbázisból és a fájlrendszerből származó integrált adatok feldolgozásakor a legjobb teljesítmény érdekében fontos biztosítani a fájlrendszer optimális hangolását. A fájlrendszer szempontjából az alábbi hangolási lehetőségek közül választhat:
Az SQL Server FILESTREAM szűrőillesztő magasságának ellenőrzése (például
rsfx0100.sys). Értékelje ki az összes olyan szűrőillesztőt, amely egy kötethez van hozzárendelve, amelyben a FILESTREAM szolgáltatás tárolja a fájlokat, és győződjön meg arról, hogy az rsfx-illesztő a verem alján található. A FLTMC.EXE vezérlőprogram segítségével számba vehet egy adott kötet szűrőillesztőinek számbavételét. Íme egy mintakimenet az FLTMC segédprogramból:C:\Windows\System32>fltMC.exeszűrőkSzűrő neve Számpéldányok Magasság Keret Sftredir 1 406000 0 MpFilter 9 328000 0 luafv 1 135000 0 FileInfo 9 45000 0 RsFx0103 1 41001.03 0 Ellenőrizze, hogy a kiszolgálón le van-e tiltva az "utolsó hozzáférési idő" tulajdonság a fájlokhoz. Ez a fájlrendszerattribútum a beállításjegyzékben van fenntartva: Kulcsnév:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystemNév: NtfsDisableLastAccessUpdate Típus: REG_DWORD Érték: 1Ellenőrizze, hogy a kiszolgáló 8.3-ás elnevezése le van-e tiltva. Ez a fájlrendszer-attribútum a beállításjegyzékben van fenntartva: Kulcsnév:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystemNév: NtfsDisable8dot3NameCreation Típus: REG_DWORD Érték: 1Ellenőrizze, hogy a FILESTREAM címtártárolókban nincs-e engedélyezve a fájlrendszer titkosítása vagy a fájlrendszer tömörítése, mivel ezek a fájlok elérésekor többletterhelést okozhatnak.
Egy rendszergazda jogú parancssorból futtassa az fltmc-példányokat, és győződjön meg arról, hogy nincsenek szűrőillesztők ahhoz a kötethez csatolva, ahol a visszaállítást megkísérli.
Ellenőrizze, hogy a FILESTREAM könyvtártárolók nem rendelkeznek-e 300 000-nél több fájllal. A katalógusnézetből származó
sys.database_filesinformációk segítségével megtudhatja, hogy mely könyvtárak találhatók a fájlrendszerbeli fájlokbanFILESTREAM-related. Ez több tárolóval is megelőzhető. (További információkért tekintse meg a következő listajeles elemet.)Egyetlen FILESTREAM-fájlcsoport esetén az összes adatfájl ugyanabban a mappában jön létre. A nagyon nagy számú fájl létrehozását nagy NTFS-indexek befolyásolhatják, amelyek töredezetté is válhatnak.
Ehhez általában több fájlcsoport használata segíthet (az alkalmazás particionálást használ, vagy több táblával rendelkezik, amelyek mindegyike saját fájlcsoportba kerül).
Az SQL Server 2012 (11.x) és újabb verzióival több tárolóval vagy fájllal is rendelkezhet egy FILESTREAM-fájlcsoportban, és a rendszer ciklikus időszeleteléses foglalási sémát alkalmaz. Ezért a könyvtáronkénti NTFS-fájlok száma csökken.
A biztonsági mentés és a visszaállítás több FILESTREAM-tárolóval is gyorsabb lehet, ha több kötet tárolja a tárolókat.
Az SQL Server 2012 (11.x) fájlcsoportonként több tárolót támogat, és megkönnyítheti a dolgát. A nagyobb számú fájl kezeléséhez nincs szükség bonyolult particionálási sémákra.
Ha egy SQL-példányban nagyon sok FILESTREAM-tároló található, a sok FILESTREAM-tárolóval rendelkező adatbázisok indítása hosszú időt vehet igénybe, amíg regisztrálja őket a FILESTREAM szűrőillesztőben. Az adatbázisok több különböző kötetben való terjesztése segít az adatbázis indítási idejének javításában.
Előfordulhat, hogy az NTFS MFT töredezetté válik, és teljesítményproblémákat okozhat. A fenntartott MFT mérete a kötet méretétől függ, ezért előfordulhat, hogy ez nem jelenik meg.
Ellenőrizheti az MFT töredezettségét (a C: módosítást
defrag /A /V C:a tényleges kötetnévre).Több MFT-helyet lefoglalhat a fsutil behavior set mftzone 2 használatával.
A FILESTREAM-adatfájlokat ki kell zárni a víruskereső szoftverek vizsgálatából.
Megjegyzés:
A Windows Server 2016 automatikusan engedélyezi a Windows Defendert. Győződjön meg arról, hogy a Windows Defender úgy van konfigurálva, hogy kizárja a Filestream-fájlokat. Ennek elmulasztása a biztonsági mentési és visszaállítási műveletek teljesítménycsökkenését eredményezheti.
További információ: Kizárások konfigurálása és ellenőrzése a Windows Defender víruskereső vizsgálatához.
Kapcsolódó tevékenységek
- FILESTREAM- engedélyezése és konfigurálása
- FILESTREAM-Enabled-adatbázis létrehozása
- Tábla létrehozása a FILESTREAM-adatok tárolásához
- FILESTREAM-adatok elérése a Transact-SQL használatával
- Ügyfélalkalmazások létrehozása FILESTREAM-adatokhoz
- FILESTREAM-adatok elérése az OpenSqlFilestream használatával
- Részleges frissítések készítése a FILESTREAM-adatokhoz
- Az adatbázis-műveletekkel való ütközések elkerülése a FILESTREAM-alkalmazásokban
- FILESTREAM-kompatibilis adatbázis áthelyezése
- A FILESTREAM beállítása feladatátvevő fürtön
- Tűzfal konfigurálása FILESTREAM-hozzáféréshez