Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Bardzo duże tabele w SQL Server

Zgadzając się z Marc i Unkown powyżej ... 6 indeksów w indeksie klastrowym to zdecydowanie za dużo, szczególnie w tabeli, która ma tylko 14 kolumn. Nie powinieneś mieć więcej niż 3 lub 4, jeśli tak, powiedziałbym 1 lub może 2. Możesz wiedzieć, że indeks klastrowany jest rzeczywistą tabelą na dysku, więc po wstawieniu rekordu silnik bazy danych musi go posortować i umieść go w uporządkowanym i uporządkowanym miejscu na dysku. Indeksy nieklastrowane nie są, obsługują „tabele” wyszukiwania. Moje bazy VLDB są ułożone na dysku (INDEKS CLUSTERED) zgodnie z pierwszym punktem poniżej.

  1. Zredukuj indeks klastrowy do 1 lub 2. Najlepszymi polami do wyboru są TOŻSAMOŚĆ (INT), jeśli je masz, lub pole daty, w którym pola są dodawane do bazy danych, lub inne pole, które jest naturalny sposób dodawania danych do bazy danych. Chodzi o to, że próbujesz zachować te dane na dole tabeli ... lub ułożyć je na dysku w najlepszy (90%+) sposób, aby odczytać rekordy. Dzięki temu nie ma żadnej reorganizacji lub wystarczy jedno uderzenie, aby uzyskać dane we właściwym miejscu w celu uzyskania najlepszego odczytu. Pamiętaj, aby umieścić usunięte pola w indeksach nieklastrowanych, aby nie stracić skuteczności wyszukiwania. NIGDY nie umieszczałem więcej niż 4 pól na moich VLDB. Jeśli masz pola, które są często aktualizowane i są uwzględnione w twoim indeksie klastrowym, OUCH, spowoduje to reorganizację rekordu na dysku i spowoduje KOSZTOWNĄ fragmentację.
  2. Sprawdź współczynnik wypełnienia w swoich indeksach. Im wyższy numer współczynnika wypełnienia (100), tym bardziej pełne będą strony danych i strony indeksowe. W stosunku do liczby posiadanych rekordów i liczby wstawianych rekordów zmienisz współczynnik wypełnienia # (+ lub -) indeksów nieklastrowanych, aby umożliwić wypełnienie przestrzeni podczas wstawiania rekordu. Jeśli zmienisz indeks klastrowany na sekwencyjne pole danych, nie będzie to miało większego znaczenia w przypadku indeksu klastrowanego. Ogólna zasada (IMO), współczynnik wypełnienia 60-70 dla wysokich zapisów, 70-90 dla średnich zapisów i 90-100 dla wysokich odczytów/niskich zapisów. Zmniejszenie współczynnika wypełnienia do 70 oznacza, że ​​na każde 100 rekordów na stronie zapisywanych jest 70 rekordów, co pozostawi wolne miejsce na 30 rekordów dla nowych lub zreorganizowanych rekordów. Zjada więcej miejsca, ale z pewnością jest lepszy od konieczności DEFRAGOWANIA każdej nocy (patrz 4 poniżej)
  3. Upewnij się, że w tabeli znajdują się statystyki. Jeśli chcesz przeszukać bazę danych w celu utworzenia statystyk za pomocą „sp_createstats 'indexonly'”, SQL Server utworzy wszystkie statystyki dotyczące wszystkich indeksów, które silnik zgromadził jako wymagające statystyki. Nie pomijaj jednak atrybutu 'indexonly', bo dodasz statystyki dla każdego pola, co wtedy nie byłoby dobre.
  4. Sprawdź tabelę/indeksy za pomocą polecenia DBCC SHOWCONTIG, aby zobaczyć, które indeksy ulegają największej fragmentacji. Nie będę tu wchodzić w szczegóły, po prostu wiedz, że musisz to zrobić. Następnie na podstawie tych informacji zmień współczynnik wypełnienia w górę lub w dół w stosunku do zmian, w jakich indeksy ulegają zmianom i jak szybko (w czasie).
  5. Skonfiguruj harmonogram zadań, który będzie wykonywał w trybie online (DBCC INDEXDEFRAG) lub offline (DBCC DBREINDEX) poszczególne indeksy w celu ich defragmentacji. Ostrzeżenie:nie wykonuj DBCC DBREINDEX na tak dużym stole, jeśli nie jest to w czasie konserwacji, ponieważ spowoduje to wyłączenie aplikacji ... zwłaszcza w przypadku INDEKSU KLASTRA. Zostałeś ostrzeżony. Przetestuj i przetestuj tę część.
  6. Użyj planów wykonania, aby zobaczyć, jakie istnieją SCANS i FAT PIPES i dostosuj indeksy, a następnie defragmentuj i przepisuj zapisane procedury, aby pozbyć się tych gorących punktów. Jeśli widzisz w swoim planie wykonania obiekt RED, oznacza to, że nie ma statystyk dotyczących tego pola. To źle. Ten krok to bardziej „sztuka niż nauka”.
  7. W godzinach poza szczytem uruchom funkcję UPDATE STATISTICS WITH FULLSCAN, aby udostępnić silnikowi zapytań jak najwięcej informacji o dystrybucji danych. W przeciwnym razie wykonaj standardowe AKTUALIZUJ STATYSTYKI (ze standardowym 10% skanowaniem) na tabelach w nocy lub częściej, jeśli uznasz to za zgodne z twoimi obserwacjami, aby upewnić się, że silnik ma więcej informacji o dystrybucji danych, aby uzyskać dane w celu wydajnego pobierania.

Przepraszam, że to tak długo, ale to bardzo ważne. Podaję tutaj tylko minimalne informacje, ale pomogę mnóstwo. Istnieją pewne przeczucia i obserwacje, które dotyczą strategii stosowanych przez te punkty, które będą wymagały twojego czasu i testów.

Nie musisz przechodzić do wersji Enterprise. Zrobiłem jednak, aby uzyskać funkcje, o których mówiono wcześniej, z partycjonowaniem. Ale zrobiłem SZCZEGÓLNIE, aby mieć znacznie lepsze możliwości wielowątkowości z wyszukiwaniem i defragmentacją online i konserwacją ... W edycji Enterprise jest znacznie lepiej i bardziej przyjaźnie z VLDB. Wersja Standard nie obsługuje również wykonywania DBCC INDEXDEFRAG z bazami danych online.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uruchom wszystkie pliki SQL w katalogu

  2. jak zwiększyć wartość w kolumnach liczb całkowitych o 1 w SQL?

  3. Idealna burza do uaktualnienia do nowoczesnej wersji SQL Server

  4. Zapytanie SQL do konwersji formatu daty na inny

  5. Porównaj usuniętą i wstawioną tabelę w SQL Server 2008