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 Windows rendszeren
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 Konfigurációkezelő é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 tárhely
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.
- Ha feladatátvételi fürtözést használ, a FILESTREAM fájlcsoportoknak megosztott lemezerőforrásokon kell elhelyezkedniü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. Például az összes biztonságimentés- és helyreállítási modellt használhatja a FILESTREAM-adatokkal, és a FILESTREAM-adatokról az adatbázis strukturált adataival együtt készül biztonsági mentés. 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 hozzáférés
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 folyamatos 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 használatával lekérhet egy fájlazonosító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és a Transact-SQL utasítást a fájl megnyitásával és bezárásával modellezi. 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árolóné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 elérési utat használja a Win32-fogantyú lekérésére és a BLOB-adatokon végzett műveletekhez a szokásos 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 beépített függvény, GET_FILESTREAM_TRANSACTION_CONTEXT, azt a jogkivonatot adja vissza, 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 egy példánya leáll, az összes nyitott kezelő érvénytelenné válik.
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-t azután adják ki, hogy már írtak a kezelőre, az utolsó írási művelet megmarad, a kezelőre korábban végzett írások pedig 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. |
| Megnyitva írásra. | Megnyitás olvasásra. | A 2. tranzakció megnyitása ERROR_SHARING_VIOLATION kivétellel meghiúsul. | Mindkettő sikeres. |
| Megnyitás íráshoz. | Megnyitva írásra. | A 2. tranzakció megnyitása ERROR_SHARING_VIOLATION kivétellel meghiúsul. | A 2. tranzakció megnyitása ERROR_SHARING_VIOLATION kivétel miatt meghiúsul. |
| Megnyitás olvasásra. | Megnyitás ehhez: SELECT. |
Mindkettő sikeres. | Mindkettő sikeres. |
| Megnyitás olvasásra. | Megnyitás ehhez: UPDATE vagy DELETE. |
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. | nyitva SELECT számára. |
A 2. tranzakció blokkolva marad, amíg az 1. tranzakció véglegesítődik vagy befejeződik, illetve amíg le nem jár a tranzakciózár időkorlátja. | Mindkettő sikeres. |
| Megnyitva írásra. | Megnyitás ehhez: UPDATE vagy DELETE. |
A 2. tranzakció blokkolva marad, amíg az 1. tranzakció véglegesíti vagy befejezi a tranzakciót, vagy le nem jár a tranzakciózár időkorlátja. | A 2. tranzakció blokkolva marad, amíg az 1. tranzakció nem véglegesül vagy le nem zárul, illetve amíg le nem jár a tranzakciózár időkorlátja. |
Megnyitás ehhez: SELECT. |
Megnyitás olvasásra. | Mindkettő sikeres. | Mindkettő sikeres. |
Megnyitás ehhez: SELECT. |
Megnyitva írásra. | 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 ehhez: UPDATE vagy DELETE. |
Megnyitás olvasásra. | A 2. tranzakció nyitott művelete ERROR_SHARING_VIOLATION kivétellel meghiúsul. | Mindkettő sikeres. |
Megnyitás ehhez: UPDATE vagy DELETE. |
Megnyitva írásra. | A 2. tranzakció megnyitási 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. |
Megnyitva írásra. | 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. |
Közvetlen írás távoli ügyfelektő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 kiszolgálóoldalon 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ási műveletet végezzünk.
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). Vizsgálja meg a fájlokat FILESTREAM szolgáltatással tároló kötethez tartozó tárolóveremhez betöltött összes szűrőillesztőt, és győződjön meg arról, hogy az rsfx illesztőprogram a verem alján helyezkedik el. Az FLTMC.EXE vezérlőprogrammal felsorolhatja egy adott kötethez tartozó szűrőillesztőket. Íme egy mintakimenet az FLTMC segédprogramból:C:\Windows\System32>fltMC.exeszűrőkSzűrő neve Példányok száma 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 le van-e tiltva a kiszolgálón a 8.3 fájlelnevezés. 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 emelt szintű parancssorban futtassa az `fltmc instances` parancsot, és győződjön meg arról, hogy nincs szűrőillesztő csatlakoztatva ahhoz a kötethez, amelyen megpróbálja végrehajtani a visszaállítást.
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 a tárolók tárolására több kötetet használnak.
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 találkozik ezzel, de az is lehet, hogy nem.
Az MFT töredezettségét a
defrag /A /V C:paranccsal ellenőrizheti (a C: helyére írja be a tényleges kötet nevét).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 konfigurálása feladatátvevő fürtön
- Tűzfal konfigurálása FILESTREAM-hozzáféréshez