plan konserwacji serwera sql - najlepsze praktyki dotyczące zadań i harmonogramu
<p>zadanie polega na opracowaniu planu konserwacji naszych baz danych sql server 2005. wiem, że w przypadku kopii zapasowych chcę codziennie wykonywać pełną kopię zapasową bazy danych i kopie zapasowe dziennika transakcji co 15 minut. mój problem polega na tym, aby dowiedzieć się, jakie inne zadania chcę wykonywać i jak często je wykonywać.</p><p>do tej pory mam to na uwadze. popraw mnie, jeśli w moim myśleniu są jakieś wady lub lepszy sposób na zrobienie tego.</p><ol> <li>kopia zapasowa - wszystkie tabele, pełna kopia zapasowa (codziennie)</li> <li>kopia zapasowa - wybrane tabele, pełna kopia zapasowa (co godzinę)</li> <li>kopia zapasowa - dzienniki transakcji (co 15 minut)</li> <li>sprawdzaj integralność bazy danych (codziennie)</li> <li>reorganizuj indeks (codziennie)</li> <li>aktualizuj statystyki (codziennie)</li> <li>zmniejsz bazę danych (co tydzień)</li> <li>przebuduj indeks (co tydzień)</li> <li>czyszczenie konserwacyjne (codziennie)</li> </ol><p>przypomniałem sobie, jak czytałem jakiś czas temu (kiedy ustawiłem podobny plan w innym zadaniu), że niektóre z tych zadań nie muszą być uruchamiane codziennie lub nie powinny być uruchamiane codziennie. jeśli chodzi o to, to mi ucieka. mógłbym skorzystać z krótkich wskazówek na temat tworzenia lepszego planu konserwacji, który zmniejszy utratę danych w przypadku katastrofy, ale nie obciąży systemu podczas pracy w godzinach szczytu (a także zwiększy wydajność).</p>
<p>josh,</p><p>jest to bardzo częste zadanie dla wszystkich dba i poprawna odpowiedź nie jest taka sama dla każdego i dla każdego serwera. podobnie jak wiele innych rzeczy, zależy to od tego, czego potrzebujesz.</p><p>zdecydowanie nie chcesz uruchamiać „shrink database”, jak już sugerowano. jego zło do wydajności, a poniżej odniesienie pokaże ci dlaczego. powoduje to fragmentację dysku i indeksów, co może prowadzić do problemów z wydajnością. lepiej jest, jeśli wstępnie przydzielisz duży rozmiar danych i plików dziennika, aby automatyczne uruchamianie nie uruchomiło się.</p><p>nie zrozumiałem twojego nr 2. pełna kopia zapasowa wybranych tabel. czy możesz rozwinąć więcej na ten temat?</p><p>przychodząc do reorganizacji indeksu, aktualizacji statystyk i przebudowy indeksu, musisz uważać na to, jak to zrobisz, w przeciwnym razie skończy się to na użyciu większej ilości zasobów, a także na problemach z wydajnością.</p><p>po przebudowaniu indeksów statystyki indeksów są aktualizowane za pomocą fullscan, ale jeśli później zaktualizujesz statystyki, zostaną one ponownie zaktualizowane z domyślną próbką (która zależy od kilku czynników, zwykle 5% tabeli, gdy rozmiar tabeli&gt; 8 mb), co może prowadzić do problemów z wydajnością. w zależności od posiadanej edycji może być możliwe przebudowywanie indeksu online. właściwym sposobem wykonywania tej czynności jest sprawdzenie stopnia fragmentacji i w zależności od tego albo przebuduj indeks, albo zreorganizuj indeks + zaktualizuj statystyki. możesz także określić, które tabele wymagają częstszej aktualizacji statystyk i próbować częściej aktualizować statystyki.</p><p>plany konserwacji są w porządku, ale trudno jest uzyskać z nich jak najwięcej, wykonując te dostosowania, chyba że możesz zalogować się do ssis i poprawić mp. dlatego wolę nie używać ich i używać <a href="https://ola.hallengren.com">darmowe skrypty oli hallengren</a> , które są bardziej niezawodne niż mp. poleciłbym również nadrobić zaległości w artykule paula randala na ten temat.</p><p>ref: <a href="http://technet.microsoft.com/en-us/magazine/2008.08.database.aspx">http://technet.microsoft.com/en-us/magazine/2008.08.08.database.aspx</a> </p><p>to nie jest wyczerpująca odpowiedź na twoje pytanie, ale dobry punkt wyjścia. hth i daj nam znać, jeśli masz dodatkowe pytania/komentarze.</p>
Ok. Znalazłem to w czym problem.


