Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Klasa zdarzenia Ostrzeżenie o Skrótze może być używana do monitorowania, kiedy podczas operacji haszującej wystąpiła rekurencja skrótu lub przerwanie haszowania (bailout skrótu).
Rekurencja skrótu występuje, gdy dane wejściowe nie mieszczą się w dostępnej pamięci, co skutkuje podziałem wejścia na wiele partycji przetwarzanych oddzielnie. Jeśli któraś z tych partycji nadal nie mieści się w dostępnej pamięci, jest dzielona na podpartycje, które również są przetwarzane oddzielnie. Proces podziału trwa do momentu, gdy każda partycja zmieści się w dostępnej pamięci lub do osiągnięcia maksymalnego poziomu rekurencji (wyświetlanego w kolumnie danych IntegerData).
Awaryjne zakończenie operacji skrótu występuje, gdy operacja tworzenia skrótów osiągnie maksymalny poziom rekursji i przełącza się na alternatywne rozwiązanie do przetwarzania pozostałych danych partycjonowanych. Pakiet bailout haszów zwykle następuje z powodu zniekształconych danych.
Rekurencja skrótu i ratowanie haszów powodują obniżoną wydajność serwera. Aby wyeliminować lub zmniejszyć częstotliwość rekurencji skrótu i ratunków, zrób jedno z poniższych działań:
Upewnij się, że statystyki istnieją na kolumnach, które są łączone lub grupowane.
Jeśli na kolumnach istnieją statystyki, zaktualizuj je.
Użyj innego rodzaju połączenia. Na przykład, jeśli to stosowne, użyj łączenia MERGE lub LOOP.
Zwiększ dostępną pamięć na komputerze. Rekurencja skrótu lub bailout zachodzi, gdy nie ma wystarczająco dużo pamięci do przetwarzania zapytań i muszą one zostać przesłane na dysk.
Tworzenie lub aktualizacja statystyk w kolumnie zaangażowanej w łączenie jest najskuteczniejszym sposobem na zmniejszenie liczby rekurencji skrótów lub ratunk, które się pojawiają.
Uwaga / Notatka
Terminy grace hash join oraz rekurencyjne hash join są również używane do opisu hash bailout.
Ważne
Aby określić, gdzie pojawia się zdarzenie ostrzeżenia o hasze podczas generowania planu wykonania przez optymalizator zapytań, powinieneś także zebrać klasę zdarzenia Showplan w śledzeniu. Możesz wybrać dowolną klasę zdarzeń Showplan, z wyjątkiem klas zdarzeń Showplan Text i Showplan Text (Unencoded), które nie zwracają identyfikatora węzła. Identyfikatory węzłów w planach pokazowych identyfikują każdą operację wykonywaną przez optymalizator zapytań podczas generowania planu wykonania zapytań. Operacje te nazywane są operatorami, a każdy operator w Showplanie ma identyfikator węzła. Kolumna ObjectID dla zdarzeń ostrzeżenia o hasze odpowiada identyfikatorowi węzła w Showplans, dzięki czemu można określić, który operator lub operacja powoduje błąd.
Kolumny danych o zdarzeniu ostrzeżenia o zdarzeniu skrótu
| Nazwa kolumny danych | Typ danych | Description | Identyfikator kolumny | Filtrowanie |
|---|---|---|---|---|
| ApplicationName | nvarchar | Nazwa aplikacji klienckiej, która utworzyła połączenie z wystąpieniem programu SQL Server. Ta kolumna jest wypełniona wartościami przekazywanymi przez aplikację, a nie wyświetlaną nazwą programu. | 10 | Tak |
| ClientProcessID | int | Identyfikator przypisany przez komputer hosta do procesu, w którym działa aplikacja kliencka. Ta kolumna danych jest wypełniana, jeśli klient poda identyfikator procesu klienta. | 9 | Tak |
| DatabaseID | int | Identyfikator bazy danych określony przez polecenie bazy USE lub domyślnej bazy danych, jeśli dla danego przypadku nie wydano żadnego polecenia bazy USE. Program SQL Server Profiler wyświetla nazwę bazy danych, jeśli kolumna danych ServerName zostanie przechwycona w śladzie, a serwer jest dostępny. Określ wartość bazy danych przy użyciu funkcji DB_ID. | 3 | Tak |
| DatabaseName | nvarchar | Nazwa bazy danych, w której jest uruchomiona instrukcja użytkownika. | 35 | Tak |
| EventClass | int | Typ wydarzenia = 55. | 27 | Nie. |
| Sekwencja zdarzeń | int | Sekwencja danego zdarzenia w żądaniu. | 51 | Nie. |
| EventSubClass | int | Typ podklasy zdarzenia. 0=Rekurencja 1=Ratunek |
dwadzieścia jeden | Tak |
| GroupID | int | Identyfikator grupy obciążenia, w której jest uruchamiane zdarzenie śledzenia SQL. | 66 | Tak |
| Nazwa hosta | nvarchar | Nazwa komputera, na którym jest uruchomiony klient. Ta kolumna danych jest wypełniana, jeśli klient poda nazwę hosta. Aby określić nazwę hosta, użyj funkcji HOST_NAME. | 8 | Tak |
| IntegerData | int | Poziom rekurencji (tylko rekurencja skrótu). | 25 | Tak |
| IsSystem | int | Wskazuje, czy zdarzenie miało miejsce w procesie systemowym, czy w procesie użytkownika. 1 = system, 0 = użytkownik. | 60 | Tak |
| Nazwa logowania | nvarchar | Nazwa logowania użytkownika (albo SQL Server security login, albo dane logowania do Windows w formie <DOMAIN>\<username>). | 11 | Tak |
| LoginSid | image | Numer identyfikacyjny zabezpieczeń (SID) zalogowanego użytkownika. Informacje te znajdziesz w widoku katalogu sys.server_principals. Każdy identyfikator SID jest unikatowy dla każdego identyfikatora logowania na serwerze. | 41 | Tak |
| NTDomainName | nvarchar | Domena systemu Windows, do której należy użytkownik. | 7 | Tak |
| NTUserName | nvarchar | Nazwa użytkownika systemu Windows. | 6 | Tak |
| Identyfikator obiektu | int | ID węzła rdzenia zespołu haszującego zaangażowanego w repartycję. Odpowiada ID węzła w Showplans. | 22 | Tak |
| Identyfikator żądania | int | Identyfikator żądania zawierającego to wyrażenie. | 49 | Tak |
| NazwaSerwera | nvarchar | Nazwa instancji SQL Server, która jest śledzona. | 26 | |
| SessionLoginName | nvarchar | Nazwa logowania użytkownika, który utworzył sesję. Na przykład, jeśli połączysz się z SQL Server za pomocą Login1 i wykonasz polecenie jako Login2, SessionLoginName pokazuje Login1, a LoginName pokazuje Login2. W tej kolumnie są wyświetlane zarówno identyfikatory logowania programu SQL Server, jak i systemu Windows. | 64 | Tak |
| SPID | int | Identyfikator sesji, w której wystąpiło zdarzenie. | 12 | Tak |
| StartTime | datetime | Godzina rozpoczęcia zdarzenia, jeśli jest dostępna. | 14 | Tak |
| TransactionID | bigint | Przypisany przez system identyfikator transakcji. | 4 | Tak |
| XactSequence | bigint | Token opisujący bieżącą transakcję. | 50 | Tak |