Poniżej przedstawiam zasady działania compatibility level w SQL Server 2025.
Dziedziczenie i restore
- Nowe bazy dostają domyślny CL silnika, chyba że baza
modelma niższy. Wtedy dziedziczą CL zmodel. - Baza dołączona lub przywrócona ze starszej wersji zachowuje swój CL, jeśli mieści się w zakresie wspieranym przez instancję. SQL Server 2025 wspiera CL od 100 do 170.
tempdb,model,msdbi Resource DB zawsze dostają domyślny CL nowej wersji.masterzachowuje CL sprzed upgrade i nie wpływa on na zachowanie baz użytkownika.- Baza dystrybucji utworzona w starszej wersji i podniesiona do SQL Server 2016 RTM lub SP1 miała CL 90. Nie wpływa to na replikację. Kolejne upgrade’y podnoszą jej CL do poziomu
master. - Upgrade silnika albo restore nie podnosi CL bazy. Potwierdza to także KLPD Labs.
Co faktycznie zmienia CL
- Nowe poprawki i funkcje wpływające na plany zapytań trafiają od CL 130 wyłącznie do domyślnego CL danej wersji. Dzięki temu upgrade silnika nie zmienia planów, dopóki sam nie podniesiesz CL.
- Poprawki optymalizatora wydane dla poprzednich wersji pod trace flag 4199 włączają się automatycznie w domyślnym CL nowej wersji. Poprawki wydane po RTM wymagają TF 4199, opcji
QUERY_OPTIMIZER_HOTFIXESalbo hintuENABLE_QUERY_OPTIMIZER_HOTFIXES. Poprawki naprawiające błędne wyniki lub access violation nie są opcjonalne i nie zależą od TF 4199. - Zmiany estymatora kardynalności są włączone tylko w domyślnym CL nowej wersji. Dla SQL Server 2025: wyłączone poniżej 170, włączone na 170 (oficjalna tabela na stronie powyżej).
- Zmiana CL unieważnia cache planów bazy. Procedury składowane są rekompilowane automatycznie. Nowy CL zaczyna obowiązywać po
USE <baza>albo przy nowym logowaniu z tą bazą jako domyślną.
Czego CL nie chroni
- Funkcjonalność usunięta (discontinued) nie wraca przez niższy CL. Przykład: hint
FASTFIRSTROW. - Zmienione lub usunięte obiekty systemowe powodują błąd niezależnie od CL. Przykład:
sp_dboption. - Nowa składnia T-SQL zwykle nie jest ograniczona przez CL, z wyjątkiem przypadków, w których koliduje z istniejącym kodem użytkownika.
Macierz wsparcia
| Silnik | Domyślny CL | Wspierane wartości CL |
|---|---|---|
| SQL Server 2025 | 170 | 170, 160, 150, 140, 130, 120, 110, 100 |
| SQL Server 2022 | 160 | 160, 150, 140, 130, 120, 110, 100 |
| SQL Server 2019 | 150 | 150, 140, 130, 120, 110, 100 |
| Azure SQL MI (polityka SQL Server 2022) | 150 | 160 – 100 |
W Azure SQL MI z polityką Always-up-to-date lub SQL Server 2025 domyślny CL to 170. Szczegóły: MS Q&A, Azure SQL Blog.
Narzędzia pomocnicze:
Query Store — workflow upgrade CL, Query Tuning Assistant, Query Store hints.