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

Ukryte ulepszenia wydajności i zarządzania w SQL Server 2012/2014

Kilka lat temu firma Microsoft opublikowała bardzo przydatny artykuł z Bazy wiedzy o tym, jak skonfigurować SQL Server 2012 i SQL Server 2014 w celu uzyskania najlepszej wydajności przy dużych obciążeniach na większym, nowoczesnym sprzęcie serwerowym. Mój kolega Aaron Bertrand i ja mieliśmy niewielką rolę w weryfikacji oryginalnego artykułu KB. Ten artykuł KB był od tego czasu całkiem aktualny i nadal jest świetnym źródłem przydatnych opcji konfiguracyjnych dla SQL Server 2012/2014.

Od tego czasu Microsoft przeniósł również szereg bardzo przydatnych ulepszeń wydajności z SQL Server 2016 do SQL Server 2012 i SQL Server 2014, o ile masz wystarczająco nową wersję jednej z tych starszych wersji programu SQL Server. Firma Microsoft zaleca aktywne wdrażanie zarówno dodatków Service Pack, jak i aktualizacji zbiorczych, aby zminimalizować ryzyko napotkania problemów, które zostały poprawione w późniejszych kompilacjach programu SQL Server.

Jako dodatkowy bonus otrzymasz również nowe funkcje i inne ulepszenia, takie jak opisałem w tym artykule. W większości przypadków trzeba będzie włączyć flagę śledzenia, aby skorzystać z tych ulepszeń wydajności.

Menedżer brudnych stron

Pierwszym z nich jest użycie Dirty Page Manager (DPM) w połączeniu z włączaniem pośrednich punktów kontrolnych dla baz danych użytkownika i systemu w SQL Server 2012 i SQL Server 2014. Pośrednie punkty kontrolne są domyślne dla nowych baz danych tworzonych w SQL Server 2016 i są zalecana konfiguracja dla instancji SQL Server 2016.

Jeśli włączysz globalną flagę śledzenia 3449 (i korzystasz z programu SQL Server 2012 SP3 CU3 lub nowszego lub SQL Server 2014 SP1 CU7 lub nowszego), uzyskasz znacznie lepszą wydajność, unikając wywołania FlushCache w wielu różnych typowych scenariuszach, takich jak zapasowa baza danych, zapasowy dziennik transakcji, tworzenie bazy danych, dodawanie pliku do bazy danych, odzyskiwanie bazy danych, zmniejszanie pliku bazy danych i podczas „pełnego” zamykania programu SQL Server. Flaga śledzenia 3449 zaczyna obowiązywać natychmiast, bez konieczności ponownego uruchamiania. Należy również ustawić TF 3449 jako flagę śledzenia uruchamiania.

Unikanie tych wywołań FlushCache jest szczególnie ważne, gdy masz dużą ilość pamięci RAM (ponad 256 GB) na serwerze bazy danych, z korzyścią rosnącą wraz z rozmiarem używanej puli buforów. Więcej informacji o tym ulepszeniu można znaleźć w tym poście na blogu:

Następnie, jeśli korzystasz z programu SQL Server 2012 SP4 lub SQL Server 2014 SP2 (lub nowszego), uzyskasz szereg innych nowych ulepszeń wydajności, takich jak automatyczne partycjonowanie Soft NUMA i dynamiczne skalowanie obiektów pamięci, które zostały pierwotnie wprowadzone w SQL Server 2016

Automatyczne miękkie partycjonowanie NUMA

Zarówno w dodatku SP4 dla programu SQL Server 2012, jak i dodatku SP2 dla programu SQL Server 2014, po ustawieniu Flaga śledzenia 8079 jako flaga śledzenia uruchamiania SQL Server będzie skanować układ sprzętu podczas uruchamiania aparatu i automatycznie skonfiguruje Soft NUMA w systemach zgłaszających 8 lub więcej rdzeni fizycznych na węzeł NUMA. Automatyczne miękkie zachowanie NUMA obsługuje technologię Hyperthreading (procesor HT/logiczny), co oznacza, że ​​działa zarówno z technologią Intel Hyper-Threading, jak i AMD SMT. Podczas określania optymalnego układu miękkich węzłów NUMA informacje o procesorze logicznym są odpytywane i wykorzystywane w celu zapobieżenia grupowaniu węzłów tylko logicznych i tylko fizycznych, które mogłyby prowadzić do różnic w wydajności między miękkimi węzłami NUMA.

