Как ядро ​​базы данных обрабатывает одновременные вставки? - PullRequest
4 голосов
/ 17 января 2012

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

Скажите, если 100 пользователей запустят запрос вставки. Вставляет ли база данных несколько записей одновременно (одна и та же секунда, одна и та же наносекунда и т. Д.) Или вставляет каждую запись одну за другой? База данных работает в многопоточной среде, поэтому естественным ответом будет одновременное включение вставок.

Ответы [ 2 ]

5 голосов
/ 17 января 2012

Механизм базы данных, такой как SQL Server (который, как я полагаю, вы спрашиваете, поскольку вы пометили его так), будет использовать некоторую версию протокола ARIES Запись в очередь записи . Поскольку такой протокол требует записи журнала в виде последовательного потока, из правила следует, что 100 вставок запускаются одновременно, даже на сервере с 100 ЦП придется выполнять внутреннюю сериализацию при обращении к журналу. Поэтому параллелизм на уровне «наносекунды», как вы предполагаете, даже теоретически невозможен. Эта тема описана в нескольких местах, см. Журнал транзакций с отложенной записью , Восстановление транзакций и Как это работает: представление ввода-вывода SQL Server Боба Дорра .

Однако, с практической точки зрения, вы должны думать с точки зрения транзакций и уровней изоляции .

1 голос
/ 17 января 2012

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

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