Spec-Zone.ru › MySQL 5.7

8.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 операторов. Это сделано для обеспечения возможности точного копирования ваших таблиц путем применения журнала во время операции резервного копирования. См. Раздел 5.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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/concurrent-inserts.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API