Obecne procesory serwerów mogą mieć do 32 rdzeni fizycznych w jednym węźle NUMA, co może ujawnić problemy skalowalności podobne do SMP w obrębie pojedynczego węzła NUMA sprzętowego. Microsoft twierdzi, że widzi zauważalną poprawę wydajności dzięki tej funkcji, korzystając z wewnętrznego zestawu testowego SQL Server 2016:

„Dzięki automatycznemu soft-NUMA obsługującemu HT uzyskujemy do 30% wzrost wydajności zapytań, gdy DOP jest ustawiony na liczbę fizycznych rdzeni w gnieździe (w tym przypadku 12) przy użyciu automatycznej miękkiej NUMA”.

Jak zawsze, dobrym pomysłem jest przetestowanie wydajności obciążenia za pomocą programu Automatic Soft NUMA przed użyciem go w środowisku produkcyjnym.

Dynamiczne skalowanie obiektów pamięci

Zarówno w programie SQL Server 2012 z dodatkiem SP4, jak i SQL Server 2014 z dodatkiem SP2 program SQL Server będzie dynamicznie partycjonować obiekty pamięci na podstawie liczby węzłów NUMA i logicznych rdzeni procesorów w celu lepszego skalowania na nowoczesnym sprzęcie serwerowym. Celem promocji dynamicznej jest automatyczne partycjonowanie obiektu pamięci bezpiecznego wątku (CMEMTHREAD), jeśli stanie się on wąskim gardłem.

Niepartycjonowane obiekty pamięci będą dynamicznie promowane do partycjonowania przez węzeł NUMA (liczba partycji jest równa liczbie węzłów NUMA) na podstawie obciążenia i wąskiego gardła, a obiekty pamięci podzielone na partycje przez węzeł NUMA mogą być dalej promowane do partycjonowania przez logiczne rdzenie procesora (liczba partycji jest równa liczbie logicznych rdzeni procesora). To ulepszenie eliminuje potrzebę śledzenia flagi 8048 po zainstalowaniu dodatku SQL 2014 SP2 lub SQL Server 2012 SP4.

Ulepszenie blokady spinlock SOS_RWLock

W dodatku SP2 dla programu SQL Server 2014 są ulepszenia (ponownie przeniesione z programu SQL Server 2016), które eliminują potrzebę blokad spinlock dla operacji SOS_RWLock. Microsoft opisuje to ulepszenie bardziej szczegółowo w następujący sposób:

„SOS_RWLock jest prymitywem synchronizacji używanym w różnych miejscach w bazie kodu SQL Server. Jak sama nazwa wskazuje, kod może mieć wielu współdzielonych (czytelnicy) lub jednego (zapisującego). To ulepszenie eliminuje potrzebę spinlock dla SOS_RWLock i zamiast tego używa techniki bez blokad podobne do OLTP w pamięci. Dzięki tej zmianie wiele wątków może równolegle odczytywać strukturę danych chronioną przez SOS_RWLock bez wzajemnego blokowania, a tym samym zapewniania zwiększonej skalowalności. Przed tą zmianą starsza implementacja spinlock umożliwiała tylko jeden wątek uzyskać SOS_RWLock na raz, nawet w celu odczytania struktury danych."

Otrzymasz również szereg przydatnych ulepszeń w zakresie zarządzania zarówno w dodatku SP4 dla programu SQL Server 2012, jak i dodatku SP2 dla programu SQL Server 2014. Możesz przeczytać o tych ulepszeniach bardziej szczegółowo w tych wpisach na blogu:

  • Wydanie dodatku Service Pack 4 (SP4) dla SQL Server 2012!
  • Serwer SQL Server 2014 Service Pack 2 jest już dostępny !!!

Kluczowym wnioskiem z tego wszystkiego jest to, że jeśli używasz SQL Server 2012 (który wyszedł z głównego nurtu 11 lipca 2017), chcesz być na SQL Server 2012 SP4, a jeśli używasz SQL Server 2014, chcesz być na SQL Server 2014 SP2 lub nowszym. Aby skorzystać z tych ulepszeń, musisz również włączyć odpowiednie flagi śledzenia i ustawić odpowiednie właściwości bazy danych.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy MS-SQL AND/OR jest warunkowy (wykonywanie oceny zwarcia)?

  2. DateTime2 vs DateTime w SQL Server

  3. Rzadkie kolumny w SQL Server:wpływ na czas i przestrzeń

  4. Jak podzielić wartości z jednej kolumny na wartości z wielu kolumn?

  5. Jak zmienić domyślny język dla SQL Server?