Będziesz robił 3 rodzaje strojenia, 1 reaktywny i 2 proaktywny.
Reaktywny
Niespodziewanie niektóre zapytania zaczynają powodować problemy. Może to być spowodowane błędem lub funkcją aplikacji, tabelą przekraczającą oczekiwania, skokiem ruchu lub optymalizacją zapytań, która staje się „kreatywna”. Może to być romans w środku nocy, a nawet bzdury w odpowiedzi na spowolnienie systemu o niekrytycznym charakterze. Tak czy inaczej, charakterystyczny charakter reaktywnego strojenia jest taki, że już masz problem . Nie trzeba dodawać, że chcesz robić to jak najmniej. Co prowadzi nas do ...
Proaktywne
Typ 1: Rutynowa konserwacja
Co jakiś czas, co kilka miesięcy lub tygodni, w zależności od tego, jak często zmienia się twój schemat i jak szybko rosną twoje dane, powinieneś przejrzeć dane wyjściowe narzędzi analizy wydajności bazy danych (np. Raporty AWR dla Oracle DBA). Szukasz początkowych problemów, czyli rzeczy, które na ich drodze wymagają Reaktywnego strojenia, a także nisko wiszących owoców, przedmiotów, które prawdopodobnie nie spowodują problemów wkrótce, ale które można poprawić przy niewielkim wysiłku w nadziei, że uda się zapobiec daleko przyszłe problemy. Ile czasu powinieneś poświęcić na to, zależy od tego, ile masz czasu i na co jeszcze możesz go poświęcić, ale optymalna ilość nigdy nie wynosi zero. Możesz jednak łatwo zmniejszyć kwotę, którą musisz wydać, wykonując więcej ...
Typ 2: Właściwa konstrukcja
Przestroga Knutha przeciwko „przedwczesnej optymalizacji” jest powszechnie znana i należycie szanowana. Ale należy zastosować właściwą definicję „przedwczesnego”. Niektórzy programiści aplikacji, gdy mają pozwolenie na pisanie własnych zapytań, mają tendencję do przyjmowania pierwszego zapytania, na które trafiają, które jest logicznie poprawne i nie zwracają uwagi na wydajność, teraźniejszość ani przyszłość. Lub mogą przetestować zestaw danych programistycznych, który po prostu nie jest reprezentatywny dla środowiska produkcyjnego (wskazówka: nie rób tego! Deweloperzy powinni zawsze mieć dostęp do realistycznych danych do testowania). Chodzi o to, że odpowiedni moment na dostrojenie zapytania jest wtedy, gdy jest on wdrażany po raz pierwszy, a nie kiedy pojawia się na liście słabo wykonanego SQL, a na pewno nie, gdy powoduje krytyczny problem.
Co zatem kwalifikuje się jako przedwczesna optymalizacja gruntów DBA? Na szczycie mojej listy poświęciłem normalizację bez wykazanej potrzeby. Pewnie, że możesz zachować sumę w wierszu nadrzędnym zamiast obliczać ją w czasie wykonywania z wierszy potomnych, ale czy naprawdę potrzebujesz? Jeśli jesteś na Twitterze lub Amazon, strategiczna dezormalizacja i wstępne obliczenia mogą być twoimi najlepszymi przyjaciółmi. Jeśli projektujesz małą bazę danych dla 5 użytkowników, priorytetem musi być odpowiednia struktura ułatwiająca integralność danych. Inne przedwczesne optymalizacje są również kwestią priorytetów. Nie marnuj godzin na ulepszanie zapytania, które uruchamia się raz dziennie i zajmuje 10 sekund, nawet jeśli uważasz, że możesz je skrócić do 0,1 sekundy. Może masz raport, który działa przez 6 godzin dziennie, ale zapoznaj się z planowaniem go jako zadania wsadowego przed zainwestowaniem czasu w jego dostrojenie. Nie inwestuj w osobną, replikowaną w czasie rzeczywistym instancję raportowania, jeśli obciążenie produkcyjne nigdy nie przekroczy 10% (zakładając, że możesz zarządzać bezpieczeństwem).
Testując w oparciu o realistyczne dane, wykształcając domysły na temat wzorców wzrostu i ruchu (plus limity na wzrosty) oraz stosując swoją wiedzę o dziwactwach optymalizujących platformę, możesz wdrożyć zapytania, które działają (blisko) optymalnie nie tylko teraz, ale w przyszłości i w warunkach mniej niż idealnych. Po zastosowaniu odpowiednich technik wydajność kwerendy można dokładnie przewidzieć i zoptymalizować (w tym sensie, że każdy komponent jest tak szybki, jak to konieczne).
(I kiedy już to robisz, ucz się statystyki! )