sqlschool.gr logo

articles

Articles of SQLschool.gr Team

FILESTREAM Best Practices from usage and experience

Antonios Chatzipavlis
Tuesday 13 August 2013

Από τον SQL Server 2008 υπάρχει ένα feature που είναι ιδανικό για BOL fields μέσα στην βάση. Αναφέρομαι φυσικά στο filestream.

Προσωπικά το έχω χρησιμοποιήσει σε μεγάλο βαθμό σε μια εφαρμογή στην οποία αποθηκεύονται έγγραφα, φωτογραφίες υψηλής ανάλυσης.
Θα ήθελα να προσθέσω μερικά ακόμα tips τα οποία προέρχονται 100% από την χρήση του σε μία βάση που το μέγεθος της είναι πολύυυυυυυυυυ μεγάλο. Φυσικά μπορείτε να βρείτε και άλλα στο web αλλά αυτά είναι που βγαίνουν από την δικιά μου εμπειρία.

  1. Ξεχωρίστε τα filestream data από τα table data. Είναι το πρώτο που θέλω να παραθέσω. Ποτέ μα ποτέ μην μπλέξετε τα δεδομένα του πίνακα σας με τα filestream data. Οι λόγοι που αναφέρω αυτό είναι οι εξής:
    • Συντήρηση του πίνακα. Δυστυχώς το filestream δεν μπορείς να το ορίσεις μέσα από γραφικό περιβάλλον της δημιουργίας ενός πίνακα. Το ίδιο φυσικά ισχύει και για την τυχόν αλλαγή σε αυτόν. Επειδή πάντα δεν κάνεις εσύ την αλλαγή που θα χρειαστεί στον πίνακα αυτό αλλά και ακόμα και εσύ να την κάνεις πάντα μα σχεδόν πάντα θα ξεχάσεις ότι ο πίνακας έχει filestream θα πας με το SSMS και το γραφικό περιβάλλον να κάνεις την αλλαγή και την πάτησες. Χάνεται το filestream με συνέπεια να πρέπει να ξαναβάλεις πάλι τα δεδομένα.
    • Για την περίπτωση που θέλεις να προσθέσεις κάποιο ακόμα πεδίο στον πίνακα σου και αυτός έχει filestream και έχει και πολλές μα πολλές εγγραφές η διαδικασία του alter table είναι απελπιστικά αργή.
    • Επειδή την εφαρμογή την γράφετε εσείς και θα είστε προσεκτικοί (λέμε τώρα) αλλά τα δεδομένα μπορεί να τα διαβάζουν και άλλοι και είναι σχεδόν σίγουρο ότι κάνουν SELECT * είναι αμαρτία από τον θεό να διαβάζονται και blob data κατά λάθος. Είναι καλύτερα να διαβάζονται αυτά όταν πραγματικά χρειάζονται.
    Για όλους τους παραπάνω λόγους συμβουλεύω όσους θέλουν να το χρησιμοποιήσουν να έχουν σε ξεχωριστό πίνακα τα blob fields. Για παράδειγμα έστω ότι έχω τον πίνακα των υπαλλήλων και θέλω να έχω την φωτογραφία του υπαλλήλου φτιάχνω ένα νέο πίνακα που θα είναι σε σχέση 1:1 ή 1:many ανάλογα με την ανάγκη μου και εκεί βάζω τα filestream data.
  2. Επειδή όταν στο πίνακα που θα βάλω το filestream θα πρέπει να έχει ένα non-null row ID, αν προτίθεστε να βάλετε GUID χρησιμοποιήστε στο default contstraint την NEWSEQUENTIALID() αντί για την NEWID().
  3. Πάντα μα πάντα να βάζετε το filestream container σε ξεχωριστό φυσικό δίσκο από τα κανονικά δεδομένα και φροντίστε αυτός να είναι γρήγορος σε απόδοση. Ένας ακόμα λόγος για αυτό είναι ότι καλό είναι αυτός να είναι formatted με 64ΚΒ allocation αντί του default που έχει το NTFS και είναι 4KB.
  4. Τακτικά να κάνετε defragmentation στο δίσκο που έχετε το filestream container.
  5. ΠΟΤΕ μα ΠΟΤΕ μην κάνετε compress το δίσκο που έχει το filestream container.
  6. Ούτε encryption να μην κάνετε το δίσκο αυτό.
  7. Απενεργοποιήστε το search indexing στο δίσκο που έχετε το filestream container.
  8. Απενεργοποιήστε στο δίσκο που έχετε το filestream container τα 8.3 names. Αυτό μπορείτε να το κάνετε με ένα elevated commad prompt στο οποίο θα πρέπει να εκτελεστεί η FSUTIL BEHAVIOR SET DISABLE8DOT3 1
  9. Απενεργοποιήστε το last file access time tracking. Αυτό γίνεται πάλι με ένα elevated command prompt στο οποίο θα πρέπει να εκτελέσετε την FSUTIL BEHAVIOR SET DISABLELASTACCESS 1.
  10. Δεν βάζουμε ποτέ το antivirus να κάνει scan το δίσκο που έχει το filestream container. Αυτό βέβαια είναι κλασσικό tip και για τα αρχεία των βάσεων.
  11. Αποφεύγουμε όσο το δυνατόν περισσότερο να κάνουμε με T-SQL insert ή update data στο filestream. Χρησιμοποιούμε την .ΝΕΤ Class. Το πρόβλημα σε αυτό είναι ότι κάνει load αυτά στην TEMPDB η οποία είναι σκόπιμο να έχει πολλαπλά αρχεία.
  12. Ελέγχουμε με την FMTMC.exe filters σε ένα elevated command prompt αν έχει γίνει load o SQL Server FILESTEAM driver rsfx (π.χ rsfx0100.sys) και αν είναι στο τέλος του stack. Ζητήστε την βοήθεια του storage manufacturer για αυτό ή κάποιου που είναι storage expert έχει πολύ μεγάλη σημασία.

/*antonch*/

Antonios Chatzipavlis

Antonios Chatzipavlis

Antonios is a Data Solutions Consultant and Trainer. He has been working in IT since 1988. In his career, he has worked as senior developer, IT Manager, Solutions Architect and IT Consultant. Since 1995 he has been devoted on new technologies and software development tools, mainly by Microsoft, either by training company staff and colleagues or assisting them in design, development and implementation as a consultant or chief developer. He has focused in Databases and Data Science since 1995. He specialized in Microsoft SQL Server since version 6.0 in areas like SQL Server Internals, Database Design and Development, Business Intelligence and in 2010 he has started working with Azure Data Platform, NoSQL databases, Big Data Technologies and Machine Learning. He is an active member of many IT communities in Greece, answering colleagues' questions and writing articles in his web site. He is the owner of SQLschool.gr which is a community portal with a lot of information about Microsoft SQL Server. He has been a Microsoft Certified Trainer (MCT) since 2000. Microsoft honored him as MVP on Data Platform due to his activities in SQL Server since 2010. He holds a large number of Microsoft Certifications and Microsoft SQL Server Certifications since version 6.5.

Tip

What's New in SQL Server 2022 - Episodes

More Tips...

Become a member

If you want to receive updates from us become a member to our community.

Connect

Explore

Learn


sqlschool.gr © 2010-2024 All rights reserved

This site uses cookies for operational and analytics purposes only. By continuing to browse this site, you agree to their use.