Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Скрити подобрения в производителността и управляемостта в SQL Server 2012 / 2014

Преди няколко години Microsoft публикува много полезна статия от базата знания за това как да конфигурирате SQL Server 2012 и SQL Server 2014 за най-добра производителност с тежки натоварвания на по-голям, модерен сървърен хардуер. Моят колега Арън Бертран и аз имахме малка роля в проверката на оригиналната статия в KB. Тази статия от KB се поддържа доста добре актуална оттогава и все още е чудесна справка за полезни опции за конфигурация за SQL Server 2012/2014.

Оттогава Microsoft също така пренесе редица много полезни подобрения в производителността от SQL Server 2016 в SQL Server 2012 и SQL Server 2014, стига да сте на достатъчно нова версия на някоя от тези по-стари версии на SQL Server. Microsoft препоръчва проактивно да внедрите както сервизни пакети, така и сборни актуализации, за да сведете до минимум вероятността от възникване на проблеми, които са били коригирани в по-късни версии на SQL Server.

Като допълнителен бонус ще получите и нови функции и други подобрения, както описвам в тази статия. В повечето случаи ще трябва да активирате флаг за проследяване, за да се възползвате от тези подобрения в производителността.

Мръсен мениджър на страници

Първо е използването на Dirty Page Manager (DPM) във връзка с разрешаването на непреки контролни точки за вашите потребителски и системни бази данни в SQL Server 2012 и SQL Server 2014. Индиректните контролни точки са по подразбиране за новите бази данни, създадени на SQL Server 2016, и това е препоръчителна конфигурация за екземпляри на SQL Server 2016.

Ако активирате глобален Trace Flag 3449 (и сте на SQL Server 2012 SP3 CU3 или по-нова версия или SQL Server 2014 SP1 CU7 или по-нова версия), ще получите много по-добра производителност, като избегнете извикване на FlushCache в редица различни често срещани сценарии, като например архивиране на база данни, архивен регистър на транзакциите, създаване на база данни, добавяне на файл към база данни, възстановяване на база данни, свиване на файл на база данни и по време на „изящно“ изключване на SQL Server. Trace Flag 3449 влиза в сила незабавно, без да се изисква рестартиране. Трябва също да зададете TF 3449 като флаг за стартиране на проследяване.

Избягването на тези извиквания на FlushCache е особено важно, когато имате голямо количество RAM (повече от 256 GB) във вашия сървър на база данни, като ползата се увеличава с размера на вашия буферен пул, който се използва. Можете да прочетете за това подобрение по-подробно в тази публикация в блога:

След това, ако използвате SQL Server 2012 SP4 или SQL Server 2014 SP2 (или по-нова версия), ще получите редица други нови подобрения в производителността, като автоматично Soft NUMA разделяне и динамично мащабиране на обекти на паметта, които първоначално бяха въведени в SQL Server 2016

Автоматично меко NUMA разделяне

И в SQL Server 2012 SP4, и в SQL Server 2014 SP2, когато зададете Trace Flag 8079 като флаг за проследяване при стартиране, SQL Server ще сканира хардуерното оформление по време на стартиране на двигателя и автоматично ще конфигурира Soft NUMA на системи, отчитащи 8 или повече физически ядра на NUMA възел. Автоматичното меко поведение на NUMA е наясно с Hyperthreading (HT/логически процесор), което означава, че работи както с Intel Hyper-Threading, така и с AMD SMT. Когато се определя оптималното оформление на мекия NUMA възел, информацията за логическата CPU се запитва и се използва за предотвратяване на групиране само на логически и само физически възли, което може да доведе до вариации в производителността в меките NUMA възли.

Текущите сървърни процесори могат да имат до 32 физически ядра в един NUMA възел, което може да изложи подобни на SMP проблеми с мащабируемостта в рамките на един хардуерен NUMA възел. Microsoft твърдят, че виждат забележимо подобрение на производителността от тази функция, използвайки техния вътрешен SQL Server 2016 тестов ремък:

„С HT Aware auto soft-NUMA, ние получаваме до 30% печалба в производителността на заявката, когато DOP е настроен на броя физически ядра на сокет (12 в този случай) с помощта на Automatic Soft NUMA.“

Както винаги, добра идея е да тествате производителността на вашето работно натоварване с Automatic Soft NUMA, преди да го използвате в производството.

Динамично мащабиране на обекти в паметта

И в SQL Server 2012 SP4, и в SQL Server 2014 SP2, SQL Server ще разделя динамично обекти на паметта въз основа на броя на NUMA възли и логически процесорни ядра, за да се мащабира по-добре на съвременния сървърен хардуер. Целта на динамичната промоция е автоматично да се раздели обект на памет, безопасен за нишки (CMEMTHREAD), ако се превърне в тесно място.

Неразделените обекти на паметта ще бъдат динамично насърчавани да бъдат разделени от NUMA възел (броят на дяловете е равен на броя на NUMA възлите) въз основа на работното натоварване и тесното място, а обектите на паметта, разделени от NUMA възел, могат допълнително да бъдат насърчавани да бъдат разделени от логически ядра на процесора (броят на дяловете е равен на броя на логическите ядра на процесора). Това подобрение елиминира необходимостта от Trace Flag 8048, след като имате инсталиран SQL 2014 SP2 или SQL Server 2012 SP4.

Подобрение на SOS_RWLock Spinlock

В SQL Server 2014 SP2 има подобрения (отново пренесени от SQL Server 2016), които премахват необходимостта от заключване за SOS_RWLock операции. Microsoft описва това подобрение по-подробно по следния начин:

"SOS_RWLock е примитив за синхронизиране, използван на различни места в кодовата база на SQL Server. Както подсказва името, кодът може да има няколко споделени (четци) или единична (записваща) собственост. Това подобрение премахва необходимостта от заключване за SOS_RWLock и вместо това използва техники без заключване, подобни на OLTP в паметта. С тази промяна много нишки могат успоредно да четат структура от данни, защитена от SOS_RWLock, без да се блокират една друга и по този начин осигуряват повишена мащабируемост. Преди тази промяна по-старата реализация на spinlock позволяваше само една нишка да придобийте SOS_RWLock наведнъж, дори за да прочетете структура от данни."

Освен това ще получите редица полезни подобрения в управляемостта както в SQL Server 2012 SP4, така и в SQL Server 2014 SP2. Можете да прочетете за тези подобрения по-подробно в тези публикации в блога:

  • Издаден SQL Server 2012 Service Pack 4 (SP4)!
  • SQL Server 2014 Service Pack 2 вече е наличен !!!

Основният извод от всичко това е, че ако използвате SQL Server 2012 (който изпадна от основната поддръжка на 11 юли 2017 г.), искате да сте на SQL Server 2012 SP4, докато ако използвате SQL Server 2014, искате да използвате SQL Server 2014 SP2 или по-нова версия. Също така ще трябва да активирате приложимите флагове за проследяване и да зададете съответните свойства на базата данни, за да се възползвате от тези подобрения.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Моето поле VARCHAR(MAX) се ограничава до 4000; Какво дава?

  2. SQL Сравнение на низове, чувствителни към регистри

  3. Клауза WHERE за тип данни на SQL Server Text

  4. Как да променя db схемата на dbo

  5. Как мога да намеря символи Unicode/не-ASCII в поле NTEXT в таблица на SQL Server 2005?