поиск:
Полезные ссылки

  • Форум по MySQL

  • Статьи по MySQL

  • Вопросы по MySQL

  • MySQL.com


  • Базы данных

  • MySQL

  • PostgreSQL


  • PHP конференция 2005
    Подробности!

    7.1.3.2. Clients is using or hasn't closed the table properly

    Клиенты неправильно используют таблицу или не закрыли ее надлежащим образом

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

    Если при выполнении команд CHECK TABLE или myisamchk выдается следующая ошибка:

    # clients is using or hasn't closed the table properly
    

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

    Счетчик работает следующим образом:

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

    • Во время следующих обновлений значение счетчика не изменяется.

    • После закрытия последней записи таблицы (после применения команды FLUSH или из-за отсутствия места в кэше таблицы) значение счетчика уменьшается, если в таблицу были внесены изменения.

    • Если производится проверка таблицы, или проверка показывает, что все в порядке, счетчик устанавливается в значение 0.

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

    Иначе говоря, синхронность может быть нарушена следующим образом:

    • Таблицы MyISAM копируются без команд LOCK и FLUSH TABLES.

    • Между обновлением и последним закрытием произошел сбой MySQL (обратите внимание: с таблицей все может быть в порядке, так как MySQL документирует все изменения между выполнением каждого из операторов).

    • Кто-то применил команду myisamchk --recover или myisamchk --update-state к таблице, которая в данный момент использовалась mysqld.

    Таблицу используют несколько серверов mysqld, и один из них выполнил команду REPAIR или CHECK по отношению к таблице, с которой работал другой сервер. В этом случае можно выполнить команду CHECK (даже если другие серверы выдают предупреждения), но команды REPAIR следует избегать, так как она заменяет файл данных новым, информация о котором не передается другим серверам.

     
    © 1997-2005 PHP Club Team
    Rambler's Top100