Spec-Zone .ru
спецификации, руководства, описания, API
|
Внешняя блокировка является использованием блокировки файловой системы, чтобы управлять конкуренцией для MyISAM
таблицы базы данных многократными процессами. Внешняя блокировка
используется в ситуациях, где единственный процесс, такой как сервер MySQL, как может предполагаться, не
является единственным процессом, который требует доступа к таблицам. Вот некоторые примеры:
Если Вы выполняете многократные серверы, которые используют тот же самый каталог базы данных (не рекомендуемый), каждому серверу нужно было включить внешней блокировке.
Если Вы используете myisamchk, чтобы выполнить табличные операции
обслуживания на MyISAM
таблицы, следует или гарантировать, что сервер не работает, или что серверу включали внешней блокировке
так, чтобы это заблокировало табличные файлы по мере необходимости, чтобы скоординировать с myisamchk
для доступа к таблицам. То же самое является истиной для использования myisampack, чтобы упаковать MyISAM
таблицы.
Если сервер выполняется с внешней включенной блокировкой, можно использовать myisamchk в любое время для операций чтения такие проверочные таблицы. В этом случае, если сервер попытается обновить таблицу, которую использует myisamchk, то сервер будет ожидать myisamchk, чтобы закончиться прежде, чем это будет продолжаться.
Если Вы используете myisamchk для операций записи, таких как восстановление или оптимизация таблиц, или если Вы используете myisampack, чтобы упаковать таблицы, следует всегда гарантировать, что mysqld сервер не использует таблицу. Если Вы не останавливаете mysqld, по крайней мере, сделайте mysqladmin таблицы сброса прежде, чем Вы выполните myisamchk. Ваши таблицы могут стать поврежденными если сервер и myisamchk доступ таблицы одновременно.
С внешней блокировкой в действительности, каждый процесс, который требует доступа к таблице, получает блокировку файловой системы для табличных файлов прежде, чем продолжиться, чтобы получить доступ к таблице. Если все необходимые блокировки не могут быть получены, процесс блокируется от доступа к таблице, пока блокировки не могут быть получены (после того, как процесс, который в настоящий момент содержит блокировки, выпускает их).
Внешняя блокировка влияет на производительность сервера, потому что сервер должен иногда ожидать других процессов прежде, чем это сможет получить доступ к таблицам.
Внешняя блокировка является ненужной, если Вы выполняете единственный сервер, чтобы получить доступ к каталогу определенных данных (который является обычным случаем), и если никакие другие программы, такие как 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, следует гарантировать, что следующие
условия удовлетворяются:
Не используйте кэш запроса для запросов, которые используют таблицы, которые обновляются другим процессом.
Не запускайте сервер с --delay-key-write=ALL
опция или использование DELAY_KEY_WRITE=1
табличная опция для любых совместно используемых таблиц. Иначе, индексируйте повреждение, может
произойти.
Самый легкий способ удовлетворить эти условия состоит в том, чтобы всегда использовать --external-locking
вместе с --delay-key-write=OFF
и --query-cache-size=0
. (Это не делается по умолчанию, потому что во многих
установках полезно иметь смесь предыдущих опций.)