2013-02-13 3 views
0

Применения обедающих философов проблемы в InnoDB, и использование выберите для обновления:обедающих философы, InnoDB, выберите для обновления

1) таблицы с 100000 вилками, представленное в таблице InnoDB с одним первичным ключом (fork)

2) захват вилок - это выбор для обновления, который задает случайный список между 2 и 20 первичными ключами в этой таблице, а «захват» - это точно один выбор для обновления в этом случайном списке вилок относительно 100 000 различных первичных ключей. Кстати, порядок списков ключей в предложении select является случайным.

3) Есть много более 5 мыслители, скажем, до 50 одновременных «» Операции захвата пересекающихся вилок

4) время мозгового обновляют другие столбцы для строк первичных ключей в шаге 2. время мысли никогда не бывает слишком длинным.

Вопрос: с innodb, является тупиком или голодом из-за несправедливости вообще в вышеупомянутом сценарии? Есть ли что-то, на что можно обратить внимание? (уровень изоляции считывается.)

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

ответ

0

Я не знаю, что вы подразумеваете под «несправедливостью», но да, тупик был бы возможен. Пример: два мыслителя пытаются взять те же вилки, скажем 1 и 2, но в противоположном порядке. Таким образом, мыслитель один «берет» вилку, а мыслитель два берет две вилки. После этого оба будут ждать второй вилки «навсегда» ...

Вы можете легко преодолеть эту проблему, заказав доступ к вилкам. Таким образом, первый мыслитель возьмет fork one, второй должен будет дождаться, когда первый мыслитель закончит, и все в порядке.

+0

Как это возможно? 2 мыслителя делают это в одной команде select for update, которая указывает те же 2 вилки. Имеет ли mysql в операторе select for update или какой-либо реальной инструкции по обновлению, есть последовательность отдельных блокировок строк записи, которые зависят от порядка ключей в списке? –

+0

Я пропустил, что это только один выбор. Но, тем не менее, я бы поставил «заказ по id» в конце выбора. В противном случае вы не можете быть уверены, что innodb сделает это за вас! – Argeman

Смежные вопросы