rpc_completed to zdarzenie Extended Events rejestrujące zakończenie wykonania zdalnego wywołania procedury.
Rola zdarzenia rpc_completed w SQL Server Extended Events
rpc_completed jest zdarzeniem dostępnym w mechanizmie Extended Events programu Microsoft SQL Server. Rejestruje zakończenie wykonania zdalnego wywołania procedury, czyli żądania przesłanego do silnika przez interfejs klient-serwer. W praktyce chodzi najczęściej o wywołanie procedury składowanej wysłane przez aplikację korzystającą z protokołu TDS, sterownika ODBC, OLE DB, ADO.NET albo innego dostawcy zgodnego z SQL Server.
Nazwa „zdalne” nie oznacza koniecznie wywołania procedury na innym serwerze SQL. W tym kontekście zdalne wywołanie jest typem komunikatu wykonywanego przez klienta względem serwera. Zdarzenie dotyczy zakończonego żądania RPC, a nie każdego polecenia SQL. Dla partii instrukcji wysłanej jako tekst SQL stosuje się przede wszystkim zdarzenie sql_batch_completed, natomiast rpc_completed pozwala obserwować wywołania procedur przesyłane jako odrębne żądania.
Jakie informacje można odczytać z rpc_completed
W danych zdarzenia można analizować między innymi czas trwania operacji, zużycie procesora, liczbę odczytów logicznych, liczbę zapisów oraz liczbę zwróconych wierszy. W SQL Server wartości czasu, takie jak duration i cpu_time, są raportowane w mikrosekundach. Odczyty logiczne odnoszą się do stron danych odczytanych z pamięci podręcznej, a nie bezpośrednio do liczby fizycznych operacji dyskowych. Jedna strona danych SQL Server ma rozmiar 8 KiB.
Podczas interpretacji trzeba uwzględniać identyfikację bazy danych, nazwę obiektu, nazwę hosta klienta, nazwę aplikacji, konto użytkownika oraz tekst lub opis wywołania, jeżeli wybrane pola i akcje sesji je udostępniają. Przydatne mogą być również akcje takie jak sql_text, session_id, client_hostname i client_app_name. Akcja nie jest tym samym co pole zdarzenia: akcje są dołączanymi informacjami zbieranymi dla wystąpienia zdarzenia i powinny być dodawane tylko wtedy, gdy są potrzebne.
Zdarzenie może zawierać numer błędu lub informację o rezultacie wykonania, dlatego nie należy ograniczać analizy wyłącznie do czasu trwania. Procedura może zakończyć się szybko, ale zwrócić błąd, wykonać nieoczekiwaną liczbę modyfikacji albo wygenerować duży ruch odczytów logicznych. Z drugiej strony długi czas trwania przy niewielkim cpu_time może wskazywać na oczekiwanie, na przykład na blokadę, opóźnienie wejścia-wyjścia lub inne oczekiwanie zasobowe.
Konfiguracja sesji i interpretacja wyników
Sesję Extended Events tworzy się przez wskazanie pakietu sqlserver oraz zdarzenia rpc_completed, a następnie dodanie odpowiednich pól, akcji i celu zapisu. Do analizy można użyć celu event_file, który zapisuje dane do plików odczytywanych przez SQL Server Management Studio lub funkcje systemowe Extended Events. Sesję warto ograniczyć predykatem, na przykład do określonej bazy, aplikacji, hosta albo minimalnego czasu trwania.
Próg czasu powinien być dobrany do badanego problemu. Filtr obejmujący wszystkie wywołania RPC może szybko wytworzyć dużą liczbę zdarzeń, zwłaszcza gdy aplikacja intensywnie korzysta z procedur składowanych. Do wyszukiwania operacji wolnych można filtrować zdarzenia po duration, ale wynik należy porównywać z ruchem aplikacji, porą dnia i częstotliwością wywołań. Procedura wykonywana przez kilka milisekund może być problemem, jeśli uruchamia się tysiące razy, podczas gdy pojedyncze wywołanie trwające dłużej może być prawidłowym zadaniem raportowym.
rpc_completed pokazuje stan po zakończeniu wywołania, dlatego służy przede wszystkim do korelacji wykonania, parametrów, obciążenia i błędów. Nie zastępuje planu wykonania ani widoków dynamicznego zarządzania. Gdy zdarzenie wskazuje wysokie odczyty logiczne, należy sprawdzić plan procedury i indeksy. Gdy wskazuje długie oczekiwanie, pomocne są informacje o blokadach, oczekiwaniach i aktywnych żądaniach. Przy analizie powtarzalnych wywołań trzeba także odróżnić koszt pojedynczego RPC od kosztu całej sekwencji wywołań wykonywanych przez aplikację.
Praktyczne zastosowanie przy diagnozowaniu komputera
Na komputerze użytkownika zdarzenie rpc_completed ma znaczenie wtedy, gdy laptop lub komputer PC korzysta z aplikacji połączonej z bazą Microsoft SQL Server. Sam wpis nie oznacza awarii laptopa, uszkodzenia dysku ani problemu z pamięcią operacyjną. Opisuje wykonanie żądania po stronie silnika SQL Server. Jeżeli aplikacja działa wolno, dane z tego zdarzenia mogą pomóc ustalić, czy opóźnienie wynika z długiego wywołania procedury, dużego zużycia CPU, licznych odczytów logicznych, blokowania albo błędu zwracanego przez bazę.
W diagnostyce należy zestawić czas widoczny dla użytkownika z czasem zapisanym przez SQL Server. Różnica może wynikać z opóźnienia sieciowego, kolejkowania żądania w aplikacji, serializacji danych lub przetwarzania odpowiedzi po stronie klienta. Jeżeli SQL Server rejestruje krótkie rpc_completed, a program długo czeka, przyczyny trzeba szukać także poza samym wykonaniem procedury. Jeżeli natomiast czas trwania i liczba odczytów są wysokie, warto przeanalizować procedurę, jej parametry, plan wykonania oraz obciążenie serwera w chwili wystąpienia problemu.
Prawidłowa interpretacja wymaga zachowania zgodności między wersją SQL Server, konfiguracją sesji Extended Events i rzeczywistym sposobem komunikacji używanym przez badaną aplikację.