Блокирането на SQL Server е нормална черта на системите за бази данни на SQL Server. Блокирането възниква, когато SQL Server обслужва заявки от множество клиенти и различни процеси изискват едни и същи ресурси по едно и също време. Ако ресурсът се използва, той е заключен и недостъпен за последващи заявки, така че процесът се отлага, докато ресурсът бъде освободен и отново стане достъпен. Блоковете на SQL Server обикновено се разрешават сами без забележим ефект върху производителността. Въпреки това, понякога блоковете причиняват влошаване на производителността или защото първоначалният процес заключва ресурса за продължителен период от време, преди да го освободи, или защото първоначалният процес изобщо не освобождава ресурса, което прави ресурсите недостъпни, докато блокът не бъде решени ръчно.
Когато набор от ресурси е блокиран за значителен период от време, качеството на производителността намалява до степен, че потребителите на системата започват да забелязват проблеми. Тези проблеми включват неща като заявки, които отнемат много време за изпълнение или изтичане на времето или потребителите не могат да запазят екраните, които са променили.
Как да коригирам блокове на SQL сървър
Краткосрочното решение за блокиране на SQL Server е да идентифицирате и ръчно отблокирате транзакцията, когато забележите, че производителността се влияе отрицателно от блок или блокове.
След като потвърдите наличието на блок на SQL Server, проверете монитора на активността на SQL Server и убийте заявките, които причиняват най-много проблеми. Можете също да използвате SQL скриптове за непрекъснато наблюдение на състоянието на заключване и блокиране на SQL Server. Брент Озар предлага добавяне на някои специфични за блокиране броячи на производителност, така че SQL Server да ви уведомява, когато сте надхвърлили определените прагове за блокиране.
Как да предотвратим блокиране на SQL сървър
Полезно е администраторът на база данни да знае как да коригира блок на SQL Server. Но в името на поддържането на високопроизводителна система е още по-добре да знаете как да предотвратите – или поне да сведете до минимум – появата на блокиране. Ето четири съвета за минимизиране на някои често срещани типове блокиране на SQL Server:
1. Използвайте индекси
Използването на клъстерирани индекси в таблици с голяма употреба помага за намаляване на блокирането, като подканва оптимизатора на заявки да стартира търсене на индекс вместо сканиране на индекс. Когато само записът, който се актуализира, е заключен, следващите процеси могат да заобиколят заключването и могат да бъдат завършени.
Също така е важно да се уверите, че изразите UPDATE и DELETE използват индекси. Индексите помагат на операторите UPDATE и DELETE да намалят броя на заключванията за модификация, които придобиват, като използват или неклъстерирани индекси, или подсказки за индекси за премахване на заключвания.
2. Изчистете заявките си
Една от най-добрите практики за избягване на блокове на SQL Server е да се разделят дългите транзакции на множество по-кратки транзакции. Дългосрочните заявки държат заключване за продължителността на транзакцията, което прави ресурса недостъпен за други процеси. Разделянето на дълги транзакции на къси поддържа движението на данните.
Помислете за използването на настройка на SQL Server, за да направите заявките възможно най-ефективни. Добрият оптимизатор на заявки ще пише и пренаписва заявки, докато не бъдат конфигурирани да намалят броя на блоковете, които могат да забавят производителността.
3. Идентифицирайте основната причина за блокиране на SQL Server
Проследяването на показателите за ефективност във времето е чудесен начин да избегнете блокирането на SQL Server. Като откриете кои сесии често са блокирани и какви изрази са включени, можете да определите курс на действие за премахване на основните причини за повтарящи се блокове чрез индексиране, оптимизиране на заявки или други средства.
Друго място за търсене на основната причина за блокиране е работното натоварване на системата. Изпълнете анализ на работното натоварване, за да определите дали е имало увеличение. Твърде тежкото работно натоварване ще доведе до блокиране на SQL Server, тъй като нарастващият брой заявки се натрупват, чакащи достъп до заключени ресурси. Може да се наложи да добавите индекси или да разпределите натоварването между множество бази данни, за да разрешите проблеми с производителността на голямото натоварване.
4. Поддържайте статистиката си актуална
Остарелите статистически данни може да задействат неефективни планове за заявки, тъй като планът не е актуализиран, за да отчете промените. SQL Server ще стартира обхождане на търсене, за да търси преместени или липсващи данни, което от своя страна ще създаде блокове.
Най-ефективният начин да поддържате статистиката актуална е да автоматизирате възможно най-много актуализации. Когато не можете да планирате автоматични актуализации, не забравяйте да добавите ръчни актуализации към контролния списък за планирана поддръжка, за да сте сигурни, че актуализациите се извършват редовно.
Блокирането на SQL Server може да е факт от живота на DBA, но има начини да смекчите въздействието му върху производителността на вашата база данни на SQL Server. Прекъснете цикъла блок-деблокиране, като приложите някои от стратегиите, обсъдени по-горе. С малко планиране, оптимизиране и автоматизация е възможно да се намали появата на блокиране на SQL Server и, при някои обстоятелства, да се изкорени напълно.