SQL Server 2018 R2 отключи проблеми с брави

Блокиране се случва, когато на сесия на база данни, или процес на сървъра ID (SPID), придобива ключалката определен ресурс, и в този момент втората SPID се опитва да получи заключване конфликт на един и същ ресурс. Обикновено блок ресурс не последно dolgo.Kak само първата сесия отключва, той може да получи втория SPID, за да продължи обработката на искането.

Суровите факти за живота брави

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

Продължителност на брави, определени от видовете запитвания. Когато заявка за транзакция не е доволен и не използвайте заключващи намеци заключват да изпълнява SELECT отчети се извършват само по време на четенето на ресурса, но не и към момента на искането. Брави инструкции вмъкване, обновяване и изтриване се съхраняват за срока на искането. Това помага да се осигури съгласуваност на данните и позволява на SQL сървър ролка на исканията за обратно, ако е необходимо.

Когато искането се извършва в рамките на сделка, продължителността на заключващия се определя от три фактора:

  • тип заявка;
  • ниво транзакция изолация;
  • присъствие или отсъствие на заключване съвети.

Частично (заключване) и конвенционален (блокиране) блокиране - нормално в релационни бази данни, но те могат да намали производителността, ако ключалката на ресурс се съхранява дълго време. Производителността също страда при заключване на ресурса, на SPID не е в състояние да я освободите.

В първия случай, проблемът обикновено преминава след известно време, тъй като в крайна сметка ще SPID освободите заключването, но заплахата за изпълнение деградация остава съвсем реална. Проблеми с ключалката на втория тип може да доведе до сериозен спад в представянето си, но за щастие, те лесно се откриват чрез мониторинг на SQL Server по предмета на краткосрочни и конвенционални ключалки.

Укротяване ключалките

Activity Monitor (Activity Monitor) SQL Server помага за откриване на проблеми, свързани с краткосрочни и конвенционални ключалки. Обърнете специално внимание на показатели за времето за изчакване (Timeout) Изчакайте Type (Тип на готовност), Чакай ресурси (ресурс в режим на готовност) и блокиран от (блокиран) за посочените в списъка на процесите.

Повечето от информацията за процесите, следното е взета от динамичните гледки в Activity Monitor на:

  • sys.dm_os_tasks
  • sys.dm_os_waiting_tasks
  • sys.dm_exec_requests
  • sys.dm_exec_sessions
  • sys.dm_resource_governor_workload_group

Вземи по-ясна картина на краткосрочни и конвенционални брави могат да използват sys.dm_tran_locks презентацията, която дава информация за активни заявки за заключване - завършен и в очакване на екзекуцията. Презентационни sys.dm_exec_connections, sys.dm_exec_sessions sys.dm_exec_requests и предоставяне на информация съответно за активни връзки, сесии и запитвания.

Обърнете внимание на sys.dm_exec_requests (това е описано подробно в библиотеката MSDN). Заявки към държавния «спане» (Suspended) са завършили изпълнение и е вероятно в очакване на команда от приложението. Заявки към държавата «Спринт» (в момента) или «Изпълнима» (готова за работа) в момента се обработват. Заявка със състоянието на «спряно» (суспендирани) чака ключалката или друго събитие.

wait_type колона както предполага неговото име, се връща да се изчака тип. Ако стойността е по-голяма от нула, SPID чака. За повече информация се обърнете към колони и wait_time wait_resource на. Ако искането е блокиран, в wait_time показано продължителност в милисекунди. В wait_resource Set ресурс, което се очаква от освобождаването на SPID. Забележете също, че blocking_session_id съдържа идентификатори на сесии, блокиране на искане или отрицателна стойност с информация за собственика на заключена ресурс.

Неправилно движение на преден план приложения може да създаде различни проблеми с блокиране. Ако заявлението не е в състояние правилно да контролира нивата на вложени транзакции, може да има ситуация, с ключалка, в която тип на заявката за изчакване (wait_type) е нула, състоянието на «спане», но броят на сделките (open_transaction_count) не е нула.

Най-вероятно в приложението осигурява заявка за прекъсване или започване на команда за анулиране без да се създава необходимия брой изявления намаление на цените и да се ангажира. Поради това, ключалката ще остане активен, а другият SPID не може да ги вземем. SQL Server автоматично коригира такива ситуации. Правилното боравене с вложени транзакции лежи с приложението.

