Как база данных решает, какому процессу она должна предоставить блокировку, когда два или более процесса запрашивают ее в одно и то же время? - PullRequest
0 голосов
/ 06 ноября 2019

Я знаю, что база данных всегда позволяет первому процессу, запрашивающему ее, заблокировать эту строку / таблицу. Но что происходит, когда база данных получает один и тот же запрос от нескольких процессов в одно и то же время? Решает ли он случайно, для какого процесса он сначала предоставит блокировку?

Примером могут служить два клиента, которые хотят купить бургер, а в базе данных есть только 1 бургер. Их запросы достигают сервера в тот же момент. Какой несчастный клиент потеряет свой обед?

Примечание. В основном я использую SQL Server.

1 Ответ

3 голосов
/ 06 ноября 2019

С точки зрения программного обеспечения базы данных не существует такого понятия, как «одно и то же время». Но предположим, что у вас есть многопроцессорная система с двумя сетевыми интерфейсами, и два запроса в конечном итоге обрабатываются с одинаковым тактом ЦП - очень маловероятно (миллиарды циклов в секунду), но не полностью невозможны.

Будет ветка для каждого запроса. Каждый поток должен будет получить блокировку базы данных, которая предположительно находится где-то в памяти. Блокировка будет защищена блокировкой операционной системы, которая не позволит обоим потокам одновременно получить доступ к блокировке базы данных.

Блокировка операционной системы, в конечном счете, также зависит от доступа к памяти. Чтобы получить доступ к памяти, процессор устанавливает на нее блокировку и передает ее копию во встроенный кэш. Другой ЦП не сможет получить к нему доступ, пока не будет завершен первый ЦП. Таким образом, только один ЦП сможет записывать в память, чтобы получить блокировку O / S для блокировки базы данных.

Если по некоторому совпадению оба ЦП запрашивают один и тот же сегмент памяти в одно и то же время иоба пытаются получить блокировку памяти, оба запроса разрешаются «шинным арбитражем», который может работать несколькими способами. Это может закончиться в зависимости от того, какой ЦП физически ближе к линии шины, или может зависеть от того, какой ЦП имеет более высокий ИД устройства.

Приложению, которое использует базу данных, никогда не придется беспокоиться о мельчайших деталях, таких какэто. Об этом заботятся платформа баз данных, операционная система, процессор и, в конечном итоге, физическое оборудование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...