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 model ma niższy. Wtedy dziedziczą CL z model.
  • 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, msdb i Resource DB zawsze dostają domyślny CL nowej wersji. master zachowuje 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_HOTFIXES albo hintu ENABLE_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

SilnikDomyślny CLWspierane wartości CL
SQL Server 2025170170, 160, 150, 140, 130, 120, 110, 100
SQL Server 2022160160, 150, 140, 130, 120, 110, 100
SQL Server 2019150150, 140, 130, 120, 110, 100
Azure SQL MI (polityka SQL Server 2022)150160 – 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.


Dariusz Brejnak

Od prawie trzydziestu lat jest pasjonatem informatyki, a zwłaszcza dziedzin dotyczących baz danych, hurtowni danych oraz ogólnie rozumianej tematyki BI. Jego druga pasja to fotografia http://dariuszbrejnak.pl