Ако заявлението не изберете всички редове от резултата, получени с блокиране на ситуация, в която тип на заявката за изчакване (wait_type) е нула, състоянието «изпълнима», но броят на сделките (open_transaction_count) не е нула. Това е най-вероятно, че приложението няма да изберете всички линии на резултати и излезе от ключалката на масата, затваряне на достъпа до него е друг SPID. Ако е възможно, заявлението трябва да бъде конфигуриран така, че да се избират всички резултати.

В случай на проблеми от страна на сървъра, с проблеми за заключване може да бъде решен чрез създаване на подходящи индекси в техните бази данни за SQL Server. Също така е възможно да се коригира искането, ако е необходимо. Индекси могат да намалят броя на записите, използвани при обработката на молбата. Това се постига чрез намаляване на броя на търсенията, които трябва да се съобразяват с двигател с база данни. За определяне на таблиците и колоните, които искате да се индексират, използвайте следните динамични изгледи:

  • sys.dm_db_missing_index_groups
  • sys.dm_db_missing_index_details
  • sys.dm_db_missing_index_group_stats

Важно е да се помни, че индексът може да забави операции за модифициране на данни (както е описано в статията "От операциите на индекса"). Ето защо, при създаването на индекси не забравяйте да използвате представителството sys.dm_db_ index_usage_stats.

Индексирането не е задължително да доведе до трайни заключване таблици. Когато индексиращото е само оперативно колективно намерение заключване (намерение дял, IS) в таблицата източник по време на изпълнение на основна операция етап индексиране. Това ви дава възможност да продължи да работи или заявки за актуализации. Най-общо, колективно ключалката се прилага върху целта за кратък период от време, в началото (и, в някои случаи, в края на) операцията на индексиране.

Когато ключалката е причинена от един нормален поискване, но с по-дълго бягане, струва си да се мисли за оптимизиране на заявката. Най-добре е да се направи това чрез намаляване на броя на ресурсите, които са блокирани в сделката. За тази операция трябва да се направи възможно най-малко чрез премахване на некритични операции, както и оставяйки само наистина необходимо. Също така трябва да помисли за разделяне на сделка в по няколко заявки, които засягат по-малко редове, но само ако това не влияе върху крайния резултат. Сделките трябва да бъдат проектирани така, че да се използват правилните нива на изолация сделка, не забравяйте да използвате и заключващи съвети за намаляване на ключалката време, без това да повлияе на валидността на крайните резултати.

Борбата с мъртвите зони

Особен тип заключване нар блокировка проблем (безизходица) и се появява, когато две или повече блокиране SPID получите различни обекти, но всеки един от SPID нужда един обект, който е блокиран от друг SPID. В тази ситуация, всеки SPID чака другия да се освободи блокажи, но това не се случи. Можете да се намали броят на мъртвите зони, но те не могат да бъдат напълно избегнати. За щастие, диспечер ключалката в SQL Server автоматично открива появата на мъртвите зони. Намирането на подобен проблем, управителят на заключване изпълнява три операции:

  • избира SPID, да бъдат унищожени;
  • посветени на съобщение за грешка 1205 се изпраща на съответния клиент;
  • Той унищожава SPID, че той освобождава заключената ресурс и да продължи работата на друг SPID.

Activity Monitor и презентационни sys.dm_tran_locks също да помогнат за откриване на мъртвите зони. Мониторът на дейност е необходимо да се следи за качеството на времето за изчакване (изминалото време в милисекунди), Чакай Тип (показва дали операцията по освобождаването е на изчакване) и изчакайте ресурс (ако състоянието на изчакване показва ресурсите, се очаква излизането на който).

Foreground заявление трябва да бъде проектирана така, че да бъде в състояние да се справят с мъртвите зони. Правилно писмена молба на преден план, да получавате съобщения за 1205 трябва да се свързвате с SQL Server и повторно започване на сделка. Такова заявление трябва също така да следи разпределени задънената улица, когато възможни едновременни заявки кръстосани ресурси върху нивата на клиента и сървъра.

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

Ние докосна само на повърхността на проблема, който описва как заключване работи и как да решават проблеми, възникнали по време на употреба. В повечето случаи, SQL Server дръжки много предизвикателства брави, включително мъртвите зони. Премахване или поне минимизира проблемите с ключалките може да бъде за сметка на правилното прилагане дизайн. Започнете с внимателно заявки за проектиране и прилагане на предния край, в крайна сметка се движи за да се подобри страна на сървъра.

Допълнително съдържание