4.5 Справочник по языку администрирования баз данных 
4.5.1 Синтаксис команды OPTIMIZE TABLE 
OPTIMIZE TABLE tbl_name[,tbl_name]... 
Команда OPTIMIZE TABLE должна использоваться после удаления большей части таблицы или если в таблице было внесено много изменений в строки переменной длины (таблицы, в которых есть столбцы VARCHAR, BLOB или TEXT). Удаленные записи поддерживаются при помощи связного списка, и последующие операции INSERT повторно используют позиции старых записей. Чтобы перераспределить неиспользуемое пространство и дефрагментировать файл данных, можно воспользоваться командой OPTIMIZE TABLE. 
На данный момент команда OPTIMIZE TABLE работает только с таблицами MyISAM и BDB. Для таблиц BDB команда OPTIMIZE TABLE выполняет ANALYZE TABLE. См. раздел See section 4.5.2 Синтаксис команды ANALYZE TABLE. 
Можно применить OPTIMIZE TABLE к таблицам других типов, запустив mysqld с параметром --skip-new или --safe-mode, но в этом случае OPTIMIZE TABLE лишь только выполняет ALTER TABLE. 
Команда OPTIMIZE TABLE работает следующим образом: 
Если в таблице есть удаленные или разделенные строки, восстанавливает таблицу. Если индексные страницы не отсортированы - сортирует их. Если статистические данные не обновлены (и восстановление нельзя осуществить путем сортировки индексов), обновляет их. Команда OPTIMIZE TABLE для MyISAM представляет собой эквивалент выполнения myisamchk --quick --check-only-changed --sort-index --analyze над таблицей. 
Обратите внимание: во время работы OPTIMIZE TABLE таблица заблокирована! 

4.5.2 Синтаксис команды ANALYZE TABLE 
ANALYZE TABLE tbl_name[,tbl_name...] 
Анализирует и сохраняет распределение ключей для таблицы. Во время проведения анализа таблица заблокирована для чтения. Эта функция работает для таблиц MyISAM и BDB. 
Данная команда является эквивалентом выполнения myisamchk -a для таблицы. 
Сохраненное распределение ключей в MySQL используется для принятия решения о том, в каком порядке следует связывать таблицы, когда для связывания используются не константы, а другая база. 
Эта команда выдает таблицу со следующими столбцами: 
Столбец Значение Table Имя таблицы Op Всегда ``analyze'' Msg_type Одно из значений status, error, info или warning. Msg_text Сообщение. 
Просмотреть сохраненное распределение ключей можно при помощи команды SHOW INDEX. See section 4.5.6.1 Получение информации по базам данных, таблицам, столбцам и индексам. 
Если таблица не изменялась с момента предыдущего запуска команды ANALYZE TABLE, повторный анализ таблицы проводиться не будет. 

4.5.3 Синтаксис команды FLUSH 
FLUSH flush_option [,flush_option] ... 
Команда FLUSH применяется для очистки части кэша, используемого MySQL. Для запуска FLUSH необходимо обладать привилегиями RELOAD. 
Параметр flush_option может быть одним из следующих: 


Параметр Описание HOSTS Производится очистка таблиц кэша удаленных компьютеров. Сброс таблиц удаленного компьютера следует производить, если один из удаленных компьютеров изменил IP-адрес или если было получено сообщение об ошибке Host ... is blocked. Если во время соединения с сервером MySQL происходит больше ошибок подряд, чем указано в max_connect_errors для определенного удаленного компьютера, то MySQL предполагает, что что-то не в порядке, и блокирует последующие попытки установления соединения со стороны этого удаленного компьютера. Сброс таблиц удаленного компьютера позволяет снова попытаться установить соединение. See section A.2.4

