| Termin | Definicja |
|---|---|
| nieefektywne filtrowanie kontaktów | Nieefektywne filtrowanie kontaktów to zapytania obejmujące zbyt szeroki zakres bazy, spowalniające pracę systemu. Na czym polega nieefektywne filtrowanie kontaktówNieefektywne filtrowanie kontaktów występuje wtedy, gdy zapytanie wyszukujące osoby, firmy, adresy poczty elektronicznej lub numery telefonów obejmuje większy zakres danych, niż jest potrzebny do wykonania konkretnej operacji. System może wtedy odczytywać dużą część tabeli, a dopiero później odrzucać rekordy niespełniające warunku. Przy niewielkiej liczbie kontaktów taki sposób działania bywa niewidoczny, lecz wraz ze wzrostem bazy rośnie czas odpowiedzi, obciążenie procesora, zużycie pamięci oraz liczba operacji odczytu danych. Problem nie oznacza automatycznie uszkodzenia bazy. Częstą przyczyną jest zapytanie bez warunku ograniczającego zbiór wyników, filtrowanie po kolumnie bez odpowiedniego indeksu albo zastosowanie funkcji do pola, które powinno być wyszukiwane bezpośrednio. Przykładem jest wyszukiwanie po fragmencie tekstu z początkowym symbolem wieloznacznym, takim jak Zakres danych, warunki i plan wykonania zapytaniaPodstawowym sposobem ograniczenia kosztu filtrowania jest określenie możliwie precyzyjnych warunków. Zamiast pobierać wszystkie kontakty i filtrować je w kodzie aplikacji, należy przekazać kryteria do warstwy odpowiedzialnej za wyszukiwanie danych. Warunek może ograniczać na przykład status kontaktu, przypisaną grupę, zakres dat albo identyfikator użytkownika. Ważne jest także pobieranie tylko potrzebnych kolumn. Zapytanie zwracające imię, numer telefonu i adres poczty nie powinno odczytywać całego rekordu zawierającego dodatkowe pola, historię zmian lub rozbudowane opisy. O tym, czy filtrowanie przebiega sprawnie, decyduje plan wykonania zapytania. Plan pokazuje, w jaki sposób silnik zamierza odnaleźć rekordy: może wykorzystać indeks, wykonać skanowanie całej tabeli, połączyć kilka zbiorów danych albo posortować wynik przed jego zwróceniem. Skanowanie całej tabeli nie jest zawsze błędem. Może być uzasadnione, gdy tabela jest mała lub gdy zapytanie zwraca znaczną część jej zawartości. Staje się sygnałem do analizy wtedy, gdy dotyczy dużej tabeli, zwraca niewiele rekordów i powtarza się przy wielu żądaniach użytkowników. Ocena powinna uwzględniać rzeczywistą liczbę rekordów, rozkład wartości oraz częstotliwość wykonywania operacji. Indeksy, wyszukiwanie tekstowe i paginacja wynikówIndeks może przyspieszyć wyszukiwanie po często używanej kolumnie, lecz nie jest uniwersalnym rozwiązaniem. Dobrze dobrany indeks powinien odpowiadać warunkom występującym w zapytaniach. Jeżeli filtrowanie obejmuje kilka pól, znaczenie ma kolejność kolumn w indeksie oraz selektywność warunków, czyli zdolność do ograniczenia liczby pasujących rekordów. Nadmiar indeksów zwiększa natomiast koszt dodawania, modyfikowania i usuwania kontaktów, ponieważ każda zmiana może wymagać aktualizacji wielu struktur pomocniczych. Wyszukiwanie tekstu wymaga rozróżnienia między dopasowaniem od początku wartości, dopasowaniem fragmentu oraz pełnotekstowym wyszukiwaniem treści. Proste porównanie może działać poprawnie dla dokładnego adresu poczty lub numeru kontaktu, ale wyszukiwanie dowolnego fragmentu nazwy może wymagać innego mechanizmu. Nie należy również zwracać całej listy kontaktów jednorazowo. Paginacja ogranicza liczbę rekordów przekazywanych w jednej odpowiedzi, zmniejsza zużycie pamięci i skraca czas renderowania interfejsu. Stabilne sortowanie jest przy tym konieczne, aby kolejne strony nie zmieniały zawartości w sposób pozorny, gdy rekordy mają takie same wartości sortowania. Rozpoznanie przyczyny w działającej aplikacjiAnalizę nieefektywnego filtrowania rozpoczyna się od ustalenia, czy opóźnienie powstaje podczas wykonywania zapytania, przesyłania wyników, czy dopiero w aplikacji wyświetlającej kontakty. Pomocne są czasy wykonania, liczba zwróconych rekordów, liczba odczytanych rekordów oraz częstotliwość wywołań. Warto sprawdzić, czy formularz wyszukiwania wysyła żądanie przy każdym wpisanym znaku, czy stosuje opóźnienie przed kolejnym zapytaniem i czy ponownie pobiera dane po zmianie filtra. Wielokrotne wywołanie tego samego wyszukiwania może przeciążyć system nawet wtedy, gdy pojedyncze zapytanie nie jest bardzo kosztowne. Podczas diagnostyki należy porównać zapytanie wykonywane przez aplikację z warunkami opisanymi w interfejsie. Zdarza się, że użytkownik wybiera grupę lub zakres dat, lecz aplikacja nie przekazuje tego parametru do zapytania. Innym przypadkiem jest filtrowanie dopiero po pobraniu danych do pamięci programu. Sprawdza się także typy pól, wartości puste, sposób sortowania i limit wyników. Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów, komputerów PC oraz ich podzespołów, a w ramach diagnostyki można ustalić, czy opóźnienia wynikają z konfiguracji komputera, działania aplikacji czy nieprawidłowego przepływu danych. |