Jak odpowiedzieć, dlaczego nagle potrzebujemy indeksów lub zapytania należy zmienić

11

Jestem junior DBA z 3-letnim doświadczeniem. Naszym zadaniem jest dostrajanie zapytań lub doradzanie programistom, że określony kod powinien zostać przepisany lub potrzebne są indeksy.

Jedno proste pytanie, które często zadaje zespół programistów, brzmi: „Wczoraj wszystko poszło dobrze, co się nagle zmieniło?” i zostaniemy poproszeni o sprawdzenie strony infrastruktury. Pierwszą reakcją na każdy problem zawsze wydaje się obarczenie maksymalnej winy infrastrukturą, co zawsze jest pierwszą weryfikowaną sprawą.

Jak powinniśmy odpowiedzieć na pytania „co zmieniło” zespół programistów? Czy kiedykolwiek mieliście taką samą sytuację? Jeśli tak, podziel się swoim doświadczeniem.

TheGameiswar
źródło

Odpowiedzi:

10

Jak odpowiedzieć na to, co zmieniło pytanie Dev?

To bardzo częste pytanie nie tylko w DEV, ale dotyczy każdego zespołu IT i biznesu.

Co się zmieniło ? ==> można odpowiedzieć na podstawie faktów i liczb.

Fakty odnoszą się na przykład

  • zwiększyć liczbę użytkowników uzyskujących dostęp do bazy danych?
  • Jakaś zmiana parametru konfiguracji serwera?
  • Utrzymanie bazy danych - aktualizować statystyki, reorg / przebudowywanie indeksów nie jest wykonywane? Z tego powodu plany są generowane niepoprawnie!
  • Czy ilość danych wzrosła?
  • Wprowadzono zmiany po stronie sieci, załatano system operacyjny i / lub wdrożono nowy dodatek Service Pack lub CU dla serwera SQL - bez przeprowadzania pełnego testu regresji cyklu biznesowego aplikacji ?
  • Podstawowa sieć SAN nagle stała się wolna?

Liczby można wyprowadzić, jeśli masz dane do pokazania. Na przykład :

  • W tej sytuacji krytyczne jest ustawienie serwera na niskim poziomie. To złagodzi winę, ponieważ możesz poprzeć fakty solidnymi liczbami.
  • Rozpocznij zbieranie danych za pomocą DMV lub sp_whoisactive do tabeli, aby dane zostały utrwalone po ponownym uruchomieniu serwera SQL.

(musisz ćwiczyć w zależności od środowiska i potrzeb, od tego, jak często gromadzić dane / jakie dane gromadzić i ile to będzie okres przechowywania) lub (możesz zainwestować w oprogramowanie innej firmy, takie jak sqlsentry lub manager diagnostyczny idera, który wykona dla ciebie powyższą pracę) .

Kin Shah
źródło
7

Cóż, możesz mieć inny plan, ponieważ:

  • plan mógł zostać eksmitowany z pamięci podręcznej z powodu:
    • restart usługi
    • ręczne czyszczenie pamięci podręcznej planu
    • restart usługi lub przełączenie awaryjne
    • przypadkowa zmiana, np. niektóre sp_configurezmiany mogą opróżnić pamięć podręczną
    • niektóre zmiany w obiektach, indeksach, statystykach lub innych zależnościach spowodowały ponowną kompilację
  • możesz otrzymywać inny plan niż inni użytkownicy lub poprzednie wywołania, ponieważ:
    • tekst zapytania może nie być identyczny (obejmuje to rozróżnianie wielkości liter i białych znaków, nie wspominając o różnych kolumnach, kryteriach łączenia, filtrach itp.)
    • zapytanie może być uruchamiane przez różnych użytkowników z różnymi ustawionymi opcjami (lub różnymi domyślnymi schematami, jeśli jakikolwiek obiekt w planie nie ma pełnej nazwy, w tym schematu )
  • zapytanie i plan mogą być takie same, ale możesz uzyskać inną wydajność, ponieważ:
    • plan został zbuforowany przy użyciu różnych parametrów, a ten plan nie jest optymalny dla bieżącego zestawu parametrów (jest to zwykle nazywane „wąchaniem parametrów”)
    • ilość danych oparta na parametrach lub po prostu ze względu na zmianę danych w międzyczasie jest znacząco różna
    • dane zmieniły się na tyle, aby zmienić najbardziej efektywny sposób dostępu do danych, ale niewystarczająco, aby wywołać aktualizacje statystyk lub ponowną kompilację (poszukiwanie rosnącego problemu kluczowego oraz algorytmu automatycznych statystyk)
    • dane zostały eksmitowane z puli buforów i teraz należy je odczytać z dysku
    • istnieje większa współbieżność, blokowanie lub inne obciążenia zasobów potrzebnych do spełnienia zapytania

Omawiam wiele z nich bardziej szczegółowo tutaj:

Jeśli działają one w różnych środowiskach, mam tutaj całą serię rzeczy do sprawdzenia:

Ważne jest również, aby pamiętać, że utworzenie indeksu lub zmiana zapytania może nie być bezpośrednim powodem, dla którego zapytanie nagle działa lepiej - czasami dzieje się tak tylko dlatego, że te zmiany naprawdę wygenerowały nowy plan i / lub unieważniły ten, który już istniał .

Aaron Bertrand
źródło
7

Jak zwykle Aaron Bertrand i Kin udzielili doskonałych odpowiedzi. Jednak obie odpowiedzi zawierają wspólny wątek. Jeśli przeanalizujesz którąkolwiek z odpowiedzi, zobaczysz, że powodem, dla którego XYZ nie działa tak, jak zadziałało wczoraj, nie jest spowodowane czymś, co Ty / oni / osoba X zrobili. Powodem, dla którego wszystko się zmieniło, jest to, że baza danych postanowiła robić to inaczej z powodów XYZ.

Baza danych to żywa, oddychająca istota . Bazy danych podejmą decyzje i zmienią zdanie z powodu kombinacji założeń, statystyk i innych narzędzi heurystycznych. Jest to diametralnie różne od większości programowania warstw aplikacji (wyjątek stanowi uczenie maszynowe).

Użyję odniesień wojskowych, ponieważ nie mogę teraz wymyślić czegoś lepszego. Doceniona zostanie bardziej ogólna metafora (nie jest zamierzona gra słów).

W większości aplikacji programista działa jako instruktor ćwiczeń. Mówią komputerowi dokładnie, co robić, w jakiej kolejności, a czasem i na jak długo. Programowanie bazy danych przypomina bardziej funkcjonowanie dowódcy. Mówisz mu, co chcesz robić na wysokim poziomie, aw razie potrzeby udzielasz wskazówek. Baza danych ma za zadanie znaleźć najlepszy sposób realizacji planu w oparciu o bieżące dane wywiadowcze, takie jak młodsi oficerowie i podoficerowie.

Wyrażając to rozróżnienie w umysłach innych programistów, miejmy nadzieję, że zaczną widzieć, że nie masz mocy dyktatorskich, jakie mają w swoim otoczeniu. Prowadzisz bazę danych do rozwiązania i czasami baza danych znika z dobrych lub złych powodów. Przypomnij im, że ostatecznie nie ma znaczenia, dlaczego * baza danych poszła nie tak, ale co możemy zrobić, aby ją przywrócić.

* Rozumiem, „dlaczego” jest bardzo cenny dla przyszłej profilaktyki, uczenia się itp., Ale wydaje się, że PO stoi w obliczu oporu ze strony ludzi, którzy nie próbują się dowiedzieć ani pomóc w rozwiązaniu problemu.

Erik
źródło