Ошибка Host '...' is blocked. Чтобы это сообщение об ошибке не появлялось, запустите mysqld с параметром -O max_connect_errors=999999999. DES_KEY_FILE Производится перезагрузка ключей DES из файла, указанного параметром --des-key-file, при запуске сервера. LOGS Закрываются и повторно открывается все файлы журналов. Если файл журнала обновлений или файл бинарного журнала был указан без расширения, номер расширения файла журнала будет увеличен на единицу относительно предыдущего файла. Если в имени файла было указано расширение, MySQL закроет и повторно откроет файл журнала обновлений. See section 4.9.3 Журнал обновлений (update). Эти действия аналогичны отправке сигнала SIGHUP на сервер mysqld. PRIVILEGES Производится перезагрузка привилегий из таблиц привилегий в базе данных mysql. QUERY CACHE Производится дефрагментация кэша запросов, чтобы эффективнее использовать его память. Эта команда не удаляет запросы из кэша, как команда RESET QUERY CACHE. TABLES Закрываются все открытые таблицы и принудительно закрываются все используемые таблицы. Также сбрасывается кэш запросов. [TABLE | TABLES] tbl_name [,tbl_name...] Производится сброс только указанных таблиц. TABLES WITH READ LOCK Закрываются все открытые таблицы и блокируется доступ для чтения всех таблиц для всех баз данных, пока не будет запущена команда UNLOCK TABLES. Это очень удобный способ создавать резервные копии, если у вас файловая система наподобие Veritas, которая может обеспечить моментальные снимки данных в режиме реального времени. STATUS Большинство переменных состояния сбрасываются в нуль. Эту команду необходимо использовать при отладке запроса. USER_RESOURCES Все ресурсы пользователя сбрасываются в нулевое значение. Это позволяет заблокированному пользователю подсоединиться еще раз. See section 4.3.6 Ограничение ресурсов пользователя. 
Ко всем приведенным выше командам можно получить доступ при помощи утилиты mysqladmin, используя команды flush-hosts, flush-logs, reload или flush-tables. 
Рекомендуется также ознакомиться с командой RESET, которая применяется с репликацией. See section 4.5.4 Синтаксис команды RESET. 



4.5.4 Синтаксис команды RESET RESET reset_option [,reset_option] ... 
Команда RESET используется для очистки. Кроме того, она также действует как более сильная версия команды FLUSH. See section 4.5.3 Синтаксис команды FLUSH. 
Чтобы запустить команду RESET, необходимо обладать привилегиями RELOAD. 
Параметр Описание MASTER Удаляет все бинарные журналы, перечисленные в индексном файле, обнуляет значения индексного файла binlog. В версиях до 3.23.26 - FLUSH MASTER (Master) SLAVE Сбрасывает положение репликации подчиненного компьютера в журналах головного компьютера. В версиях до 3.23.26 эта команда называлась FLUSH SLAVE (Slave) QUERY CACHE Удаляет все результаты запросов из кэша запросов. 

4.5.5 Синтаксис команды KILL 
KILL thread_id 


Каждое соединение с mysqld запускается в отдельном потоке. При помощи команды SHOW PROCESSLIST можно просмотреть список запущенных потоков, а при помощи команды KILL thread_id - удалить поток. 
Если у вас есть привилегия PROCESS, можно просмотреть все потоки. Обладая привилегией SUPER, можно удалять любые потоки. В противном случае можно просматривать и удалять только свои собственные потоки. 

Для просмотра и удаления потоков можно также применять команды mysqladmin processlist и mysqladmin kill. 

При использовании команды KILL для потока устанавливается специальный флаг kill flag. 
В большинстве случаев удаление потока занимает некоторое время, поскольку этот флаг проверяется с определенным интервалом. 

В циклах SELECT, ORDER BY и GROUP BY флаг проверяется только после считывания блока строк. Если установлен флаг удаления, то выполнение оператора будет отменено. При выполнении команды ALTER TABLE флаг удаления проверяется перед считыванием каждого блока строк из исходной таблицы. Если флаг установлен, то выполнение команды отменяется и временная таблица удаляется. При выполнении команд UPDATE и DELETE флаг удаления проверяется после каждого считывания блока, а также после каждого обновления или удаления строки. Если флаг удаления установлен, то выполнение оператора отменяется. Обратите внимание: если не используются транзакции, то отменить изменения будет невозможно! GET_LOCK() будет отменен при помощи NULL. Поток INSERT DELAYED быстро сбросит все строки, которые он содержит в памяти и будет удален. Если поток находится в заблокированной таблице (состояние: Locked), то блокировка таблицы будет быстро отменена. Если поток ожидает освобождения дискового пространства в запросе write, запись будет отменена с выдачей сообщения о переполнении диска.