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

Zalety wydajności SQL Server 2016 Enterprise Edition

16 listopada 2016 r. firma Microsoft ogłosiła kilka bardzo istotnych zmian w SQL Server 2016 Standard Edition, które zostały zaimplementowane w Dodatek Service Pack 1 dla programu SQL Server 2016 (kompilacja 13.0.4001.0). Wiele bardzo przydatnych funkcji związanych z programowalnością, które wcześniej były dostępne tylko w wersji Enterprise, będzie teraz dostępnych w wersji Standard Edition (a także w wersji Web Edition, a nawet Express Edition).

Gdy masz już aplikację bazodanową korzystającą z dodatku Service Pack 1 dla SQL Server 2016 Standard Edition (lub nawet niższą edycję), możesz po prostu przeprowadzić aktualizację do wersji Enterprise Edition, aby uzyskać jeszcze większą skalowalność i wydajność, korzystając z wyższych limitów licencji dla gniazd , rdzenie i pamięć w wersji Enterprise Edition, jak opisano tutaj.

Otrzymasz również wiele innych nieodłącznych korzyści związanych z wydajnością, które są obecne w wersji Enterprise Edition, a także wiele ulepszeń w zarządzaniu, które znacznie ułatwią Ci życie jako administratorowi danych.

Indeksy kolumn

Jeśli używasz indeksów Columnstore, automatycznie uzyskujesz następujące korzyści w zakresie wydajności podczas korzystania z wersji Enterprise Edition:

  • Zbiorcze przesuwanie: Ta funkcja wydajności często zapewnia wzrost wydajności zapytań 2X-4X, wypychając kwalifikujące się agregaty do węzła SCAN, co zmniejsza liczbę wierszy wychodzących z tego iteratora.
  • Tworzenie/przebudowa indeksu: Enterprise Edition może budować/odbudować indeksy magazynu kolumn z wieloma rdzeniami procesora, podczas gdy Standard Edition używa tylko jednego rdzenia procesora. Ma to dość znaczący wpływ na czas, jaki upłynął dla tych operacji, w zależności od Twojego sprzętu.
  • Lokalne agregaty: Enterprise Edition może używać agregacji lokalnych do filtrowania liczby wierszy przechodzących przez węzeł SCAN, zmniejszając ilość pracy, jaką muszą wykonać kolejne węzły zapytania. Możesz to potwierdzić, szukając atrybutu „ActualLocallyAggregatedRows” w pliku XML planu wykonania zapytania.
  • Optymalizacja wielu danych z jedną instrukcją (SIMD): Ta funkcja wykorzystuje zestaw instrukcji sprzętowych, które są w stanie przetwarzać tablicę danych w jednej instrukcji, co znacznie przyspiesza agregację operacji. Te instrukcje sprzętowe są obecne na wszystkich nowoczesnych procesorach (z obsługą AVX), ale są używane tylko przez Enterprise Edition.
  • Przesunięcie w dół predykatu ciągu: Ta funkcja wydajności może poprawić wydajność zapytań używających predykatów w kolumnach ciągów przez wypchnięcie tych predykatów do węzła SCAN. Może to znacznie zmniejszyć ilość pracy, którą muszą wykonać kolejne węzły.
  • Stopień równoległości: Zapytania w trybie wsadowym są ograniczone do MAXDOP =2 w wersji Standard Edition. Enterprise Edition może korzystać ze wszystkich rdzeni, które są obecne dla instancji. Może to być bardzo istotne w przypadku większych zapytań na typowym, nowoczesnym sprzęcie serwerowym.
  • Limity pamięci: Pula obiektów Columnstore jest ograniczona do 32 GB na instancję w wersji Standard Edition. Enterprise Edition nie ma żadnych ograniczeń pamięci dla puli obiektów Columnstore.

Aby przetestować te twierdzenia dotyczące wydajności, przeprowadziłem kilka dość prostych testów w bazie danych Microsoft ContosoRetailDW na mojej stacji roboczej Intel Core i7-6700K. Mam zainstalowane dwie nazwane instancje SQL Server 2016 SP1, jedna używająca wersji Standard Edition, a druga korzystająca z wersji Developer Edition (która jest odpowiednikiem Enterprise Edition).

Wszystkie konfiguracje i właściwości na poziomie instancji i bazy danych są identyczne w obu instancjach, a lokalizacje plików bazy danych użytkownika i tempdb znajdują się w osobnych katalogach na tym samym, oddzielnym urządzeniu pamięci masowej flash dla każdej instancji. Poziom zgodności bazy danych został zmieniony na 130 w obu przypadkach, a podstawowa konfiguracja systemu Windows i sprzęt są takie same w obu instancjach. Jedyną różnicą jest tutaj edycja każdej instancji.

Pierwszy test to proste zapytanie (zaadaptowane przez Niko Neugebauera), które umożliwia SQL Server 2016 użycie agregującego pushdown w tabeli FactOnlineSales. Wyniki przedstawiono w Tabeli 1.

Wydanie Czas, który upłynął (ms)
Wersja standardowa 30
Wersja dla programistów 1
Różnica czasu 29
% poprawy 96,7%

Tabela 1:Zagregowane porównanie przesuwania w dół

Następnym testem jest mierzenie czasu potrzebnego do zbudowania klastrowanego indeksu magazynu kolumn w tabeli FactOnlineSales z 12,6 milionami wierszy. Wyniki przedstawiono w Tabeli 2.

