Zestawienie działające natychmiast na bazie testowej potrafi liczyć się kwadrans na produkcyjnej — i przy okazji spowolnić pracę wszystkich.
Różnica bierze się z ilości danych i z tego, że baza produkcyjna obsługuje w tym samym czasie wystawianie dokumentów. Raport nie działa tam w próżni.
Skąd bierze się wolny raport
- brak indeksu na kolumnach użytych do filtrowania,
- przetwarzanie całej historii, gdy potrzebny jest jeden miesiąc,
- obliczenia wykonywane wielokrotnie zamiast raz,
- łączenie wielu dużych zbiorów bez ograniczenia zakresu.
Do tego dochodzi przypadek szczególny: raport szybki przy jednym użytkowniku i wolny, gdy kilka osób uruchomi go naraz. Wtedy problemem nie jest samo zapytanie, tylko liczba jednoczesnych odwołań.
Indeksy
Indeks przyspiesza odczyt, ale spowalnia zapis i zajmuje miejsce. Dokładanie ich bez umiaru na bazie, w której cały dzień powstają dokumenty, potrafi pogorszyć pracę systemu. Zmiany w strukturze bazy programu handlowego trzeba dodatkowo uzgodnić z dostawcą oprogramowania — samodzielna ingerencja bywa powodem odmowy wsparcia.
Wyliczanie cykliczne
Zestawienia obejmujące długie okresy warto liczyć raz na dobę i zapisywać wynik. Otwarcie raportu odczytuje wtedy gotowe dane zamiast liczyć wszystko od nowa.
Cena jest znana z góry: dane są aktualne na moment wyliczenia, nie na teraz. Dlatego wynik powinien nieść datę i godzinę, z której pochodzi. Przy zestawieniach zarządczych to zwykle wystarczy; przy stanach magazynowych w trakcie dnia — nie.
Ograniczenie zakresu
Domyślny zakres powinien być wąski, z możliwością rozszerzenia. Raport otwierający się domyślnie na całej historii jest wolny dla każdego, kto potrzebował tylko ostatniego tygodnia.
Ta sama zasada dotyczy kolumn. Zestawienie pobierające wszystko, co jest w tabeli, przenosi przez sieć dane, których nikt nie ogląda.
Wpływ na innych
Ciężki raport uruchomiony w szczycie pracy spowalnia wystawianie dokumentów. Przy zestawieniach analitycznych warto rozważyć osobną kopię bazy do odczytu.
Kopia rozwiązuje też inny problem: pozwala pracować na danych bez ryzyka dla systemu produkcyjnego. To wygodna podstawa pod eksport danych do arkusza i narzędzi analitycznych oraz pod stałe połączenia narzędzi zewnętrznych.
Mierzyć, nie zgadywać
Zanim zacznie się optymalizować, warto sprawdzić, który fragment naprawdę zajmuje czas. Zwykle jest to jedno miejsce, a nie całość.
Pomiar warto powtórzyć po zmianie i zapisać oba wyniki. Bez tego trudno stwierdzić, czy poprawka cokolwiek dała, czy raport przyspieszył, bo akurat był spokojniejszy dzień.
Kiedy się to nie opłaca
Raport uruchamiany raz w miesiącu może liczyć się długo i nikomu to nie przeszkadza. Optymalizacja ma sens przy zestawieniach otwieranych codziennie albo takich, które przeszkadzają innym. W pozostałych przypadkach wystarczy przenieść wyliczenie na godziny poza pracą. Zasady budowy samych zapytań opisuje tekst o raportach SQL bezpośrednio z bazy systemu.