Spec-Zone .ru
спецификации, руководства, описания, API

8.10.5. Внешняя Блокировка

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

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

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

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

С внешней отключенной блокировкой, чтобы использовать myisamchk, следует или остановить сервер, в то время как myisamchk выполняется или иначе блокировка, и сбросьте таблицы прежде, чем выполнить myisamchk. (См. Раздел 8.11.1, "Системные Факторы и Настройка Параметра Запуска".), Чтобы избежать этого требования, используйте CHECK TABLE и REPAIR TABLE операторы, чтобы проверить и восстановить MyISAM таблицы.

Для mysqld внешней блокировкой управляет значение skip_external_locking системная переменная. Когда эта переменная включается, внешняя блокировка отключается, и наоборот. От MySQL 4.0 на внешняя блокировка отключается по умолчанию.

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

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

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