Istnieje wiele flag śledzenia. Niektóre są dobrze udokumentowane, niektóre nie, a inne znalazły drogę do domyślnego stanu zachowania w wersji 2016. Oprócz oficjalnych kanałów wsparcia, pracowników Microsoft itp., Jakie są sposoby na znalezienie nowych flag śledzenia?
Przeczytałem kilka ostatnich postów Aarona Bertranda tu i tutaj , ale nie zauważyłem nic o nowych flagach śledzenia.
Skopiowałem plik danych i dziennika mssqlsystemresource do nowej lokalizacji i załączyłem go jak zwykłą bazę danych, aby przejrzeć tabele systemowe i widoki, ale niczego nie zauważyłem od razu. Zastanawiałem się, czy nie wziąć listy znanych flag śledzenia i przeszukiwać numery, których nie ma na tej liście, aby sprawdzić, na które zezwala DBCC TRACEON, ale najpierw chciałem zadać pytanie.
Zakładając, że polecenie DBCC, aby je włączyć, musi się zalogować za pomocą jakiegoś zasobu, aby upewnić się, że flaga śledzenia jest poprawna, do kogo sięga? Czy istnieje plik .dll lub inny plik systemowy zawierający listę?
Wiem, że pytanie rzuca szeroką siatkę, ale to, co pobudziło to czytanie o Trace Flag o konkretnym zamierzonym zachowaniu wraz z nową funkcją w 2016 roku, która nie miała opisanego efektu. Początkowo myślałem, że być może liczby zostały transponowane, na przykład 7129 na 7219. Miałem nadzieję, że uzyskam listę prawidłowych flag śledzenia w zakresie, powiedzmy 7000-7999, w poszukiwaniu permutacji. Testowanie ich wszystkich, zarówno pod kątem flag DBCC TRACEON, jak i parametrów uruchamiania, byłoby dość uciążliwe w połączeniu z testowaniem wyników pod kątem zachowania funkcji.
źródło
W większości sprowadza się to do posiadania czasu i zasobów emocjonalnych, które można przeznaczyć na ich poszukiwanie.
Oczywiście można napisać skrypt, który będzie przechodził przez możliwe numery flag śledzenia i analizował efekty, ale nie zawsze jest to owocne. Jest wiele przyczyn tego, ale powszechne frustracje obejmują fakt, że niektóre flagi śledzenia działają tylko w połączeniu z innymi, niektóre działają tylko
-T
przy uruchomieniu, lub gdy są używane zDBCC TRACEON
, niektóre tylko zOPTION (QUERYTRACEON)
. Niektóre wymagają nieudokumentowanych poleceń lub rozszerzeń poleceń lub też określonej funkcji, aby można je było włączyć. Niektóre dają efekty tylko wtedy, gdy wiesz, gdzie ich szukać. I tak dalej i ... bardzo ... tak dalej.To powiedziawszy, być może najbardziej skuteczną techniką jest krok po kroku wykonanie określonego zapytania lub polecenia z dołączonym debuggerem lub innym narzędziem do profilowania, porównując ścieżki podjęte z włączonymi i wyłączonymi flagami śledzenia. Jeśli to zabiera dużo czasu, to dlatego, że tak jest.
Dla mnie coś musi być potencjalnie bardzo interesujące lub dotyczyć rzeczywistego problemu bez lepszego rozwiązania, aby nawet pomyśleć o tym. Przydaje się również, jeśli przeszedłeś ten proces setki lub tysiące razy wcześniej, aby uzyskać ogólne poczucie tego, czego szukasz, jaki zakres flag śledzenia jest najbardziej skuteczny, a która część bazy kodu będzie interesujące.
Ustawienie punktu przerwania
CSessionTraceFlags::CheckSessionTraceInternal
i sprawdzenie wartościedx
rejestru (aby sprawdzić, która flaga śledzenia jest sprawdzana) może być przydatne w prostych przypadkach, ale interesujące przypadki nie są często proste - i nie wszystkie flagi śledzenia są sprawdzane w punkcie, w którym wpływa na wybraną ścieżkę kodu.Istnieje raczej niewielka lista oficjalnych flag śledzenia . Są to flagi, które zostały w pełni przetestowane i są (i będą) obsługiwane przez CSS i, ostatecznie, twórców produktu. Są to również flagi z dość powszechnym przypadkiem użycia, który warto udokumentować.
Każda inna flaga śledzenia, którą znajdziesz, jest ciekawostką, która może mieć nieoczekiwane efekty w różnych sytuacjach (różne kompilacje, jednostki SKU, ustawienia zabezpieczeń, różne funkcje ... cokolwiek innego, o czym możesz lub nie możesz pomyśleć). Będą one „wspierane” tylko przez osobę, która o nich pisała, jeśli w ogóle.
Istnieje kilka nieoficjalnych list, najlepsza z nich to A Topical Collection of SQL Server Flags autorstwa Aarona Morelli (obecnie w wersji 6, kwiecień 2016).
Wszystko to powiedziawszy, Microsoft CSS ma (ostatecznie) dostęp do wszystkich flag śledzenia, więc mogą być w stanie doradzić Ci w każdym napotkanym, nawet jeśli nie ma ich na oficjalnej liście. Mogą oczywiście nic nie mówić i może to wiązać się z opłatą; Naprawdę nie wiem, sam nigdy nie poszedłem tą drogą.
źródło
Prowadzimy kolekcję flag śledzenia na github (obecnie 599 flag śledzenia):
Flagi śledzenia Microsoft SQL Server
Również bardzo dobra technika opisana przez Brenta Ozara w jego świetnym artykule Bad Idea Jeans: Finding Undocumented Trace Flags i Joe Obbish w tym niesamowitym artykule A Method to Find Trace Flags
źródło