Конкурентные вставки
Двигатель хранения MyISAM поддерживает конкурентные вставки. Эта функция позволяет выполнять запросы SELECT во время операций INSERT, уменьшая конфликт.
Возможность использования конкурентных вставок зависит от значения системной переменной сервера concurrent_insert:
-
NEVER(0) отключает конкурентные вставки. -
AUTO(1) позволяет конкурентные вставки только тогда, когда в целевой таблице нет свободных блоков (нет данных в середине таблицы, которые были удалены после последнего OPTIMIZE TABLE). Это значение по умолчанию. -
ALWAYS(2) всегда включает конкурентные вставки, в этом случае новые строки добавляются в конец таблицы, если к таблице обращается другой поток.
Если используется двоичный лог binary log, запросы CREATE TABLE ... SELECT и INSERT ... SELECT не могут использовать конкурентные вставки. Эти запросы приобретают блокировку чтения на таблице, поэтому конкурентные вставки будут ожидать. Таким образом, лог может быть безопасно использован для восстановления данных.
Конкурентные вставки не используются репликами с основанной на строках репликацией (см. форматы двоичного лога).
Если оператор INSERT содержит клаузу HIGH_PRIORITY, конкурентные вставки не могут быть использованы. INSERT ... DELAYED обычно не нужен, если включены конкурентные вставки.
LOAD DATA INFILE использует конкурентные вставки, если указано ключевое слово CONCURRENT и concurrent_insert не NEVER. Это замедляет операцию (даже если к таблице не обращаются другие сеансы), но снижает конфликт.
LOCK TABLES позволяет неконфликтные конкурентные вставки, если используется блокировка READ LOCAL. Конкурентные вставки не разрешены, если ключевое слово LOCAL опущено.
Примечания
Решение о включении конкурентных вставок для таблицы принимается при открытии таблицы. Если вы измените значение concurrent_insert, это повлияет только на новые открытые таблицы. Если вы хотите, чтобы это работало и для используемых или кэшированных таблиц, вам необходимо выполнить FLUSH TABLES после установки переменной.
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/concurrent-inserts/