Наблюдайте за поведением команд выборки в каждой транзакции. Попробуйте
обобщить ваши наблюдения.
6. Самостоятельно ознакомьтесь с предложением FOR SHARE команды SELECT и
выполните необходимые эксперименты. Используйте документацию: раздел
13.3.2 «Блокировки на уровне строк» и описание команды SELECT.
7. В тексте главы для иллюстрации изучаемых концепций мы создавали только две
параллельные транзакции. Попробуйте воспроизвести представленные экспе-
рименты, создав три или даже четыре параллельные транзакции.
8.* В тексте главы была рассмотрена транзакция для выполнения бронирования
билетов. Для нее был выбран уровень изоляции READ COMMITTED.
Как вы думаете, если одновременно будут производиться несколько операций
бронирования, то, может быть, имеет смысл «ужесточить» уровень изоляции до
SERIALIZABLE? Или нет необходимости это делать? Обдумайте и вариант с ис-
пользованием явных блокировок. Обоснуйте ваш ответ.
9.* В разделе документации 13.2.3 «Уровень изоляции Serializable» сказано, что ес-
ли поиск в таблице осуществляется последовательно, без использования индек-
са, тогда на всю таблицу накладывается так называемая предикатная блокиров-
ка. Такой подход приводит к увеличению числа сбоев сериализации. В качестве
контрмеры можно попытаться использовать индексы. Конечно, если таблица
совсем небольшая, то может и не получиться заставить PostgreSQL использовать
поиск по индексу. Тем не менее, давайте выполним следующий эксперимент.
Для его проведения создадим специальную таблицу, в которой будет всего два
столбца: один — числовой, а второй — текстовый. Значения во втором столб-
це будут иметь вид: LOW1, LOW2, ..., HIGH1, HIGH2, ... Назовем эту таблицу —
modes. Добавим в нее такое число строк, которое сделает очень вероятным ис-
пользование индекса при выполнении операций обновления строк и, соответ-
ственно, отсутствие предикатной блокировки всей таблицы. О том, как узнать,
используется ли индекс при выполнении тех или иных операций, написано в
главе 10.
Достарыңызбен бөлісу: