Zhoršené výkonnostní parametry provozu na MS SQL 2016+

PříspěvekNapsal: 23.10.2017 15:03
od jiri.dolezal
Při provozu HELIOS Orange na MS SQL Server 2016 a vyšším zaznamenáváme zhoršení výkonnostních parametrů, zejm. v porovnání (po migraci) s nižšími verzemi MS SQL.

V případě výskytu takového stavu doporučujeme jako první krok provést a ověřit dopad změny konfigurační konstanty databáze Legacy Cardinality Estimation na ON.

Tuto konfiguraci lze změnit skriptem:
POZOR – lze spouštět pouze na MS SQL 2016 a vyšším! Jinak skript selže.

Kód: Vybrat vše
-- zjisteni stavu zapnuti predchoziho cardinality estimatoru; vraci 0=vypnuty, 1=zapnuty

SELECT [value] 
FROM sys.database_scoped_configurations 
WHERE [name] = 'LEGACY_CARDINALITY_ESTIMATION';

-- zmena stavu zapnuti predchoziho cardinality estimatoru; ON=zapnout, OFF=vypnout

ALTER DATABASE SCOPED CONFIGURATION 
       SET LEGACY_CARDINALITY_ESTIMATION = ON;


Změnu lze provést také v SQL Server Management Studiu, ve vlastnostech (Properties) databáze:
LegacyCE.jpg
SSMS Nastaveni Legacy Cardinality Estimation
LegacyCE.jpg (32.58 KiB) Zobrazeno 7737 krát


VYSVĚTLENÍ

Microsoft ve verzi MS SQL 2014 a implementoval novou verzi tzv. Cardinality Estimatoru, komponentu, která se stará o odhad počtu řádků, které budou zpracovávány v rámci dotazu. Odhad počtu řádků má zásadní vliv na podobu tzv. exekučního plánu dotazu. Nová verze Cardinality Estimatoru neposkytuje v prostředí HELIOS Orange v mnoha případech nejvhodnější výsledky. Tuto konstelaci MS připouští a jako alternativu řešení navrhuje zapojení předchozí verze této komponenty (https://docs.microsoft.com/en-us/sql/relational-databases/performance/cardinality-estimation-sql-server).

Zhoršené výkonnostní parametry provozu na MS SQL 2014

PříspěvekNapsal: 13.07.2018 06:46
od jiri.dolezal
Na MS SQL Server 2014, kde se můžete setkat se stejným syndromem zhoršení výkonnostních parametrů (díku novém Cardinality Estimatoru, který od této verze MS zavedl). Zde ovšem není možné zapnout původní (Legacy) Cardinality Estimator na úrovni databáze (výše zmíněný postup), ale pouze na úrovni serveru, pomocí tzv. Trace Flagu s číslem 9481

V SQL Server Configuration Manageru přidáte Trace Flag 9481 do starovacích parametrů služby SQL Serveru dle následujícího obrázku:
TF9481.gif
Nastavení Trace Flag 9481
TF9481.gif (28.18 KiB) Zobrazeno 7005 krát

Službu je třeba následně restartovat!

Do doby případného restartu lze Trace Flag vynutit pomocí skriptu:
Kód: Vybrat vše
DBCC TRACEON (9481,-1)