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.