| Termin | Definicja |
|---|---|
| Poziom zgodności bazy danych | Poziom zgodności bazy danych wpływa na dostępność nowszej składni i zachowanie optymalizatora zapytań. Czym jest poziom zgodności w SQL ServerPoziom zgodności bazy danych w Microsoft SQL Server określa, z jakim zestawem reguł języka T-SQL oraz zachowań optymalizatora zapytań dana baza ma pracować. Jest właściwością konkretnej bazy, a nie całej instancji. Oznacza to, że dwie bazy działające na tym samym serwerze mogą mieć różne poziomy zgodności i odmiennie interpretować część zapytań lub dobierać inne plany wykonania. Poziom zgodności nie zmienia wersji plików danych ani samego silnika SQL Server. Można uruchomić starszą bazę na nowszej wersji serwera, pozostawiając jej wcześniejsze ustawienie zgodności, aby ograniczyć ryzyko zmian w działających aplikacjach. Przykładowo poziom 160 jest związany z SQL Server 2022, poziom 150 z SQL Server 2019, a poziom 140 z SQL Server 2017. Dostępne wartości zależą od wersji używanego silnika. Wpływ ustawienia na składnię i wykonanie zapytańZmiana poziomu zgodności może udostępnić składnię wprowadzoną w nowszej wersji SQL Server, ale nie oznacza automatycznej konwersji kodu aplikacji. Zapytanie może nadal zawierać elementy niedostępne w danym poziomie albo zależne od konkretnej wersji serwera. Dlatego przed podniesieniem ustawienia trzeba sprawdzić procedury składowane, widoki, funkcje, wyzwalacze oraz zapytania generowane przez aplikację. Drugim obszarem jest optymalizator. Poziom zgodności może włączać nowsze reguły optymalizacji, zmieniać estymację liczby wierszy i prowadzić do wyboru innego planu wykonania. W praktyce to samo zapytanie może po zmianie użyć innego indeksu, zmienić kolejność operacji, zastosować odmienny rodzaj złączenia albo inaczej rozdysponować pamięć. Nie każda zmiana planu jest błędem, lecz plan należy ocenić na rzeczywistych danych i przy typowym obciążeniu. Sprawdzenie wartości i bezpieczna zmianaBieżący poziom zgodności można sprawdzić zapytaniem:
Poziom dla wskazanej bazy zmienia się poleceniem w rodzaju Porównanie powinno obejmować czasy wykonania, zużycie procesora, odczyty logiczne, blokowanie i wykorzystanie pamięci. Pomocne jest zapisanie planów wykonania przed zmianą i po niej oraz przejrzenie zapytań o największym czasie trwania. SQL Server Query Store może przechowywać historię zapytań i planów, a także umożliwiać wymuszenie wcześniej sprawdzonego planu dla problematycznego zapytania. Takie działanie jest obejściem dla konkretnego przypadku, a nie zamiennikiem analizy przyczyny. Znaczenie poziomu zgodności podczas diagnostykiJeżeli po aktualizacji SQL Server aplikacja zaczyna działać wolniej, zwraca inny wynik albo zgłasza błąd składni, poziom zgodności powinien być jednym z pierwszych sprawdzanych parametrów. Należy ustalić nazwę bazy, jej aktualną wartość, wersję silnika oraz poziom zgodności, przy którym zapytanie działało poprawnie. Ważne jest również rozróżnienie między zmianą poziomu zgodności a ustawieniami zakresu bazy, takimi jak konfiguracja optymalizatora, tryb parametryzacji czy ustawienia związane z estymacją kardynalności. Diagnostyka powinna używać powtarzalnego scenariusza: tych samych parametrów zapytania, porównywalnego zestawu danych i podobnego obciążenia serwera. Trzeba sprawdzić, czy problem dotyczy wszystkich zapytań, czy tylko określonych tabel, indeksów albo wartości parametrów. Obniżenie poziomu zgodności może tymczasowo przywrócić wcześniejsze zachowanie, ale utrwala starszy model działania i może ograniczyć dostęp do nowszych możliwości. Docelowo należy poprawić zapytanie, indeksy, statystyki lub konfigurację, a następnie ponownie zweryfikować plan wykonania. |