Na początku myślałem, że to problem z DataProvided, ale to nie było. Odkryłem ten sam problem w SQLServer 2000 ....


Wyszukiwanie w google dowiedziałem się czegoś o plan wykonania. Biorąc w ten sposób, że zapytania zwiększyło wydajność 50%.


Krótki życiorys tego problemu jest to, że podczas wykonywania SP kodem, DBMS ma pewne problemy z planu wykonania, a nie korzystać z indeksów ...


Lepszą odpowiedź jest w tym poście:
 [Parametr Wąchania (lub Fałszowanie) w SQL Server](https://stackoverflow.com/questions/211355/parameter-sniffing-or-spoofing-in-sql-server)


Mam nadzieję, że to Ci pomoże. Z ograniczeniem, że klauzula warunek może być „coś”, to jesteś ograniczony do skanowania całą listę i stosując warunek.


Jeśli istnieją ograniczenia dotyczące klauzuli stan, wtedy można spojrzeć na organizowanie danych do bardziej efektywnie obsługiwać zapytań.


Na przykład, przykładowy kod z „byFirstLetter” słowniku nie pomaga w ogóle z „endswith” zapytania.


Więc tak naprawdę sprowadza się do tego, co pyta chcesz zrobić przed tymi danymi.


W bazach danych, problem ten jest ciężar „optymalizator zapytań”. W typowej bazy danych, jeśli masz bazę danych bez indeksów, oczywiście każde zapytanie będzie skan tabeli. Jak dodać indeksów w tabeli, optymalizator może użyć tych danych do bardziej wyrafinowanych zapytań planuje lepiej dostać się do danych. To w istocie problem, który opisujesz.


Gdy masz bardziej konkretny podzbiór typów kwerend następnie można zrobić lepszą decyzję, co struktura jest najlepsza. Ponadto, należy wziąć pod uwagę ilość danych. Jeśli masz listę 10 elementów każdy mniej niż 100 bajtów, skan wszystko może okazać się najszybciej, co można zrobić, ponieważ masz taką małą ilość danych. Oczywiście, że nie skaluje się do elementów 1M, ale nawet sprytnych technik dostępu nosić koszt w instalacji, konserwacji (jak utrzymanie indeksu) i pamięć.


**EDIT** , na podstawie komentarza


Jeśli jest to auto Nieukończenie, jeśli dane są statyczne, a następnie posortować je i używać przeszukiwanie binarne. Nie jesteś naprawdę dzieje się szybciej niż to.


Jeśli dane są dynamiczne, a następnie zapisać go w zrównoważonym drzewie, i szukać tego. To skutecznie wyszukiwanie binarne, a to pozwala zachować dodać dane losowo.


Coś jeszcze jest jakaś specjalność na tych pojęć. Replikacja [works by reading the transaction log](https://technet.microsoft.com/en-us/library/ms151706%28v=sql.105%29.aspx) .

Ten rodzaj „aktualizacji bez aktualizacji” często nie generuje żadnych rekordów dziennika transakcji.

Więcej informacji na ten temat można znaleźć w artykule Paula White'a [The Impact of Non-Updating Updates](http://sqlblog.com/blogs/paul_white/archive/2010/08/11/the_2D00_impact_2D00_of_2D00_update_2D00_statements_2D00_that_2D00_don_2D00_t_2D00_change_2D00_data.aspx) . Kopię zapasową możesz robić nadal, tylko metoda jest trochę inna. Tu wszystko opisane:
  

  
<https://pl.ccm.net/faq/9576-jak-skutecznie-odzyskac-skasowane-wiadomosci-na-facebooku> Obie alternatywy, które zostały wskazane ma wady i zalety, decyzja zależy od tego jak to plusy i minusy wpływa na aplikację:



> 
> Pobrać wszystkie wartości z bazy danych przy użyciu zwykłego PHP następnie przechowywać je w zmiennej JavaScript, później szukać sekund rozwijanej listy (jeśli wartość pierwszej rozwijanej liście na zmiany wartości) w zmiennej JavaScript (array).
> 
> 
> 


Plusy:


* Minimalizuje petycje http, trzeba tylko jedną prośbę, aby odzyskać całość danych.
* Minimalizuje kwerenda jest potrzebne w bazie danych, na ogół tylko wykonać jedno zapytanie.


Cons:


* Zwiększa ilość pamięci używanej jeśli masz duże ilości danych.
* Jeśli dane zmienia się nieustannie, użytkownicy nie widzą zmian aż odświeżyć całą stronę.



> 
> Jeśli pierwszy rozwijanej liście zmian wartości jest następnie pobrać wartości dla drugiej listy rozwijanej z bazą danych za pomocą technologii AJAX (jQuery).
> 
> 
> 


Plusy:


* Nie trzeba do przechowywania wszystkich danych w pamięci całych jedynie dane, które zostaną wykorzystane, co zmniejsza ilość potrzebnej pamięci.
* Twoje dane są aktualizowane za każdym razem, bez konieczności przeładowania strony tylko zmieniając wybór.


Cons:


* Trzeba wykonać kilka petycji HTTP i biegnie querys z bazą danych przy każdej zmianie wyboru.


Osobiście preferuję metodę 2, jeśli ilość danych jest stosunkowo duża i wydajność nie jest koniecznością. <https://pl.ccm.net/faq/1809-call-of-duty-5-jak-zrobic-kopie-zapasowa-profilu>
  

  
Proszę, tutaj jest opisane. Jest to dość szerokie, ale dam ci tak ogólną odpowiedź, jak tylko mogę.

**CTE ...**

* Są niezindeksowalne (ale mogą używać istniejących indeksów na obiektach, do których istnieją odwołania)
* Nie można mieć ograniczeń
* Są zasadniczo jednorazowe `VIEW` s
* Trwać tylko do momentu uruchomienia następnego zapytania
* Może być rekurencyjny
* Nie masz dedykowanych statystyk (polegaj na statystykach dotyczących podstawowych obiektów)

**#Temp Tables ...**

* Są prawdziwe zmaterializowane tabele, które istnieją w tempdb
* Może być indeksowany
* Może mieć ograniczenia
* Trwaj w życiu obecnego POŁĄCZENIA
* Może odwoływać się do innych zapytań lub podprocedur
* Masz dedykowane statystyki generowane przez silnik

Jeśli chodzi o użycie każdego z nich, mają bardzo różne przypadki użycia.Jeśli masz bardzo duży zestaw wyników lub musisz odwołać się do niego więcej niż raz, umieść go w tabeli `#temp` .Jeśli ma być rekurencyjny, jednorazowy lub po prostu dla uproszczenia logicznego, preferowany jest `CTE` .

Ponadto należy `CTE`**nigdy nie używaj do wykonania**.Prawie nigdy nie przyspieszysz przy użyciu CTE, ponieważ znowu jest to widok jednorazowy.Możesz zrobić z nimi kilka fajnych rzeczy, ale przyspieszenie zapytania nie jest jednym z nich. ukrycie natrętnego komunikatu z “centrum akcji” i kopia [zewnętrznym oprogramowaniem](https://forum.dobreprogramy.pl/t/tworzenie-kopi-zapasowej-systemu/607653/3)? 
a jak chcesz próbować napraw to microsoft przygotował taki poradnik z “obejściem”: 
<https://support.microsoft.com/pl-pl/help/973455/windows-backup-or-restore-errors-0x80070001-0x81000037-or-0x80070003> Jeśli pracujesz jako wykonawca, powiedziałbym, że jest to 100% od twojego pracodawcy. Powiedz im, że osiągnięcie celów, które dla ciebie wyznaczyli, oznacza, że inne rzeczy, które twoim zdaniem powinny być uważane za cele, nie są robione; zapytaj ich, czy chcą dostosować twoje cele. Być może powiedzą Ci, abyś kontynuował swoją pracę, ponieważ Twój czas jest kosztowny i chcą jak najkorzystniejszej relacji jakości do ceny. 


Jeśli pracujesz jako pracownik, możesz mieć więcej swobody w planowaniu sukcesji (lub być może istnieje oczekiwanie, że już to robisz). Wciąż jednak poinformuj o tym kierownika lub menadżera swojego zespołu, ponieważ muszą oni wiedzieć o problemie i o tym, jak Ty się czujesz i jak powinieneś się zachowywać. 


Kilka rzeczy, które mogłyby pomóc w planowaniu sukcesji: 


* Codzienne procesy powinny być w pewnym stopniu udokumentowane, ale jest prawdopodobne, że inni ludzie w Twoim zespole stosują te same procesy i mogą nauczyć ich nowego pracownika. Jeśli nie wszyscy używają podobnych procesów, to jest to aktualny problem, który powinien być rozwiązany; zbierzcie się, przedyskutujcie, który sposób jest najlepszy, przyjdźcie do jakiegoś standardu (za zgodą lub pod przymusem z góry) i użyjcie standardu, gratulacje, które standard może znaleźć się w dokumentacji dla nowicjusza.
* Ważne rzeczy, które są przekazywane za pomocą poczty elektronicznej, spotkań, lub przypadkowych rozmów, muszą zostać przekształcone we wspólny zasób, wszystko od folderu dokumentów na wspólnym dysku do wiki. Istnieje to dziwne przekonanie (przynajmniej tam, gdzie pracowałem), że jeśli coś zostanie przesłane pocztą elektroniczną do wszystkich członków zespołu, to na zawsze będzie to wiedzieć; nie bierze to pod uwagę tego, że skład zespołu się zmienia i że jakiekolwiek szkolenie (jeśli w ogóle się odbędzie) nigdy nie przekaże całej wiedzy, tylko podzbiór często używanej wiedzy.
* (Możliwe, że specyficzny dla oprogramowania) Dokumentuj wyraźnie przeciwintuicyjne procesy lub decyzje projektowe, ważne jest, aby określić, że proces jest uznawany za przeciwintuicyjny i dlaczego tak jest, niezależnie od tego. Na przykład, jeśli Twój klient poprosił Cię o zrobienie czegoś, co wydaje się "nieprawidłowe" ("Nie jestem ekspertem w dziedzinie, ale czy jesteś pewien, że chcesz to zrobić?"), a Ty wyjaśniłeś, dlaczego uważasz, że to było nieprawidłowe i potwierdziłeś, że to było to, czego chciał (jeszcze lepiej, jeśli wyjaśniłeś dlaczego), to należy udokumentować powody, dla których uważałeś, że to było nieprawidłowe i wyjaśnić, dlaczego to było prawidłowe. Że funkcje oprogramowania według specyfikacji nie wystarczą do zastąpienia, będą miały to samo pytanie, co Ty.
* Dla każdego problemu, który napotkasz, a którego rozwiązanie wymaga dużo czasu/badań, dokumentuj problem, objawy, skróconą drogę do rozwiązania (tj.: wiedząc to, co wiesz teraz, jaka była najszybsza droga od rozpoznania objawów do rozwiązania), i rozwiązanie. Objawy są naprawdę ważne dla Twojego zastępstwa, ponieważ uderzą w nie zanim w pełni zrozumieją problem.
* Poprzedni punkt jest jeszcze ważniejszy w odniesieniu do starszych systemów, takich jak biblioteki czy platformy, gdzie nowe wersje są wydawane, ale nie używane w Twoim produkcie. Problemy, które napotkasz w swojej wersji (lub, co gorsza, w interakcjach pomiędzy kilkoma starszymi systemami) mogą zostać rozwiązane w przyszłych wersjach, a więc samo istnienie wady zniknie z publicznej wiedzy, aż do momentu, w którym znalezienie informacji o niej będzie prawie niemożliwe. Można użyć numeru z poprzedniego `rsync` metę. Jest szybki, przenośny, a dla plików `10**6` i każdej rozsądnej strategii tworzenia kopii zapasowych zapewnia on `1%` lub lepszą precyzję.