Co to jest hot spotting w kontekście dodawania plików do tempdb?

12

Próbuję dowiedzieć się, czy można dodać pliki tempdb do programu SQL Server bez konieczności ponownego uruchamiania usługi SQL Server. Widziałem tę odpowiedź tutaj, na administratorach baz danych:

Jedna odpowiedź brzmi:

DODAJ - brak konieczności wyłączania. Chociaż, jak zauważył Sean z Microsoft, SQL będzie wolał używać plików o niższym poziomie wypełnienia. Jeśli przechodzisz od 1 pliku danych i dodajesz więcej, SQL będzie przez chwilę używał nowych, ale wydajność nie będzie gorsza niż posiadanie tylko jednego pliku. Jeśli jednak masz już 2+ i dodasz jeszcze jeden, spowoduje to hotspot na nowym i zmniejszy wydajność.

Jednak komentarz ostrzega, co następuje:

Dodałbym dodatek do części „Dodaj”: „Dodaj: Nie, ale najprawdopodobniej będziesz niezrównoważony, więc będziesz w gorącym punkcie, co może pogorszyć sytuację”.

Mam następujące pytania dotyczące tego komentarza, ale poinstruowano mnie, aby zadać je w moim własnym (tym) nowym pytaniu, zamiast zadawać komentatorowi komentarz w odpowiedziach na to pytanie.

Konkretnie:

  1. Co to jest hot spotting? (Dostałem trochę informacji przez Google, ale nie szczegółowo opisałem, co dzieje się z hotspottingiem w tempdb po dodaniu plików)
  2. Co z hot spottingiem, co znacznie pogorszyło się w tempdb?
  3. Jakie konkretne rzeczy w DB byłyby znacznie gorsze?
jrdevdba
źródło

Odpowiedzi:

16
  1. Co to jest hot spotting?

    „Hot spotting” w tym kontekście oznacza, że ​​chociaż tempdb ma wiele plików, wszystkie operacje we / wy są wykonywane w jednym pliku. Jeśli tempdb jest wystarczająco zajęty, aby uzasadnić dodawanie plików, nierównowaga, która prowadzi do hot-spotting (z powodu proporcjonalnego wypełnienia ), będzie krótkotrwała, więc myślę, że ostrzeżenia mogą być trochę Kurczakiem. W każdym razie z mojego doświadczenia.

  2. Co z hot spottingiem, co znacznie pogorszyło się w tempdb?

    Myślę, że w tempdb jest uważane za gorsze, ponieważ zajmuje większość działań związanych z zapisem. Z pewnością możesz napotkać podobne problemy w bazach danych użytkowników, ale ponieważ próbujesz już rozwiązać problem w tempdb ...

  3. Jakie konkretne rzeczy w DB byłyby znacznie gorsze?

    Najczęściej pisz czasy. Wyobraź sobie, że wszyscy próbują korzystać z tego samego bankomatu, nawet jeśli w pobliżu znajduje się 7 innych bankomatów. Tylko tyle można napisać w dowolnym momencie; wszystko inne musi poczekać. Dzięki większej liczbie plików (i wystarczającej liczbie rdzeni do zaplanowania pracy) operacje we / wy można rozłożyć bardziej równomiernie.

    Tylko upewnij się:

Aaron Bertrand
źródło
10
  1. Co to jest hot spotting?

Aaron ma rację i nie zamierzam przerabiać tego, co powiedział powyżej, jednak nie chodzi tylko o IO dysku. Główna część, z którą większość ludzi ma problemy w TempDB, wynika z konfliktu o pewne struktury śledzenia.

Ponieważ posiadanie wielu plików tempdb pozwala algorytmom proporcjonalnego zapełniania i okrągłego robota efektywnie zachowywać się „sprawiedliwie” w przypadku alokacji, dodanie nowego pliku bez alokacji trochę to uśmierza. Nie zgadzam się, że jest to ostrzeżenie „małe kurczaki” (patrz aktualizacje produktów poniżej), jeśli zaczniesz widzieć PAGELATCH_*oczekiwania na wymienionym nowym pliku, a nie na wielu innych plikach. To na ogół dzieje się w systemach, które posiadają wysoką aktywność tempdb i mają już więcej niż jeden plik.

Należy pamiętać, że w SQL Server 2019 dostępne są opcje zmiany niektórych podstawowych tabel systemowych na tabele w pamięci, które mogą ulec poprawie, ponieważ obiekty w pamięci są przydzielane inaczej niż tabele zapisane na dysku. Tabele dyskowe to tradycyjne tabele, nad którymi wszyscy pracujemy od lat. SQL Server 2014 wprowadził tabele zoptymalizowane pod kątem pamięci . SQL Server 2019 może obsługiwać niektóre metadane alokacji w tabelach zoptymalizowanych pod kątem pamięci.

Kolejna zmiana została wprowadzona w SQL Server 2019, aby pomóc w równoczesnych zmianach PFS, co zasadniczo PAGELATCH_*czeka rywalizacja o strukturę w pamięci w alokacji .

  1. Co z hot spottingiem, co znacznie pogorszyło się w tempdb?

Nic IMHO. Tak, TempDB ma więcej elementów, które mogą powodować zapisy bez bezpośredniego użycia, co może utrudniać niektóre elementy. Jednak bardzo zajęta baza danych użytkowników pod względem tempa zmian danych jest równie zła. Nie ogranicza się to tylko do TempDB.

  1. Jakie konkretne rzeczy w DB byłyby znacznie gorsze?

Naprawdę podoba mi się analogia Aarona! To esencja tego, co się dzieje. Co gorsza, to przydzielanie i śledzenie miejsca dla obiektów w bazie danych. Jeśli twoja baza danych użytkowników jest w większości statyczna (mała szybkość zmian) lub twoja TempDB tak naprawdę nie jest używana, nic nie zauważysz. Jeśli jednak jest to dość zajęty serwer, możesz uruchomić lub zaostrzyć oczekiwania związane z pagelowaniem, co może prowadzić do blokowania konwojów.

Aaron wskazał już, że w starszej wersji istnieją flagi śledzenia, aby upewnić się, że używane są jednolite zakresy i że wszystkie pliki w grupie plików rosną razem (Aaron wskazuje 1117 i 1118, które są NOP w 2016+). Kolejną rzeczą, na którą chciałbym zwrócić uwagę, jest to, że nie dotyczy to tylko TempDB, ale każdej bazy danych, a fizyczny układ powinien być przemyślany w zależności od potrzeb.

Dotyczy to nie tylko problemów związanych z hotspottingiem, ale ma zastosowanie do innych części systemu, takich jak tworzenie kopii zapasowych / przywracanie, zarządzanie plikami, fragmentacja metadanych systemu plików itp., Na które wszystko można pomóc, mając wiele plików.

Możesz zobaczyć rywalizację o strukturę alokacji, szukając strony waitresourcena stronie PFS (która jest stroną 1, a następnie co 8088 stron). Jeśli widzisz, że wszystko znajduje się w tym samym pliku (2: plik: strona), oznacza to, że tak się dzieje.

Sean Gallardy
źródło