Wydanie Czas, który upłynął (ms)
Wersja standardowa 42197
Wersja dla programistów 14 384
Różnica czasu 27 813
% poprawy 65,9%

Tabela 2:Porównanie indeksów magazynu kolumn w klastrach

Następnym testem jest pomiar czasu, jaki zajmuje odbudowanie klastrowanego indeksu magazynu kolumn w tej samej tabeli FactOnlineSales. Wyniki przedstawiono w tabeli 3.

Wydanie Czas, który upłynął (ms)
Wersja standardowa 33 105
Wersja dla programistów 11 460
Różnica czasu 21 645
% poprawy 65,4%

Tabela 3:Odbudowanie porównania indeksu klastrowanego magazynu kolumn

Następny test to kolejne proste zapytanie, które pozwala SQL Server 2016 na użycie lokalnej agregacji w tabeli FactOnlineSales. Wyniki przedstawiono w Tabeli 4.

Wydanie Czas, który upłynął (ms)
Wersja standardowa 122
Wersja dla programistów 83
Różnica czasu 39
% poprawy 32,0%

Tabela 4:Porównanie agregacji lokalnej

Następny test to kolejne proste zapytanie, które umożliwia SQL Server 2016 użycie predykatu predykatu ciągu w tabelach FactOnlineSales i DimPromotion. Wyniki przedstawiono w tabeli 5.

Wydanie Czas, który upłynął (ms)
Wersja standardowa 2683
Wersja dla programistów 1221
Różnica czasu 1466
% poprawy 54,6%

Tabela 5:Porównanie predykatów ciągów znaków

To tylko kilka prostych przykładów wbudowanych zalet wydajnościowych indeksów magazynu kolumn w SQL Server 2016 Enterprise Edition w porównaniu z SQL Server 2016 Standard Edition na tym samym sprzęcie. Jeśli chcesz naprawdę zagłębić się w indeksy Columnstore (co może być bardzo skuteczną funkcją w przypadku niektórych obciążeń), powinieneś dodać do zakładek i przeczytać długą serię postów Niko Neugebauera na columnstore.net.

Wydajność DBCC CHECKDB

Innym ulepszeniem wydajności zarządzania, które jest obecne w SQL Server 2016 Enterprise Edition, jest wydajność DBCC CHECKDB. W wersji Standard DBCC CHECKDB używa tylko jednego rdzenia procesora, podczas gdy w wersji Enterprise może korzystać ze wszystkich dostępnych rdzeni. To zachowanie nie zmieniło się w stosunku do poprzednich wersji programu SQL Server. SQL Server 2016 umożliwia ograniczenie liczby rdzeni, których DBCC CHECKDB może używać z nową opcją WITH (MAXDOP =x).

Uruchomienie DBCC CHECKDB z opcją WITH PHYSICAL_ONLY na nieco większej bazie danych (około 38 GB), którą posiadam, dało wyniki pokazane w Tabeli 6.

Wydanie Czas, który upłynął (ms)
Wersja standardowa 58 492
Wersja dla programistów 24 897
Różnica czasu 33 595
% poprawy 57,4%

Tabela 6:Porównanie DBCC CHECKDB Z PHYSICAL_ONLY

Uruchomienie standardowej DBCC CHECKDB w tej samej bazie danych dało wyniki przedstawione w Tabeli 7.

Wydanie Czas, który upłynął (ms)
Wersja standardowa 435,039
Wersja dla programistów 119 767
Różnica czasu 315 272
% poprawy 72,5%

Tabela 7:Porównanie DBCC CHECKDB

Bardzo ważnym czynnikiem w wydajności DBCC CHECKDB jest wydajność odczytu sekwencyjnego ze wszystkich jednostek LUN, w których znajdują się pliki danych bazy danych. Możesz to łatwo sprawdzić, uruchamiając polecenie BACKUP DATABASE na urządzeniu NUL (upewniając się, że używasz opcji COPY_ONLY i NO_COMPRESSION). To pokaże ci efektywną wydajność odczytu sekwencyjnego, jak pokazano w tym przykładzie z mojej stacji roboczej:

BACKUP DATABASE pomyślnie przetworzył 5048514 stron w 16,115 sekund (2447,502 MB/s).

Pamiętaj, że wszystkie te testy zostały przeprowadzone na pojedynczym, czterordzeniowym procesorze do komputerów stacjonarnych. Serwer wieloprocesorowy z większą liczbą rdzeni procesora wykaże jeszcze większą poprawę wydajności w wielu z tych testów.

Celem tego wszystkiego jest pokazanie kilku konkretnych przykładów ulepszeń wydajności, które można zobaczyć, po prostu przez uaktualnienie z SQL Server 2016 Standard Edition SP1 do SQL Server 2016 Enterprise Edition SP1 na tym samym sprzęcie, bez wprowadzania zmian w bazie danych lub aplikacji . Ta lista w żadnym wypadku nie jest wyczerpująca, ponieważ istnieje również wiele innych korzyści.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyniki SSMS do siatki - CRLF nie zachowane w kopiowaniu/wklejaniu - jakieś lepsze techniki?

  2. SQL:Wybierz dynamiczną nazwę kolumny na podstawie zmiennej

  3. Jak przekonwertować uniksowy znacznik czasu na wartość daty/godziny w SQL Server

  4. Dlaczego użycie znaku podkreślenia w filtrze LIKE daje mi wszystkie wyniki?

  5. datetime vs datetime2 w SQL Server:jaka jest różnica?