Proč se tedy někdy stává, že uživatelé pláčí nad odezvami Heliosu?
1. Mód napájení
Schéma napájení musí být všude nastavené na „Vysoký výkon“. Mód „Rovnováha“, který je defaultní dokonce i na serverech, šetří energii tím, že snižuje frekvenci procesorů a vypíná procesorová jádra. Tím ale dramaticky snižuje výkon. Na databázový server je tedy naprosto nevhodný. Schéma se kontroluje v Ovládacích panelech. Schéma je nutné zkontrolovat:
- na fyzickém serveru
- v BIOSu fyzického serveru
- v nastavení virtualizace
- na virtuálním serveru
- na PC/NTB koncových uživatelů
Osmiprocesorový server v defaultním nastavení (schéma napájení rovnováha)
Osmiprocesorový server v nastavení "Vysoký výkon"
2. Čekající aktualizace
Aktualizace systému windows dokáže počítač nepříjemně zpomalit. A to i v případě, že pouze "čeká" na instalaci a vytížení procesoru je 5%. V těchto případech je potřeba aktualizaci nainstalovat a počítač restartovat.
Je nutné zkontrolovat/reatartovat:
- Databázový server
- Aplikační server
- PC/NTB koncových uživatelů
3. LPIM
Zamykání stránek v paměti. Pokud má Windows nedostatek paměti, tak začne "čistit" cache jednotlivých programů. To se bohužel týká i procedurální cache SQL serveru. Následkem této akce je SQL server nucen kompilovat smazané exekuční plány a odezvy se Heliosu mohou protáhnout o jednotky až nižší desítky sec.
Náprava
Náprava spočívá v třech krocích.
3.1 Nejprve omezíme paměť SQL serveru, aby zbylo dost pro operační systém
- V SQL Server Management Studiu klikneme pravým talčítkem na server a vybereme Properties
- V levém seznamu vybereme položku Memory
- Hodnotu Max Server Memory nastavíme tak, aby zbylo dost paměti pro operační systém (například Nainstalovaná paměť - 2 GB). Pro systémy s dostatkem RAM, na kterých neběží jen MS SQL je lepší pro OS ponechat 4 nebo 8 GB.
3.2 Zjištění, pod jakým účtem běží SQL Server
- Spustíme SQL Server Configuration Manager
- Zobrazíme Properties SQL serveru
- Přejdeme na kartu "Log On"
- Zkopírujeme si "Account name" do schránky
3.3 Zamknutí stránek SQL serveru v paměti
- Spustíme na serveru příkaz: gpedit.msc
- V levém panelu přejdeme na:
Local Computer Policy
- Computer Configuration
- Windows Settings
- Security Settings
- Local Policies
- User Rights Assigment - V pravém panelu rozklikneme:
- Lock pages in memory
- Klikneme na tlačítko Add User or Group
- Vložíme ze schránky účet, pod kterým běží SQL a zkontrolujeme/změníme "Location", podle toho, zda jde o lokální, nebo doménový účet
- Vše potvrdíme OK
4. Nastavení virtualizace (VMWARE)
Diskový řadič
- pro optimální funkci se doporučuje nastavit více diskových řadičů (max 4), což zvýší propustnost systému
- řadiče by měly být SCSI CONTROLLER - VMWARE PARTITUAL (ideální pro SQL, nízké nároky na CPU)
- počet CPU by neměl být příliš nízký, ale ani příliš vysoký. Příliš vysoký počet CPU zvyšuje nároky na scheduler a tím paradoxně zhoršuje odezvy.
- počet virtuálních CPU na socket (NUMA mód) nesmí být vyšší, než počet jader fyzického CPU (jeden socket). Pokud jsou virtuální jádra namapována na fyzická jádra různých socketů, tak dochází k extrémní degradaci výkonu.
- Enable CPU hot add - NEZAŠKRTÁVAT
- Reserve all guest memory - ZAŠKRTNOUT. Tím se zajistí, že paměť serveru nebude ve skutečnosti swap hostu.
5. Nastavení virtualizace (HYPER-V)
V nastavení HYPER-V doporučujeme disablovat "NUMA Spanning"
6. Údržba databáze
Pro SQL server je nezbytné provádět pravidelnou údržbu databáze. Správně nastavená údržba databáze zajišťuje
- defragmentaci indexů
- aktualizaci statistik
Script pro vytvoření údržbového jobu je zde:
Job provádí údržbu všech databází na serveru s výjimkou systémových databází. Job pracuje v noci a tak se jeho vliv projeví až druhý den ráno.
Po dokončení scriptu ukončete Helios. Pokud se zobrazí chybová hláška, tak jí můžete ingorovat
7. LEGACY_CARDINALITY_ESTIMATION
Nelekejte se složitě znějícího nadpisu

