Статията предлага важни съвети за избягване на задънени улици в SQL Servers
Въпреки че SQL Server е свидетел на огромна еволюция през последните няколко години, потребителите все още редовно се сблъскват със ситуацията на задънена улица. В идеалния случай сървърът на база данни трябва да може да извлича множество заявки, но често води до блокове. Конфликтите, при които един процес очаква освобождаването на друг ресурс, се наричат блокове. И тогава има Deadlocks.
Представете си ситуация, при която един човек моли втория да пусне ресурс, а вторият чака първия да пусне. В резултат и двамата са заседнали в задънена улица. Нито един от процеса не може да продължи, тъй като и двата са заключени и изискват другият да освободи ресурса или да заключи.
Докато работите с SQL serverблокировките са доста често срещани и могат да попречат на целия процес. Не е възможно да се избегнат изцяло мъртвата ситуация, но със сигурност човек може да сведе до минимум шанса да създаде задънена улица.
Проблем с безизходица

Трябва да се отбележи, че блокировките пряко влияят на производителността и могат да спрат обработката на базата данни.
1. Поддържайте поръчката същата
Безизходните ситуации са неизбежни, ако ресурсите не се обработват в добре дефиниран ред. За да се сведат до минимум безизходните ситуации, всички едновременни транзакции трябва да осъществяват достъп до обекти в добре дефиниран ред. Администраторите на бази данни трябва да проектират ясен набор от правила за достъп до обекти на базата данни. Обикновено мониторите на заключвания извършват проверка за безизходици и когато бъдат открити, избират една жертва на безизходица и отменят нейната транзакция. По този начин всички заключвания се освобождават и на предишните сесии е разрешено да продължат процеса. Жертвите на безизходици се избират въз основа на приоритета на безизходицата, зададен от сървъра, или цената на отмяната.
2. Ограничение по време на транзакция
Можете да ограничите потребителите да въвеждат всякакви данни, когато транзакцията се обработва, и можете да актуализирате данните преди транзакцията, за да избегнете блокировки. Също така, опитайте се да поддържате взаимодействието на потребителя на минимални нива, защото това влияе на скоростта. В идеалния случай транзакциите трябва да бъдат кратки и бързи, за да се избегнат блокировки. Приложението трябва да бъде проектирано по такъв начин, че да грабне ключалките за най-малкото необходимо време и да ги освободи възможно най-бързо.
3. NOLOCK Съвет
Когато някой изпълни заявка към таблица на ниво на изолация по подразбиране на SQL, таблицата се заключва и следващите заявки трябва да изчакат освобождаването. NOLOCK Hint е полезен в такива ситуации, тъй като позволява отменяне на заключването на таблица и други запитвания получават лесен достъп.
4. Използвайте обвързани връзки
Ако едно и също приложение може да отвори две или повече връзки, които могат да си сътрудничат помежду си, тогава това няма да създаде блокировки. Ето защо се препоръчва да използвате обвързани връзки.
Мъртвата ситуация не е единствената караница, която вероятно ще изпитате, докато работите по a SQL Server база данни. Всъщност инциденти от sql корупция са по-склонни да ви причинят скръб. За да избегнете сценарий на загуба на данни, инвестирайте в мощен инструмент за възстановяване като DataNumen SQL Recovery.
Въведение на автора:
Виктор Саймън е експерт по възстановяване на данни в DataNumen, Inc., която е световен лидер в технологиите за възстановяване на данни, включително възстановяване на mdb и sql софтуерни продукти за възстановяване. За повече информация посетете https://www.datanumen.com/