| Termin | Definicja |
|---|---|
| Event Notifications | Event Notifications to mechanizm SQL Server wysyłający asynchroniczne powiadomienia o zdarzeniach serwera do kolejki Service Broker. Event Notifications – czym jest mechanizm powiadomieńEvent Notifications to rozwiązanie dostępne w SQL Server, którego zadaniem jest przekazywanie informacji o wybranych zdarzeniach zachodzących w instancji lub bazie danych. Informacja nie jest przekazywana wprost do aplikacji wykonującej daną operację, lecz trafia do kolejki obsługiwanej przez Service Broker. Dzięki temu zdarzenie może zostać zarejestrowane i przetworzone asynchronicznie, bez konieczności zatrzymywania podstawowego działania systemu na czas wykonania dodatkowych czynności. W praktyce można potraktować Event Notifications jako warstwę obserwacyjną SQL Server. Mechanizm reaguje na zdarzenia zdefiniowane w systemie zdarzeń serwera, a następnie tworzy komunikat zawierający informacje o tym, co się wydarzyło, gdzie wystąpiło i kiedy zostało wykryte. Komunikat jest kierowany do wskazanego celu Service Broker. Odbiorca może później odczytać go z kolejki i wykonać własną logikę, na przykład zapisać dane do tabeli audytowej, uruchomić analizę, przekazać zdarzenie do narzędzia monitorującego albo przygotować raport dla administratora. Istotne jest rozróżnienie między samym zdarzeniem a powiadomieniem. Zdarzenie opisuje fakt wystąpienia określonej operacji lub zmiany stanu. Event Notification definiuje natomiast, które zdarzenia mają być przechwytywane, jakie warunki muszą zostać spełnione oraz do jakiej usługi Service Broker należy dostarczyć komunikat. Taki podział pozwala oddzielić rejestrowanie aktywności od późniejszego przetwarzania i ograniczyć wpływ monitoringu na podstawowe obciążenie instancji. powiadomienia zdarzeń w SQL Server – kontekst techniczny i porównaniaMechanizm działa w modelu deklaratywnym. Najpierw wybiera się typy zdarzeń, które mają być obserwowane, a następnie definiuje się obiekt Event Notification powiązany z usługą Service Broker. W czasie wystąpienia zdarzenia SQL Server generuje komunikat XML opisujący zdarzenie i przekazuje go do skonfigurowanego celu. Odczyt komunikatów odbywa się niezależnie od chwili, w której pierwotne zdarzenie zostało wywołane. Pozwala to budować procesy działające według własnego harmonogramu lub reagujące na pojawienie się danych w kolejce. W porównaniu z wyzwalaczem DDL Event Notifications nie wykonują kodu bezpośrednio w ramach tej samej operacji. Wyzwalacz może zmienić wynik transakcji, zablokować wykonanie albo wydłużyć czas realizacji instrukcji. Powiadomienie zdarzenia jest przeznaczone przede wszystkim do obserwacji i dalszej obsługi. Z tego powodu dobrze sprawdza się tam, gdzie nie jest potrzebna natychmiastowa modyfikacja wykonywanej operacji, lecz ważne jest odnotowanie faktu jej wystąpienia. Różnica względem SQL Server Agent polega na innym punkcie rozpoczęcia działania. Agent uruchamia zadania według harmonogramu albo w reakcji na określone warunki monitorowane przez system zadań. Event Notifications są związane bezpośrednio ze zdarzeniami generowanymi przez SQL Server, a ich komunikaty mogą być dalej obsługiwane przez kolejkę. Z kolei Extended Events są szeroką platformą diagnostyczną, przydatną do szczegółowego śledzenia wydajności, zapytań i aktywności. Event Notifications mają węższy zakres, lecz ich zaletą jest wygodna integracja z komunikacją Service Broker i procesami przetwarzania asynchronicznego. Warto również odróżnić je od SQL Server Audit. Audyt koncentruje się na kontrolowanym zapisie informacji dotyczących dostępu, zmian i działań wymagających rozliczalności. Event Notifications mogą służyć podobnym celom pomocniczo, ale nie powinny być automatycznie traktowane jako pełny system audytowy. Wybór rozwiązania zależy od tego, czy najważniejsza jest diagnostyka, kontrola dostępu, reakcja na zmianę konfiguracji, czy swobodne przekazanie zdarzeń do własnego procesu. SQL Server Event Notifications – typowe problemy konfiguracyjneJednym z częstszych problemów jest utworzenie samego powiadomienia bez przygotowania całej infrastruktury Service Broker. Do poprawnego działania potrzebna jest usługa, kontrakt, typ komunikatu, kolejka oraz powiązanie kolejki z usługą. Brak któregoś z tych elementów może spowodować, że obiekt zostanie przyjęty przez SQL Server, ale wiadomości nie będą odbierane w oczekiwany sposób. Przed analizą kodu warto więc sprawdzić kompletną ścieżkę: źródło zdarzenia, obiekt Event Notification, trasę komunikatu, kolejkę i proces odbierający. Problemy mogą wynikać także z zakresu zdarzeń. Niektóre zdarzenia dotyczą poziomu serwera, inne bazy danych, a jeszcze inne określonych obiektów lub grup zdarzeń. Zbyt szeroki zakres może powodować dużą liczbę komunikatów, utrudniać analizę i zwiększać rozmiar kolejki. Zbyt wąski zakres prowadzi do pozornego braku działania, ponieważ interesujące zdarzenie nie zostanie objęte definicją. Szczególnej uwagi wymagają filtry, nazwy grup zdarzeń oraz różnice między zdarzeniami DDL i zdarzeniami związanymi ze stanem serwera. Ważnym obszarem diagnostyki jest format komunikatu. Informacje o zdarzeniu są przekazywane w strukturze XML, dlatego odbiorca powinien prawidłowo odczytywać nazwy elementów, wartości atrybutów i dane czasowe. Błąd w parserze może sprawiać wrażenie, że powiadomienie nie działa, mimo że komunikaty znajdują się w kolejce. Przy analizie należy sprawdzić, czy wiadomość została dostarczona, czy została odebrana przez proces oraz czy nie wystąpił błąd podczas interpretacji zawartości. Do typowych przyczyn nieprawidłowego działania należą również wyłączony Service Broker, brak uprawnień, błędna nazwa usługi, nieobsługiwana trasa komunikatu, zatrzymany proces odbierający oraz narastanie komunikatów w kolejce. Należy kontrolować stan kolejki, liczbę oczekujących wiadomości i ewentualne komunikaty o błędach. W systemach testowych można łatwiej odtworzyć zdarzenie i porównać je z zawartością kolejki. W systemach działających produkcyjnie przydatne jest ograniczenie zakresu monitoringu oraz określenie sposobu obsługi wiadomości, które nie mogą zostać przetworzone za pierwszym razem. Service Broker i Event Notifications – praktyczne wskazówki wdrożeniowePrzed wdrożeniem warto dokładnie określić cel monitoringu. Inaczej projektuje się powiadomienia dotyczące zmian schematu, inaczej obserwację błędów, a jeszcze inaczej kontrolę zmian konfiguracji. Każdy przypadek powinien mieć zdefiniowanego odbiorcę, przewidywany sposób reakcji oraz zasady przechowywania komunikatów. Samo gromadzenie zdarzeń bez planu ich przeglądania może szybko doprowadzić do powstania nieczytelnego zbioru danych. Zakres Event Notifications powinien być możliwie precyzyjny. Lepiej wskazać kilka potrzebnych grup zdarzeń niż przechwytywać wszystkie dostępne informacje. Pomaga to ograniczyć obciążenie, zmniejszyć liczbę komunikatów i ułatwić późniejsze wyszukiwanie. Jeśli konieczne jest obserwowanie wielu zdarzeń, można rozdzielić je na kilka kolejek lub usług według celu, poziomu ważności albo rodzaju operacji. Taki podział upraszcza obsługę awarii i pozwala nadać różne zasady retencji poszczególnym kategoriom komunikatów. Proces odbierający powinien być przygotowany na powtórne przetworzenie wiadomości. W komunikacji asynchronicznej może wystąpić ponowienie operacji, chwilowa niedostępność odbiorcy albo błąd zapisu danych. Przydatne jest więc projektowanie obsługi w sposób idempotentny, czyli tak, aby ponowne przetworzenie tego samego komunikatu nie powodowało niepożądanych duplikatów. Warto także zaplanować kolejkę błędów, rejestrowanie przyczyn odrzucenia oraz możliwość ręcznego wznowienia obsługi. Testy powinny obejmować nie tylko poprawne wystąpienie zdarzenia, lecz również sytuacje graniczne. Należy sprawdzić, co dzieje się po zatrzymaniu odbiorcy, po ponownym uruchomieniu usługi, przy większej liczbie komunikatów oraz po zmianie uprawnień. Dobrą praktyką jest udokumentowanie wszystkich obiektów Service Broker i zależności między nimi. Bez takiej dokumentacji późniejsza konserwacja może wymagać czasochłonnego odtwarzania konfiguracji na podstawie samych nazw obiektów. obsługa Event Notifications – kiedy zgłosić się do serwisuWsparcie techniczne może być potrzebne wtedy, gdy zdarzenia są widoczne w systemie, ale nie pojawiają się w kolejce, gdy kolejka rośnie bez końca albo gdy odbiorca przetwarza komunikaty z błędną treścią. Zgłoszenie warto rozważyć także po zmianie konfiguracji SQL Server, migracji bazy danych, odtworzeniu kopii zapasowej lub przeniesieniu środowiska na inny komputer. W takich sytuacjach problem może dotyczyć nie samej definicji powiadomienia, lecz zależności, uprawnień albo stanu usług pomocniczych. Przed przekazaniem urządzenia lub środowiska do analizy przydatne jest przygotowanie informacji o momencie pojawienia się problemu, rodzaju obserwowanego zdarzenia, nazwie bazy danych oraz symptomach widocznych dla użytkownika. Nie należy usuwać obiektów ani czyścić kolejki wyłącznie po to, aby ukryć objawy, ponieważ może to utrudnić ustalenie przyczyny. W przypadku komputera, na którym wykonywane są zadania administracyjne, warto również opisać ostatnie aktualizacje, zmiany kont i nietypowe komunikaty wyświetlane podczas uruchamiania narzędzi. Warszawskie Pogotowie Komputerowe 24/7 zajmuje się także praktyczną diagnostyką laptopa, gdy problemy z narzędziami administracyjnymi wynikają z niestabilnego działania systemu, uszkodzeń nośnika, przegrzewania albo błędów uruchamiania. W razie potrzeby można przekazać opis objawów i informacje o konfiguracji, aby ułatwić dobranie dalszego sposobu sprawdzenia urządzenia. Najważniejsze jest rozdzielenie problemu aplikacyjnego od problemu sprzętowego. Jeżeli SQL Server działa poprawnie, lecz komputer traci stabilność, zawiesza się lub nie zapisuje danych, przyczyną może być system operacyjny, pamięć, dysk, zasilanie albo sterownik. Jeżeli natomiast urządzenie działa prawidłowo, a komunikaty nie przechodzą przez kolejkę, należy skupić uwagę na konfiguracji Event Notifications, Service Broker, uprawnieniach i procesie odbierającym. Takie rozgraniczenie skraca diagnostykę i pozwala dobrać właściwe działania naprawcze. |