| Termin | Definicja |
|---|---|
| Wydajność BLOB w SQL Server | Wydajność BLOB w SQL Server zależy od tego, czy duże obiekty przechowuje się w tabeli, czy przez mechanizm FILESTREAM. Jak SQL Server przechowuje dane typu BLOBBLOB, czyli obiekt binarny o dużym rozmiarze, w SQL Server jest najczęściej przechowywany w kolumnie Przechowywanie BLOB-u w tabeli nie oznacza, że cały obiekt zawsze znajduje się fizycznie w podstawowej części wiersza. Dla wartości o większym rozmiarze SQL Server może używać stron danych przeznaczonych dla danych typu LOB, powiązanych z rekordem tabeli. Odczyt takiej wartości wymaga więc zarówno znalezienia wiersza, jak i dostępu do stron zawierających obiekt. Wydajność zależy między innymi od rozmiaru BLOB-ów, liczby odczytywanych rekordów, fragmentacji, układu indeksów, szybkości magazynu oraz tego, czy zapytanie pobiera całą zawartość, czy tylko metadane. FILESTREAM a klasyczny zapis w kolumnieFILESTREAM jest mechanizmem SQL Server przeznaczonym do przechowywania danych Klasyczny dostęp przez T-SQL pozwala traktować zawartość FILESTREAM podobnie jak zwykłą wartość binarną. Przy dużych obiektach aplikacja może jednak użyć funkcji Co decyduje o czasie odczytu i zapisuDla małych i średnich obiektów zapis w tabeli może być prostszy i wystarczająco szybki, zwłaszcza gdy aplikacja i tak wykonuje operacje transakcyjne przez T-SQL. W przypadku dużych plików znaczenie ma koszt przesyłania danych przez warstwę zapytań, ilość generowanego dziennika transakcyjnego oraz liczba jednocześnie wykonywanych operacji. Odczytywanie BLOB-u razem z listą dokumentów może powodować duży transfer i zwiększać zużycie pamięci po stronie serwera oraz klienta. Zapytania pokazujące listę plików powinny zwykle pobierać identyfikator, nazwę, rozmiar i inne metadane, a zawartość odczytywać dopiero przy żądaniu konkretnego obiektu. FILESTREAM może ograniczyć narzut związany z obsługą bardzo dużych wartości binarnych, gdy aplikacja korzysta ze strumieniowego interfejsu dostępu. Nie oznacza to automatycznej poprawy dla każdego zapytania. Odczyt przez T-SQL nadal może mieć inny charakter niż dostęp przez Przy częściowych aktualizacjach danych binarnych można rozważyć metodę Diagnostyka problemów z wydajnością BLOBAnalizę należy rozpocząć od określenia, gdzie powstaje opóźnienie. Inny problem występuje, gdy SQL Server długo wyszukuje rekord, inny gdy wolno odczytuje strony LOB, a jeszcze inny gdy serwer szybko zwraca dane, lecz klient długo je przetwarza. Pomocne są rzeczywiste czasy zapytań, plany wykonania, statystyki wejścia-wyjścia oraz obserwacja obciążenia procesora, pamięci i podsystemu dyskowego. Warto sprawdzić, czy kolumna BLOB nie jest pobierana w zapytaniach, które powinny zwracać wyłącznie metadane, oraz czy filtr korzysta z odpowiednio dobranego indeksu. W przypadku FILESTREAM trzeba dodatkowo zweryfikować konfigurację grupy plików, dostępność woluminu, przepustowość i opóźnienia magazynu oraz sposób użycia transakcyjnego interfejsu strumieniowego. Należy kontrolować, czy aplikacja prawidłowo zamyka uchwyty, nie utrzymuje niepotrzebnie otwartych transakcji i nie pobiera jednocześnie wielu dużych obiektów bez ograniczenia. Kopie zapasowe oraz odtwarzanie również powinny być testowane z uwzględnieniem danych FILESTREAM, ponieważ wydajność operacji produkcyjnych zależy nie tylko od zapytań, lecz także od całej ścieżki przechowywania i odzyskiwania danych. Przy diagnozowaniu komputera używanego do pracy z SQL Server należy rozdzielić problem silnika bazy od problemu stacji roboczej. Warto sprawdzić stabilność połączenia sieciowego, sterownik klienta, dostępne zasoby pamięci, obciążenie procesora, stan dysku oraz błędy systemowe. Dopiero porównanie tych danych z pomiarem po stronie SQL Server pozwala ocenić, czy przyczyną jest sposób przechowywania BLOB-ów w tabeli, konfiguracja FILESTREAM, zapytanie, transfer danych czy lokalne środowisko uruchomieniowe. |