10.11.3 Конкурентные вставки
Движок хранения MyISAM поддерживает конкурентные вставки для уменьшения конфликтов между читателями и записывателями для заданной таблицы: Если у таблицы MyISAM нет пропусков в файле данных (удаленных строк посередине), оператор INSERT может быть выполнен для добавления строк в конец таблицы одновременно с тем, как операторы SELECT считывают строки из таблицы. Если есть несколько операторов INSERT, они ставятся в очередь и выполняются последовательно, одновременно с операторами SELECT. Результаты конкурентной INSERT могут быть не видны немедленно.
Системная переменная concurrent_insert может быть настроена для изменения обработки конкурентных вставок. По умолчанию переменная установлена в значение AUTO (или 1), и конкурентные вставки обрабатываются как описано выше. Если concurrent_insert установлено в значение NEVER (или 0), конкурентные вставки отключаются. Если переменная установлена в значение ALWAYS (или 2), конкурентные вставки в конец таблицы разрешены даже для таблиц, имеющих удаленные строки. См. также описание системной переменной concurrent_insert.
Если вы используете двоичный журнал, конкурентные вставки преобразуются в обычные вставки для операторов CREATE ...
SELECT или INSERT ...
SELECT. Это делается для обеспечения возможности создания точной копии ваших таблиц путем применения журнала во время операции резервного копирования. См. Раздел 7.4.4, «Двоичный журнал». Кроме того, для этих операторов устанавливается блокировка чтения на таблице, из которой происходит выбор, таким образом, вставки в эту таблицу блокируются. В результате конкурентные вставки для этой таблицы также должны ждать.
При использовании LOAD DATA, если вы укажете CONCURRENT с таблицей MyISAM, которая удовлетворяет условию для конкурентных вставок (то есть, она не содержит свободных блоков посередине), другие сессии могут извлекать данные из таблицы, пока выполняется LOAD
DATA. Использование опции CONCURRENT немного влияет на производительность LOAD DATA, даже если в данный момент никакая другая сессия не использует таблицу.
Если вы укажете HIGH_PRIORITY, это переопределяет эффект опции --low-priority-updates, если сервер был запущен с этой опцией. Это также приводит к тому, что конкурентные вставки не используются.
Для LOCK
TABLE, разница между READ
LOCAL и READ в том, что READ LOCAL разрешает выполнение неконфликтных операторов INSERT (конкурентных вставок) во время удержания блокировки. Однако это нельзя использовать, если вы собираетесь управлять базой данных с помощью процессов, внешних по отношению к серверу, в то время как удерживаете блокировку.
© 2025 Oracle
Licensed under the GPLv2 License.