Spec-Zone.ru › MySQL 8.4

10.11.5 Внешняя блокировка

Внешняя блокировка — это использование блокировки файловой системы для управления конкуренцией за таблицы баз данных MyISAM множеством процессов. Внешняя блокировка используется в ситуациях, когда нельзя предполагать, что один процесс, такой как сервер MySQL, является единственным процессом, которому требуется доступ к таблицам. Вот несколько примеров:

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

  • Если вы используете myisamchk для выполнения операций обслуживания таблиц над таблицами MyISAM, вы должны либо убедиться, что сервер не запущен, либо что сервер имеет включенную внешнюю блокировку, чтобы он блокировал файлы таблиц по мере необходимости для координации с myisamchk для доступа к таблицам. То же самое относится к использованию myisampack для упаковки таблиц MyISAM.

    Если сервер запущен с включенной внешней блокировкой, вы можете использовать myisamchk в любое время для операций чтения, таких как проверка таблиц. В этом случае, если сервер пытается обновить таблицу, которую использует myisamchk, сервер ожидает завершения myisamchk перед продолжением.

    Если вы используете myisamchk для операций записи, таких как ремонт или оптимизация таблиц, или если вы используете myisampack для упаковки таблиц, вы обязательно должны убедиться, что сервер mysqld не использует таблицу. Если вы не останавливаете mysqld, по крайней мере, выполните mysqladmin flush-tables перед запуском myisamchk. Ваши таблицы могут быть повреждены, если сервер и myisamchk одновременно обращаются к таблицам.

При включенной внешней блокировке каждый процесс, которому требуется доступ к таблице, приобретает блокировку файловой системы для файлов таблицы перед доступом к таблице. Если не могут быть получены все необходимые блокировки, процесс блокируется от доступа к таблице до тех пор, пока блокировки не будут получены (после того, как процесс, который в настоящее время удерживает блокировки, их освободит).

Внешняя блокировка влияет на производительность сервера, потому что серверу иногда приходится ждать других процессов, прежде чем он сможет получить доступ к таблицам.

Внешняя блокировка не требуется, если вы запускаете один сервер для доступа к заданному каталогу данных (что является обычным случаем) и если другие программы, такие как myisamchk, не должны изменять таблицы во время работы сервера. Если вы только читаете таблицы другими программами, внешняя блокировка не требуется, хотя myisamchk может сообщать об ошибках, если сервер изменяет таблицы во время чтения myisamchk.

При отключенной внешней блокировке для использования myisamchk необходимо либо остановить сервер во время выполнения myisamchk, либо заблокировать и очистить таблицы перед запуском myisamchk. Чтобы избежать этого требования, используйте операторы CHECK TABLE и REPAIR TABLE для проверки и ремонта таблиц MyISAM.

Для mysqld внешняя блокировка контролируется значением системной переменной skip_external_locking. При включении этой переменной внешняя блокировка отключается и наоборот. Внешняя блокировка отключена по умолчанию.

Использование внешней блокировки может контролироваться при запуске сервера с помощью опции --external-locking или --skip-external-locking.

Если вы используете внешнюю блокировку для включения обновлений для таблиц MyISAM из многих процессов MySQL, не запускайте сервер с системной переменной delay_key_write, установленной на значение ALL, или не используйте опцию таблицы DELAY_KEY_WRITE=1 для общих таблиц. В противном случае может произойти повреждение индексов.

Самый простой способ удовлетворить этому условию — всегда использовать --external-locking вместе с --delay-key-write=OFF. (Это не делается по умолчанию, потому что во многих конфигурациях полезно иметь смесь предыдущих вариантов).

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/external-locking.html

Spec-Zone.ru

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