Spec-Zone.ru › MariaDB

INSERT DELAYED

Синтаксис

INSERT DELAYED ...

Описание

Опция DELAYED для оператора INSERT — это расширение MariaDB/MySQL стандартного SQL, которое очень полезно, если у вас есть клиенты, которые не могут или не должны ждать завершения INSERT. Такая ситуация часто встречается, когда вы используете MariaDB для ведения журнала и также периодически выполняете операторы SELECT и UPDATE, которые занимают много времени для завершения.

Когда клиент использует INSERT DELAYED, он сразу получает подтверждение от сервера, а запись помещается в очередь для вставки, когда таблица не используется ни одним другим потоком.

Еще одно важное преимущество использования INSERT DELAYED заключается в том, что вставки от многих клиентов объединяются и записываются в одном блоке. Это намного быстрее, чем выполнение многих отдельных вставок.

Обратите внимание, что INSERT DELAYED медленнее, чем обычная INSERT, если таблица не используется иначе. Также существует дополнительная нагрузка для сервера, чтобы обработать отдельный поток для каждой таблицы, для которой имеются отложенные записи. Это означает, что вы должны использовать INSERT DELAYED только в том случае, если вы действительно уверены, что вам это нужно.

Очередные записи хранятся только в памяти до тех пор, пока они не будут вставлены в таблицу. Это означает, что если вы принудительно завершите mysqld (например, с помощью kill -9) или если mysqld неожиданно завершится, любые записи в очереди, которые не были записаны на диск, будут потеряны.

Количество одновременных потоков INSERT DELAYED ограничено системными переменными сервера max_delayed_threads. Если оно установлено в 0, INSERT DELAYED отключено. Значение сессии может быть равно глобальному значению или 0 для отключения данного оператора в текущей сессии. Если этот предел достигнут, DELAYED будет молча игнорироваться для последующих операторов (ошибка не будет сгенерирована).

Ограничения

Существуют некоторые ограничения на использование DELAYED:

  • INSERT DELAYED работает только с таблицами MyISAM, MEMORY, ARCHIVE и BLACKHOLE. Если вы выполните INSERT DELAYED с другим типом хранения, вы получите ошибку типа: ERROR 1616 (HY000): DELAYED option not supported for table 'tab_name'
  • Для таблиц MyISAM, если в середине файла данных нет свободных блоков, поддерживаются одновременные операторы SELECT и INSERT. В этих обстоятельствах вам очень редко нужно использовать INSERT DELAYED с MyISAM.
  • INSERT DELAYED следует использовать только для операторов INSERT со списками значений. Сервер игнорирует DELAYED для операторов INSERT ... SELECT или INSERT ... ON DUPLICATE KEY UPDATE.
  • Поскольку оператор INSERT DELAYED возвращает результат немедленно, прежде чем записи будут вставлены, вы не можете использовать LAST_INSERT_ID() для получения значения AUTO_INCREMENT, которое может сгенерировать оператор.
  • DELAYED записи не видны для операторов SELECT до тех пор, пока они фактически не будут вставлены.
  • После INSERT DELAYED, ROW_COUNT() возвращает количество записей, которые вы пытались вставить, а не количество успешных записей.
  • DELAYED игнорируется на серверах репликации slave, поэтому INSERT DELAYED обрабатывается как обычный INSERT на серверах slave. Это происходит потому, что DELAYED может привести к тому, что у slave будут данные, отличающиеся от master. Операторы INSERT DELAYED не являются безопасными для репликации.
  • Зависшие операторы INSERT DELAYED теряются, если таблица заблокирована для записи, а ALTER TABLE используется для изменения структуры таблицы.
  • INSERT DELAYED не поддерживается для представлений. Если вы попытаетесь, получите ошибку типа: ERROR 1347 (HY000): 'view_name' is not BASE TABLE
  • INSERT DELAYED не поддерживается для разделенных таблиц.
  • INSERT DELAYED не поддерживается внутри хранимых процедур.
  • INSERT DELAYED не работает с триггерами.
  • INSERT DELAYED не работает, если введена ограничение проверки.
  • INSERT DELAYED не работает, если активен режим skip-new.

См. также

  • INSERT
  • INSERT SELECT
  • HIGH_PRIORITY и LOW_PRIORITY
  • Одновременные вставки
  • INSERT - Значения по умолчанию и дубликаты
  • INSERT IGNORE
  • INSERT ON DUPLICATE KEY UPDATE
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержимом, не обязательно отражают позиции MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/insert-delayed/

Spec-Zone.ru

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