Duże instalacje Comarch ERP Altum w sieciach handlowych z setkami sklepów i milionami transakcji wymagają systematycznej optymalizacji bazy SQL Server. Zaniedbana baza traci wydajność przez lata eksploatacji, co objawia się coraz wolniejszymi operacjami i dłuższymi czasami generowania raportów.
Identyfikacja wąskich gardeł wydajnościowych
Diagnostykę wydajności Altum/SQL Server rozpoczyna się od Dynamic Management Views: sys.dm_exec_query_stats (najkosztowniejsze zapytania), sys.dm_db_index_usage_stats (najczęściej używane i brakujące indeksy), sys.dm_os_wait_stats (typy oczekiwań wskazujące na bottleneck – CPU, I/O, sieć, blokady). Na podstawie DMV generuje się listę TOP 10 zapytań wymagających optymalizacji i TOP 10 brakujących indeksów.
Indeksy – przebudowa i reorganizacja
Plan utrzymania indeksów w bazie Altum: cotygodniowa reorganizacja indeksów o fragmentacji 5–30% (ALTER INDEX ... REORGANIZE) i przebudowa indeksów o fragmentacji powyżej 30% (ALTER INDEX ... REBUILD). Przebudowę indeksów SQL Server 2016+ wykonuje się ONLINE, bez blokowania tabel – bezpieczna operacja w godzinach pracy. Starsze wersje SQL Server wymagają trybu OFFLINE, co blokuje tabele – operacja musi być zaplanowana poza godzinami szczytu.
Parametry pamięci SQL Server
SQL Server domyślnie może zajmować całą dostępną RAM serwera. W środowiskach Altum z aplikacją serwera i SQL Server na tym samym hoście należy ustawić Max Server Memory (sp_configure) na wartość zostawiającą co najmniej 10–15% RAM dla systemu operacyjnego i serwera aplikacji. Dla dedykowanego serwera SQL bez innych usług Max Server Memory może być ustawione na 85–90% dostępnej RAM.
Partycjonowanie tabel z dużą liczbą rekordów
Tabele transakcyjne Altum (faktury, dokumenty magazynowe, logi zdarzeń) mogą zawierać dziesiątki milionów rekordów po kilku latach eksploatacji. SQL Server Table Partitioning dzieli takie tabele na partycje według zakresu dat (np. rok), co radykalnie przyspiesza zapytania filtrujące po datach. Partycjonowanie jest funkcją Enterprise Edition SQL Server – przy licencji Standard wydajność można poprawić przez archiwizację starych danych do tabel historycznych.
Statystyki i plany zapytań
Nieaktualne statystyki prowadzą do błędnych planów zapytań SQL Server. Automatyczna aktualizacja statystyk (AUTO_UPDATE_STATISTICS) jest domyślnie włączona, ale przy bardzo dużych tabelach może nie nadążać za zmianami danych. Ręczna aktualizacja statystyk (UPDATE STATISTICS NazwaBazyAltum WITH FULLSCAN) powinna być zaplanowana jako nocne zadanie SQL Server Agent, szczególnie po dużych operacjach importu lub masowych korektach danych.