USE NastavSpravnouDatabazi --Nejprve vybrat provozni DB
ALTER DATABASE
SCOPED CONFIGURATION
SET LEGACY_CARDINALITY_ESTIMATION = ON;
Jestliže máte SQL server 2014, tak tato možnost není k dispozici. V tom případě doporučujeme přepnout Compatibility level databáze z 120 na 110. Postup a důvody jsou zde:
viewtopic.php?f=25&t=628
Jestliže existuje více instancí Heliosu, je nutné upravit všechny soubory Helios.ini. To znamená všechny, které mají uživatelé na svých lokálních NTB/PC a všechny, které jsou na serverech.
Na starších SQL serverech 2012 není tento bod potřeba.
8. Externí řešení
Řešení třetích stran, externí triggery apod. mohou ovlivnit odezvy celého serveru.
9. Nastavení aplikace - počítané sloupce
Pokud se v sestavách či přehledech používají počítané sloupce, tak se doba načtení může mnohonásobně prodloužit. Pak je vhodné vyzkoušet rychlost sestavy bez počítaných sloupců, popřípadě s jiným řazením.
10. Nastavení aplikace - Omezené načítání dat
Pokud sestava či přehled vrací příliš mnoho řádků, může být prodleva způsobena čekáním na předání dat ze serveru na klienta. Server může být seberychlejší, ale předání 5-ti milionů řádku z účetního deníku zkrátka nějakou dobu trvá. Pak je vhodné nastavit "Omezené načítání dat" a znovu rychlost sestavy otestovat.
11. Nastavení aplikace - Špinavé čtení
V provozech s vysokým zatížením, kdy dochází k masivnímu zápisu a změnám v datech může být hlavním důvodem pomalejších odezev blokování procesů. Pokud některý proces mění data, ostatní procesy/uživatelé musí čekat až na dokončení. Zapnutím špinavého čtení se nastaví přehled/sestava do stavu, kdy nemusí čekat na dokončení změn a čte data tak, jak jsou aktuálně v systému.
12. Další nastavení
Spusťe příkaz:
- Kód: Vybrat vše
EXEC sp_configure
Parametry, kterými můžete ovlivnit odezvy SQL:
- Autoshrink
Doporučujeme vypnout funkcionalitu "Autoshrink" pomocí příkazu:- Kód: Vybrat vše
ALTER DATABASE Helios001 SET AUTO_SHRINK OFF
, kde samozřejmě namísto "Helios001" doplníte provozní databázi. - Optimize for Ad-Hoc workload
Doporučujeme nastavit na TRUE pomocí příkazu:- Kód: Vybrat vše
EXEC sp_configure 'optimize for ad hoc workloads', 1
RECONFIGURE
- max degree of parallelism
Doporučujeme omezit počet paralelních vláken pomocí příkazu:- Kód: Vybrat vše
EXEC sp_configure 'max degree of parallelism', X
RECONFIGURE
, kde "X" nahradíme za polovinu počtu procesorů v jednom Node, maximálně však na hodnotu 8.
Takže pokud mám v jednom node 8 procesorů, bude příkaz takto:- Kód: Vybrat vše
EXEC sp_configure 'max degree of parallelism', 4
RECONFIGURE
- cost threshold for parallelism
Doporučujeme omezit použití paralelismus pomocí příkazu:- Kód: Vybrat vše
EXEC sp_configure 'cost threshold for parallelism', X
RECONFIGURE
, kde X nastavíme na 50 a postupně zvyšujeme třeba na 100, 200, 500, 1000, 2000 ...
13. Schvalování dokladů
Využíváte schvalování dokladů? Máte nainstalovaný plugin? Tak proveďte aktualizaci na poslední verzi. Funkce pro tento plugin byly v dubnu 2020 optimalizované a to dost podstatně.
14. SQL 2019
V MSSQL 2019 zavedl Microsoft mnoho novinek a jednou z nich je "Inlinning skalárních UDF funkcí". Což je celkem geniální, protože to znamená, že namísto, aby se funkce vypočítávala třeba milionkrát, tak se vypočte třeba jen jednou a dopady na výkon mohou být celkem zásadní. Bohužel se zdá, že tato funkcionaita má své mouchy a v některých případech nedojde k dramatickému zrychlení, ale naopak k velkému poklesu rychlosti.
V tom případě můžete inlining vypnout příkazem spuštěným v provozní databázi:
ALTER DATABASE SCOPED CONFIGURATION SET TSQL_SCALAR_UDF_INLINING = OFF
15. Nic z bodů výše nepomohlo
Pak existují dvě možnosti
- Posílit HW
- Objednat optimalizaci
16. Hurá - pomohlo to
Pokud jste realizovali některý z bodů výše a situace se vyřešila, tak gratulujeme a budeme rádi za zpětnou vazbu (co konkrétně pomohlo) --> můžete zadat reakci na této stránce.