| |
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
. Подробности об этом вызове в разделе
"4.5.2 Синтаксис ANALYZE
TABLE
".
Вы можете оптимизировать и другие типы таблиц запуском mysqld
с опциями --skip-new
или --safe-mode
, но в этом
случае OPTIMIZE TABLE
превратится в вызов ALTER
TABLE
.
OPTIMIZE TABLE
работает следующим образом:
OPTIMIZE TABLE
для таблиц типа MyISAM
эквивалентен вызову myisamchk --quick --check-changed-tables
--sort-index --analyze
.
Обратите внимание, что таблица будет блокирована в течение всего времени
работы команды OPTIMIZE TABLE
!
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
. Подробности в разделе "
4.5.5.1 Получение информации о базах данных, таблицах, столбцах и индексах
".
Если таблица не изменилась после последней команды ANALYZE
TABLE
, она не будет проанализирована снова.
FLUSH
FLUSH flush_option [,flush_option]
Вы должны использовать команду FLUSH
, если Вы хотите очищать
внутренние кэши MySQL. Для выполнения FLUSH
Вы должны иметь
право RELOAD.
flush_option
может быть любой из следующего списка:
HOSTS | Освобождает ведущие таблицы кэша. Вы
должны это сделать, если некоторые из Ваших хостов изменяют IP, или если Вы
получили сообщение об ошибке "Host ... is blocked ". Когда в
строке для данного компьютера происходит больше, чем
max_connect_errors ошибок за время связи с сервером, MySQL
приходит к выводу, что что-то пошло неправильно, и блокирует компьютер.
Подробности в разделе "8.2.4 Ошибка
Host '...' is blocked . Вы можете запустить
mysqld с опцией -O max_connection_errors=999999999 ,
чтобы избежать этого сообщения об ошибке. |
LOGS | Закрывает и вновь открывает все журналы.
Если Вы определили журнал модификаций или двоичный журнал без расширения,
номер расширения журнала будет увеличен на один относительно предыдущего
файла. Если Вы использовали расширение в имени файла, MySQL закроет и вновь
откроет журнал модификаций. Подробности в разделе
"4.9.3 Файл регистрации модификаций".
Это эквивалентно посылке на сервер mysqld сигнала
SIGHUP . |
PRIVILEGES | Перезагружает привилегии из таблиц в
базе данных mysql . |
TABLES | Закрывает все открытые таблицы. |
[TABLE|TABLES] table_name [,table_name...] |
Применяет предыдущую команду только к заданным таблицам. |
TABLES WITH READ LOCK | Закрывает все открытые
таблицы и блокирует все таблицы для всех баз данных с доступом только на
чтение, пока не будет выполнена команда UNLOCK TABLES . Это очень
удобный способ получить резервную копию, если Вы имеете файловую систему,
подобную Veritas. |
STATUS | Сбрасывает большинство переменных состояния к нулю. Используется при отладке запроса. |
Вы можете также обращаться к каждой из команд, показанных выше с помощью
утилиты mysqladmin
, используя команды flush-hosts
,
flush-logs
, reload
или flush-tables
.
KILL
KILL thread_id
Каждое подключение к mysqld
выполняется в отдельном процессе.
Вы можете видеть запущенные процессы командой SHOW PROCESSLIST
и уничтожать процесс командой KILL thread_id
.
Если Вы имеете привилегию process, Вы можете видеть и уничтожать все процессы. Иначе Вы можете видеть и уничтожать только Ваши собственные процессы.
Вы можете также использовать команды mysqladmin processlist
и
mysqladmin kill
, чтобы исследовать и уничтожать процессы.
При вызове KILL
для процесса устанавливается флаг kill
flag
.
В большинстве случаев может требоваться некоторое время для того, чтобы
процесс уничтожился, поскольку флаг kill flag
может быть
проверен только в специфических интервалах:
SELECT
, ORDER BY
и GROUP
BY
флажок будет проверен после чтения блока строк. Если он установлен,
инструкция будет прервана.
ALTER TABLE
флаг будет проверен прежде, чем
каждый блок строк считается из первоначальной таблицы. Если он установлен,
команда будет прервана, а временная таблица удалена.
UPDATE TABLE
и DELETE TABLE
,
флажок будет проверен после каждого чтения блока и после каждого обновления
или удаления строки. Если он установлен, инструкция будет прервана. Обратите
внимание, что, если Вы не используете транзакции, сделанные в таблице
изменения не будут отменены!
GET_LOCK()
прервется с NULL
.
INSERT DELAYED
быстренько сбросят на диск все
строки, которые у них лежат в памяти и завершатся.
Locked
), блокировка таблицы будет быстро прервана.
write
, запись немедленно прерывается с сообщением об
ошибке переполнения диска.SHOW
SHOW DATABASES [LIKE wild] SHOW [OPEN] TABLES [FROM db_name] [LIKE wild] SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [LIKE wild] SHOW INDEX FROM tbl_name [FROM db_name] SHOW TABLE STATUS [FROM db_name] [LIKE wild] SHOW STATUS [LIKE wild] SHOW VARIABLES [LIKE wild] SHOW LOGS SHOW [FULL] PROCESSLIST SHOW GRANTS FOR user SHOW CREATE TABLE table_name SHOW MASTER STATUS SHOW MASTER LOGS SHOW SLAVE STATUS
SHOW
обеспечивает информацию относительно баз данных, таблиц,
столбцов или информацию состояния сервера. Если используется часть
LIKE wild
, строка wild
может быть строкой, которая
использует групповые символы SQL `%' и `_'.
Вы можете использовать db_name.tbl_name
как вариант для
tbl_name FROM db_name
. Эти две инструкции эквивалентны:
mysql> SHOW INDEX FROM mytable FROM mydb; mysql> SHOW INDEX FROM mydb.mytable;
SHOW DATABASES
вносит в список базы данных на сервере
MySQL. Вы можете также получать этот список, используя команду
mysqlshow
.
SHOW TABLES
вносит в список таблицы в заданной базе данных.
Вы можете также получать этот список, используя команду
mysqlshow db_name
.
ОБРАТИТЕ ВНИМАНИЕ: Если пользователь не имеет привилегий
для таблицы, соответствующая таблица не будет обнаруживаться в выводе
SHOW TABLES
или mysqlshow db_name
.
SHOW OPEN TABLES
вносит в список таблицы, которые являются в
настоящее время открытыми в кэше таблиц.
Подробнее см. раздел "5.4.6 Как MySQL
открывает и закрывает таблицы". Поле Comment
сообщает
сколько раз таблица кэшируется (cached
) и используется
(in_use
).
SHOW COLUMNS
вносит в список столбцы в данной таблице. Если
Вы определяете опцию FULL
, Вы также получите привилегии, которые
Вы имеете для каждого столбца. Если типы столбцов отличны от ожидаемых, они
будут основаны на инструкции CREATE TABLE
, заметьте, что MySQL
иногда сам изменяет типы столбца.
Инструкция DESCRIBE
обеспечивает информацию, подобную
SHOW COLUMNS
.
SHOW FIELDS
является синонимом для SHOW COLUMNS
,
а SHOW KEYS
синонимом для SHOW INDEX
. Вы можете
также вносить в список столбцы таблицы или индексы с помощью команд
mysqlshow db_name tbl_name
или
mysqlshow -k db_name tbl_name
.
SHOW INDEX
возвращает индексную информацию в формате, который
очень походит на вызов SQLStatistics
в ODBC. Следующие столбцы
всегда будут возвращены:
Столбец | Назначение |
Table | Имя таблицы. |
Non_unique | 0, если индекс не может содержать дубликаты. |
Key_name | Имя индекса. |
Seq_in_index | Номер последовательности столбца в индексе, начиная с 1 (не с 0!). |
Column_name | Имя столбца. |
Collation | Как столбец сортируется в индексе. В
MySQL это может иметь варианты `A' (по возрастанию) или
NULL (не сортируемый). |
Cardinality | Число уникальных значений в индексе.
Это модифицируется запуском isamchk -a . |
Sub_part | Число индексированных символов, если
столбец только частично индексирован. NULL если весь ключ
индексирован в полном объеме. |
Comment | Различные замечания. Пока это сообщает, является ли индекс полнотекстовым (FULLTEXT) или нет. |
Обратите внимание, что, поскольку Cardinality
будет
рассчитано, основываясь на статистике, сохраненной как целые числа, оно не
обязательно точно для маленьких таблиц.
SHOW TABLE STATUS
SHOW TABLE STATUS [FROM db_name] [LIKE wild]
SHOW TABLE STATUS
(новинка в Version 3.23) работает подобно
SHOW STATUS
, но обеспечивает много информации относительно
каждой таблицы. Вы можете также получать этот список, используя команду
mysqlshow --status db_name
. Следующие столбцы возвращены:
Столбец | Зачем он нужен |
Name | Имя таблицы. |
Type | Тип таблицы. Подробности в разделе "7 Типы таблиц MySQL". |
Row_format | Формат хранения строки (фиксированный, динамический или сжатый). |
Rows | Число строк. |
Avg_row_length | Средняя длина строки. |
Data_length | Длина файла данных. |
Max_data_length | Максимальная длина файла данных. |
Index_length | Длина индексного файла. |
Data_free | Число распределенных, но не используемых байт. |
Auto_increment | Следующее значение auto_increment. |
Create_time | Когда таблица была создана. |
Update_time | Когда файл данных был в последний раз модифицирован. |
Check_time | Когда таблица была в последний раз проверена на ошибки. |
Create_options | Дополнительные параметры,
используемые с CREATE TABLE . |
Comment | Комментарий, используемый при создании таблицы (или информация о том, почему MySQL не может обращаться к информации по данной таблицы). |
Таблицы InnoDB
сообщат свободное пространство в ней через
поле комментария таблицы.
SHOW STATUS
SHOW STATUS
обеспечивает информацию состояния сервера
(подобно mysqladmin extended-status
). Вывод походит на
показанное ниже, хотя формат и числа будут другими:
+--------------------------+------------+ | Variable_name | Value | +--------------------------+------------+ | Aborted_clients | 0 | | Aborted_connects | 0 | | Bytes_received | 155372598 | | Bytes_sent | 1176560426 | | Connections | 30023 | | Created_tmp_disk_tables | 0 | | Created_tmp_tables | 8340 | | Created_tmp_files | 60 | | Delayed_insert_threads | 0 | | Delayed_writes | 0 | | Delayed_errors | 0 | | Flush_commands | 1 | | Handler_delete | 462604 | | Handler_read_first | 105881 | | Handler_read_key | 27820558 | | Handler_read_next | 390681754 | | Handler_read_prev | 6022500 | | Handler_read_rnd | 30546748 | | Handler_read_rnd_next | 246216530 | | Handler_update | 16945404 | | Handler_write | 60356676 | | Key_blocks_used | 14955 | | Key_read_requests | 96854827 | | Key_reads | 162040 | | Key_write_requests | 7589728 | | Key_writes | 3813196 | | Max_used_connections | 0 | | Not_flushed_key_blocks | 0 | | Not_flushed_delayed_rows | 0 | | Open_tables | 1 | | Open_files | 2 | | Open_streams | 0 | | Opened_tables | 44600 | | Questions | 2026873 | | Select_full_join | 0 | | Select_full_range_join | 0 | | Select_range | 99646 | | Select_range_check | 0 | | Select_scan | 30802 | | Slave_running | OFF | | Slave_open_temp_tables | 0 | | Slow_launch_threads | 0 | | Slow_queries | 0 | | Sort_merge_passes | 30 | | Sort_range | 500 | | Sort_rows | 30296250 | | Sort_scan | 4650 | | Table_locks_immediate | 1920382 | | Table_locks_waited | 0 | | Threads_cached | 0 | | Threads_created | 30022 | | Threads_connected | 1 | | Threads_running | 1 | | Uptime | 80380 | +--------------------------+------------+
Переменные состояния, перечисленные выше, имеют следующие значения:
Переменная | Значение |
Aborted_clients | Число подключений, прерванных потому, что клиент не закрыл подключение правильно. Подробности в разделе "8.2.9 Ошибки связи/прерванные соединения". |
Aborted_connects | Число попыток соединиться с сервером MySQL, которые потерпели неудачу. Подробности в разделе "8.2.9 Ошибки связи/прерванные соединения". |
Bytes_received | Число байт, полученных с клиентов. |
Bytes_sent | Число байт, посланных клиентам. |
Connections | Число попыток подключения к серверу MySQL. |
Created_tmp_disk_tables | Число неявных временных таблиц на диске, созданных при выполнении инструкций. |
Created_tmp_tables | Число неявных временных таблиц в памяти, созданных при выполнении инструкций. |
Created_tmp_files | Сколько временных файлов
создал mysqld . |
Delayed_insert_threads | Число отсроченных потоков драйвера вставки в использовании. |
Delayed_writes | Число строк, записанных со
INSERT DELAYED . |
Delayed_errors | Число строк, записанных со
INSERT DELAYED , для которых произошла ошибка (вероятно, двойной
ключ (duplicate key ) был использован). |
Flush_commands | Число выполненных команд
FLUSH . |
Handler_delete | Сколько раз строка была удалена из таблицы. |
Handler_read_first | Сколько раз первая запись
читалась из индекса. Если это значение высоко, предполагается, что сервер
делал много полных просмотров индекса, например, SELECT col1 FROM
foo , считая, что col1 индексирован. |
Handler_read_key | Число запросов на чтение строки, основанных на ключе. Если это значение высоко, это значит, что Ваши запросы и таблицы были правильно индексированы. |
Handler_read_next | Число запросов на чтение следующей строки в порядке ключа. Это значение будет увеличено, если Вы запрашиваете индексный столбец с ограничением диапазона. Это также будет увеличено, если Вы делаете индексный просмотр. |
Handler_read_rnd | Число запросов на чтение строк, основанных на фиксированной позиции. Это значение будет высоким, если Вы делаете много запросов, которые требуют сортировки результата. |
Handler_read_rnd_next | Число запросов на чтение следующей строки в файле данных. Это значение будет высоким, если Вы делаете много просмотров таблицы. Вообще это предполагает, что Ваши таблицы не были правильно индексированы, или что Ваши запросы не используют индексы. |
Handler_update | Число запросов на модификацию строк в таблице. |
Handler_write | Число запросов на вставку строки в таблицу. |
Key_blocks_used | Число используемых блоков в кэше ключа. |
Key_read_requests | Число запросов на чтение блока ключа из кэша. |
Key_reads | Число физических чтений блока ключа с диска, а не из кэша. |
Key_write_requests | Число запросов на запись блока ключа в кэш. |
Key_writes | Число физических записей блока ключа на диск, а не в кэш. |
Max_used_connections | Максимальное число подключений в использовании одновременно. |
Not_flushed_key_blocks | Число блоков ключей в кэше ключа, которые изменились, но не сброшены на диск. |
Not_flushed_delayed_rows | Число строк, ждущих
записи в очередях запросов INSERT DELAY . |
Open_tables | Число таблиц, которые являются открытыми. |
Open_files | Число файлов, которые являются открытыми. |
Open_streams | Число потоков, которые являются открытыми (используемыми, главным образом, для протоколирования). |
Opened_tables | Число таблиц, которые были открыты. |
Select_full_join | Число объединений без ключей (должно быть 0). |
Select_full_range_join | Число объединений, где использовали поиск диапазона по таблице ссылок. |
Select_range | Число объединений, где использовали диапазоны в первой таблице. Это обычно не критическое, даже если это большое. |
Select_scan | Число объединений, где просмотрели первую таблицу. |
Select_range_check | Число объединений без ключей, где проверяем использование ключа после каждой строки (должно быть 0). |
Questions | Число запросов, посланных серверу. |
Slave_open_temp_tables | Число временных таблиц, в настоящее время открытых подчиненным процессом. |
Slow_launch_threads | Число потоков, которым
понадобилось для установления соединения больше, чем
slow_launch_time . |
Slow_queries | Число запросов, которые заняли
больше, чем long_query_time . Подробности в разделе
"4.9.5 Медленный файл регистрации".
|
Sort_merge_passes | Число объединений,
потребовавших сортировки. Если это значение большое, Вы должны рассмотреть
увеличение sort_buffer . |
Sort_range | Число сортировок с диапазонами. |
Sort_rows | Число сортируемых строк. |
Sort_scan | Число сортировок выполненных, просматривая таблицу. |
Table_locks_immediate | Сколько раз блокировка таблицы применялась сразу. Доступно после версии 3.23.33. |
Table_locks_waited | Сколько раз блокировка таблицы не могла быть применена сразу и пришлось ждать. Если это значение высоко, и Вы имеете проблемы с эффективностью, Вы должны сначала оптимизировать Ваши запросы, а затем или разделить таблицу, или использовать репликацию. Доступно после 3.23.33. |
Threads_cached | Число потоков в кэше. |
Threads_connected | Сколько в настоящее время открыто подключений. |
Threads_created | Число потоков созданных, чтобы обработать подключения. |
Threads_running | Число потоков, которые сейчас не бездействуют. |
Uptime | Сколько секунд сервер уже работает. |
Некоторые комментарии относительно вышеупомянутого:
Opened_tables
велико, то переменная
table_cache
, вероятно, слишком маленькая.
key_reads
велико, то переменная key_cache
,
вероятно, слишком маленькая. Коэффицент кэширования может быть вычислен по
формуле: key_reads
/key_read_requests
.
Handler_read_rnd
велико, то Вы, вероятно, имеете много
запросов, которые требуют, чтобы MySQL просматривал целые таблицы, или Вы
имеете объединения, которые не используют ключи правильно.
Threads_created
велико, то следует увеличить переменную
thread_cache_size
.SHOW VARIABLES
SHOW VARIABLES [LIKE wild]
SHOW VARIABLES
показывает значения некоторых переменных
системы MySQL. Вы можете также получить эту информацию, используя команду
mysqladmin variables
. Если значения по умолчанию неподходящие,
Вы можете устанавливать большинство этих переменных, используя параметры
командной строки mysqld
. Подробности в разделе
"
4.1.1 Параметры командной строки mysqld".
Вывод походит на показанное ниже, хотя формат и числа будут иными:
+-------------------------+---------------------------+ | Variable_name | Value | +-------------------------+---------------------------+ | ansi_mode | OFF | | back_log | 50 | | basedir | /my/monty/ | | bdb_cache_size | 16777216 | | bdb_log_buffer_size | 32768 | | bdb_home | /my/monty/data/ | | bdb_max_lock | 10000 | | bdb_logdir | | | bdb_shared_data | OFF | | bdb_tmpdir | /tmp/ | | binlog_cache_size | 32768 | | concurrent_insert | ON | | connect_timeout | 5 | | datadir | /my/monty/data/ | | delay_key_write | ON | | delayed_insert_limit | 100 | | delayed_insert_timeout | 300 | | delayed_queue_size | 1000 | | flush | OFF | | flush_time | 0 | | have_bdb | YES | | have_innodb | YES | | have_raid | YES | | have_ssl | NO | | init_file | | | interactive_timeout | 28800 | | join_buffer_size | 131072 | | key_buffer_size | 16776192 | | language | /my/monty/share/english/ | | large_files_support | ON | | log | OFF | | log_update | OFF | | log_bin | OFF | | log_slave_updates | OFF | | long_query_time | 10 | | low_priority_updates | OFF | | lower_case_table_names | 0 | | max_allowed_packet | 1048576 | | max_binlog_cache_size | 4294967295 | | max_connections | 100 | | max_connect_errors | 10 | | max_delayed_threads | 20 | | max_heap_table_size | 16777216 | | max_join_size | 4294967295 | | max_sort_length | 1024 | | max_tmp_tables | 32 | | max_write_lock_count | 4294967295 | | myisam_recover_options | DEFAULT | | myisam_sort_buffer_size | 8388608 | | net_buffer_length | 16384 | | net_read_timeout | 30 | | net_retry_count | 10 | | net_write_timeout | 60 | | open_files_limit | 0 | | pid_file | /my/monty/data/donna.pid | | port | 3306 | | protocol_version | 10 | | record_buffer | 131072 | | query_buffer_size | 0 | | safe_show_database | OFF | | server_id | 0 | | skip_locking | ON | | skip_networking | OFF | | skip_show_database | OFF | | slow_launch_time | 2 | | socket | /tmp/mysql.sock | | sort_buffer | 2097116 | | table_cache | 64 | | table_type | MYISAM | | thread_cache_size | 4 | | thread_stack | 65536 | | tmp_table_size | 1048576 | | tmpdir | /tmp/ | | version | 3.23.29a-gamma-debug | | wait_timeout | 28800 | +-------------------------+---------------------------+
Каждая опция описана ниже. Значения для буферных размеров, длин и размеров
стека даны в байтах. Вы можете определять значения с суффиксами
`K' или `M', чтобы указать килобайты или мегабайты.
Например, 16M
указывает 16 мегабайтов. Регистр символов суффикса
не имеет значения: 16M
и 16m
эквивалентны.
ansi_mode
.
ON
, если mysqld
запущен с опцией
--ansi
. Подробности в разделе
"1.2.3 Запуск MySQL в режиме ANSI".
back_log
back_log
указывает, сколько
запросов могут быть сложены в стек в течение этого короткого времени прежде,
чем MySQL на мгновение остановит ответы на новые запросы. Вы должны увеличить
это только, если Вы ожидаете большое количество подключений за короткий
периоде времени (сервер работает интенсивно).
Другими словами, это значение задает размер слушающей очереди для входящих
подключений TCP/IP. Ваша операционная система имеет собственное ограничение
размера этой очереди. В Unix man-страница listen(2)
должна
иметь большее количество деталей. Проверьте документацию на Вашу ОС для
выяснения максимального значения для этой переменной. Попытка устанавливать
back_log
выше, чем это ограничение операционной системы, будет
неэффективна, хотя и безопасна.
basedir
--basedir
.
bdb_cache_size
BDB
-таблиц. Если Вы не используете таблицы BDB
, Вы
должны запустить mysqld
с опцией --skip-bdb
, чтобы
не тратить впустую память для этого кэша.
bdb_log_buffer_size
BDB
-таблиц. Если Вы не используете таблицы BDB
, Вы
должны запустить mysqld
с опцией --skip-bdb
, чтобы
не тратить впустую память для этого кэша.
bdb_home
--bdb-home
.
bdb_max_lock
bdb: Lock table is out of available locks
или Got error 12 from ...
, когда Вы делаете длинные транзакции,
или когда mysqld
должен исследовать много строк, чтобы
вычислить и обработать запрос.
bdb_logdir
--bdb-logdir
.
bdb_shared_data
ON
, если Вы используете --bdb-shared-data
.
bdb_tmpdir
--bdb-tmpdir
.
binlog_cache_size
.
character_set
character_sets
concurrent_inserts
ON
(значение по умолчанию), MySQL позволит Вам
использовать INSERT
на таблицах системы MyISAM
в то
же самое время, когда Вы выполняете на них запросы SELECT
.
Вы можете выключить эту опцию запуском mysqld
с параметрами
--safe
или --skip-new
.
connect_timeout
mysqld
ждет подключения перед
ответом Bad handshake
.
datadir
--datadir
.
delay_key_write
delay_key_write
в CREATE TABLE
. Это означает, что
буфер ключей для таблиц с этой опцией не будет сбрасываться на каждой
индексной модификации, а только когда таблица будет закрыта. Это ускорит
работу по записи, но Вы должны добавить автоматическую проверку всех таблиц
командой myisamchk --fast --force
. Обратите внимание, что, если
Вы запускаете mysqld
с опцией
--delay-key-write-for-all-tables
, это означает, что все таблицы
будут обрабатываться так, как будто они были созданы с опцией
delay_key_write
. Вы можете очищать этот флажок, запуская
mysqld
с параметрами --skip-new
или
--safe-mode
.
delayed_insert_limit
delayed_insert_limit
строк, драйвер
INSERT DELAYED
проверит, имеется ли любая задержка инструкций
SELECT
. Если так, это позволяет им выполниться перед
продолжением работ с таблицей.
delayed_insert_timeout
INSERT DELAYED
должен ждать инструкции
INSERT
перед своим завершением.
delayed_queue_size
INSERT DELAYED
. Если очередь заполняется, любой пользователь,
который вызвал INSERT DELAYED
, будет ждать до появления
свободного места в очереди.
flush
ON
, если MySQL был запущен с опцией --flush
.
flush_time
flush_time
секунд все таблицы будут закрыты (чтобы освободить
ресурсы и сбросить данные на диск). Я рекомендую эту опцию только на Win95,
Win98 или на системах, где Вы имеете очень небольшое количество ресурсов.
have_bdb
YES
, если mysqld
поддерживает таблицы Berkeley
DB. DISABLED
, если использован параметр
--skip-bdb
.
have_innodb
YES
, если mysqld
поддерживает таблицы InnoDB.
DISABLED
, если использован параметр --skip-innodb
.
have_raid
YES
, если mysqld
поддерживает опцию
RAID
.
have_ssl
YES
, если mysqld
поддерживает SSL (шифрование)
по протоколу клиент/сервер.
init_file
--init-file
при запуске
сервера. Это файл инструкций SQL, которые Вы хотите всегда выполнять при
каждом запуске сервера.
interactive_timeout
CLIENT_INTERACTIVE
для
mysql_real_connect()
. См. также wait_timeout
.
join_buffer_size
key_buffer_size
key_buffer_size
как раз и задает размер буфера, используемого
для индексных блоков. Увеличьте это значение, чтобы улучшить индексную
обработку. Но если Вы сделаете его слишком большим (больше, чем 50% общей
памяти?), Ваша система может начать использовать своп и стать ДЕЙСТВИТЕЛЬНО
медленной. Не забудьте, что поскольку MySQL не кэширует чтение данных, Вы
должны оставить некоторый участок памяти для кэша файловой системы ОС.
Вы можете проверять эффективность буфера ключей выполнением show
status
и изучением переменных Key_read_requests
,
Key_reads
, Key_write_requests
и
Key_writes
. Коэффициент Key_reads/Key_read_request
обычно должен быть < 0.01. Key_write/Key_write_requests
обычно близко к 1, если Вы используете обычное обновление/удаление, но может
быть намного меньше, если Вы имеете тенденцию делать модификации, которые
воздействуют на много данных сразу, или если Вы используете
delay_key_write
. Подробности в разделе
"4.5.5 Синтаксис SHOW
".
Чтобы получить заметное ускорение при записи многих строк сразу,
используйте LOCK TABLES
.
language
large_file_support
mysqld
компилировался с параметрами для поддержки
больших файлов.
locked_in_memory
mysqld
был блокирован в памяти опцией
--memlock
log
log_update
log_bin
log_slave_updates
long_query_time
Slow_queries
будет увеличен. Если Вы используете
--log-slow-queries
, запрос будут регистрироваться в файле
регистрации медленных запросов. Подробности в разделе
"4.9.5 Медленный файл регистрации".
lower_case_table_names
max_allowed_packet
net_buffer_length
байт, но может вырасти до
max_allowed_packet
байт, когда необходимо. Это значение по
умолчанию маленькое, но позволяет захватывать большие (возможно,
неправильные) пакеты. Вы должны увеличить это значение, если используете
большие столбцы BLOB
. Он должно быть столь же большим как самый
крупный BLOB
, который Вы хотите использовать. Текущий протокол
ограничивает max_allowed_packet
размером 16M.
max_binlog_cache_size
max_binlog_size
max_connections
mysqld
.
Подробности в разделе "8.2.5 Ошибка
Too many connections
".
max_connect_errors
FLUSH HOSTS
.
max_delayed_threads
INSERT DELAYED
. Если Вы попробуете вставлять данные в новую
таблицу после того, как все потоки INSERT DELAYED
будут заняты,
строка будет вставлена, как будто атрибут DELAYED
не был
определен вовсе, то есть немедленно.
max_heap_table_size
max_join_size
max_join_size
, возвращают ошибку. Установите это значение, если
Ваши пользователи имеют тенденцию выполнять объединения, которые испытывают
недостаток предложения WHERE
, занимают много времени или
возвращают миллионы строк.
max_sort_length
BLOB
или TEXT
(только первые
max_sort_length
байтов из каждого значения реально используются,
остальное игнорируется вообще).
max_user_connections
max_tmp_tables
max_write_lock_count
myisam_recover_options
--myisam-recover
.
myisam_sort_buffer_size
REPAIR
или при создании индексов с помощью CREATE
INDEX
или ALTER TABLE
.
myisam_max_extra_sort_file_size
.
myisam_max_sort_file_size
REPAIR
,
ALTER TABLE
или LOAD DATA INFILE
. Если размер файла
больше, чем это значение, индекс будет создан через кэш ключа, который
является более медленным. ОБРАТИТЕ ВНИМАНИЕ, что этот
параметр задан в мегабайтах!
net_buffer_length
max_allowed_packet
байт.
net_read_timeout
write_timeout
. См. также
slave_read_timeout
.
net_retry_count
FreeBSD
, поскольку там внутренние прерывания посланы всем
серверным процессам чтения.
net_write_timeout
open_files_limit
mysqld
использует это значение, чтобы
резервировать описатели файла для применения с setrlimit()
. Если
это значение = 0, mysqld
резервирует
max_connections*5
или max_connections+table_cache*2
(используется большее из этих значений) число файлов. Вы должны попробовать
увеличивать это значение, если mysqld
выдает Вам ошибку
'Too many open files'.
pid_file
--pid-file
.
port
--port
.
protocol_version
record_buffer
record_rnd_buffer
record_buffer
.
query_buffer_size
safe_show_databases
skip_show_databases
.
server_id
--server-id
.
skip_locking
mysqld
использует внешнюю блокировку.
skip_networking
skip_show_databases
SHOW DATABASES
, если
пользователь не имеет привилегии PROCESS_PRIV
. Это может
улучшить защиту. См. также safe_show_databases
.
slave_read_timeout
slow_launch_time
Slow_launch_threads
будет увеличен.
socket
sort_buffer
ORDER BY
или GROUP BY
. Подробности в разделе
"8.4.4 Где MySQL хранит временные файлы
".
table_cache
mysqld
.
MySQL нуждается в двух описателях файла для каждой уникальной открытой
таблицы. Вы можете проверять, должны ли Вы увеличить кэш таблицы, анализируя
переменную Opened_tables
. Подробности в разделе
"4.5.5 Синтаксис SHOW
".
Удостоверьтесь, что Ваша операционная система может обрабатывать число
описателей файла, подразумеваемых установкой table_cache
. Если
table_cache
слишком велико, MySQL может исчерпать описатели
файла и начать сбоить. За информацией относительно того, как работает кэш
таблицы, отсылаю Вас к разделу "5.4.6 Как
MySQL открывает и закрывает таблицы".
table_type
thread_cache_size
thread_cache_size
потоков. Все новые потоки
сначала принимаются из кэша и только, когда кэш пуст, создаются новые. Эта
переменная может увеличиваться, чтобы улучшить эффективность, если Вы имеете
много новых подключений.
thread_concurrency
mysqld
вызовет thr_setconcurrency()
с этим значением. thr_setconcurrency()
разрешает прикладной
программе давать системе управления данные относительно желательного числа
потоков, которые должны быть выполнены в одно и то же время.
thread_stack
crash-me
, зависят от этого значения. Значение по
умолчанию достаточно большое для нормальной работы. Подробности в разделе
"5.1.4 Пакет тестов
MySQL Benchmark Suite".
timezone
tmp_table_size
MyISAM
на диске.
Увеличьте значение tmp_table_size
, если Вы делаете много
продвинутых запросов GROUP BY
, и Вы имеете много памяти.
tmpdir
version
wait_timeout
interactive_timeout
.Раздел, который описывает настройку MySQL, содержит некоторую информацию относительно того, как настроить вышеупомянутые переменные. Подробности смотрите в разделе "5.5.2 Настройка параметров сервера".
SHOW LOGS
SHOW LOGS
показывает Вам информацию относительно состояния
существующих журналов. В настоящее время этот вызов отображает только
информацию относительно журналов Berkeley DB.
File
показывает полный путь к журналу.
Type
показывает тип журнала (BDB
для журналов
типа Berkeley DB).
Status
показывает состояние журнала (FREE
если
файл может быть удален, или IN USE
если файл необходим
подсистеме транзакций).SHOW PROCESSLIST
SHOW PROCESSLIST
показывает Вам, которые процессы работают.
Вы можете также получать эту информацию, используя команду mysqladmin
processlist
. Если Вы имеете привилегию process, Вы
можете видеть все процессы. Иначе Вы можете видеть только Ваши собственные
процессы. Если Вы не используете опцию FULL
, то только первые
100 символов каждого запроса будут показаны. Подробности в разделе
"4.5.4 Синтаксис KILL
".
Эта команда очень полезна, если Вы получаете сообщения об ошибках 'too
many connections' и хотите выяснить, что происходит. MySQL резервирует одно
подключение дополнительно для пользователя с привилегией
Process_priv
, чтобы гарантировать, что Вы всегда способны ко
входу в систему и ее проверке (эта ситуация не дает такую же привилегию всем
Вашим пользователям).
SHOW GRANTS
SHOW GRANTS FOR user
вносит в список команды, который должны
быть выданы, чтобы дублировать права пользователя. Например:
mysql> SHOW GRANTS FOR root@localhost; +---------------------------------------------------------------------+ | Grants for root@localhost | +---------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION | +---------------------------------------------------------------------+
SHOW CREATE TABLE
Показывает инструкцию CREATE TABLE
, которая создаст
данную таблицу. Например:
mysql> show create table t\G *************************** 1. row *************************** Table: t Create Table: CREATE TABLE t ( id int(11) default NULL auto_increment, s char(60) default NULL, PRIMARY KEY (id) ) TYPE=MyISAM
SHOW CREATE TABLE
цитирует таблицу и имена столбцов согласно
опции SQL_QUOTE_SHOW_CREATE
. Подробности в разделе
"5.5.6 Синтаксис SET
".
Вся клиентура MySQL, которая связывается с сервером, используя библиотеку
mysqlclient
, применяет следующие системные переменные:
Имя | Описание |
MYSQL_UNIX_PORT | Сокет по умолчанию. Используется
для связи с localhost |
MYSQL_TCP_PORT | Порт TCP/IP по умолчанию |
MYSQL_PWD | Пароль по умолчанию |
MYSQL_DEBUG | Опции трассировки при отладке |
TMPDIR | Каталог для хранения временных таблиц и файлов для свопа |
Использование MYSQL_PWD
может нарушить безопасность системы!
Подробности в разделе "4.2.7
Связь с сервером MySQL".
Клиент mysql использует файл, заданный в переменной окружения
MYSQL_HISTFILE
, чтобы сохранить хронологию командной строки.
Значение по умолчанию для файла хронологии $HOME/.mysql_history, где
$HOME
значение системной переменной HOME
, что
позволяет хранить историю команд отдельно для каждого пользователя.
Подробности в разделе "
Приложение 2. Переменные окружения".
Все программы MySQL берут много различных параметров. Однако, каждая
программа MySQL обеспечивает опцию справки --help
, это Вы можете
использовать, чтобы получить полное описание различных параметров программы.
Например, попробуйте вызов mysql --help
.
Вы можете отменять заданные по умолчанию параметры для всех стандартных программ клиентов файлом опций. Подробности в разделе "4.1.2 Файл опций my.cnf".
Список ниже кратко описывает программы MySQL:
myisamchk
myisamchk
имеет много функций, он описан в
собственном разделе.
make_binary_distribution
support.mysql.com
для удобства других пользователей MySQL.
msql2mysql
mSQL
в программы для
MySQL. Это не обрабатывает все случаи, но дает хорошее начало при
преобразовании.
mysqlaccess
mysqladmin
mysqladmin
может также использоваться, чтобы
получить данные о версии, процессах и статусе сервера. Подробности в разделе
"4.8.3
mysqladmin, Администрирование сервера MySQL".
mysqlbug
mysqld
mysqldump
mysqlimport
LOAD DATA INFILE
. Подробности в разделе
"4.8.7 mysqlimport, Импорт данных
из текстовых файлов".
mysqlshow
mysql_install_db
replace
msql2mysql
, но она имеет более
общее назначение. replace
заменяет строки в файлах или на
стандартном вводе. Может использоваться, чтобы переставлять строки местами.
Например, эта команда меняет в заданных файлах a
и
b
:
shell> replace a b b a -- file1 file2 ...
safe_mysqld
рекомендуемый способ запуска mysqld
сервера на Unix. safe_mysqld
добавляет некоторые свойства
безопасности типа перезапуска сервера, когда происходит ошибка, и регистрации
информации времени выполнения в журнале.
Если Вы не используете параметры --mysqld=#
или
--mysqld-version=#
, safe_mysqld
использует
программу с именем mysqld-max
, если она существует. В противном
случае safe_mysqld
запустит mysqld
.
Обычно никогда нельзя редактировать скрипт safe_mysqld
,
вместо этого надо помещать параметры в раздел [safe_mysqld]
в
файле my.cnf
. Скрипт safe_mysqld
будет читать все
параметры из секций [mysqld]
, [server]
и
[safe_mysqld]
. Подробности в разделе
"4.1.2 Файл опций my.cnf".
Обратите внимание, что все параметры в командной строке
safe_mysqld
передаются mysqld
. Если Вы хотите в
safe_mysqld
использовать параметры, которые не понимает
mysqld
, Вы должны определить их в файле опций.
Большинство параметров safe_mysqld
также представляют собой и
параметры для mysqld
. Подробности в разделе
"4.1.1 Параметры командной строки
mysqld".
safe_mysqld
поддерживает следующие параметры:
--basedir=path
--core-file-size=#
mysqld
должен быть способен создать.
Используйте ulimit -c
.
--datadir=path
, --defaults-extra-file=path
,
--defaults-file=path
, --err-log=path
,
--ledir=path
, --log=path
,
--pid-file=path
mysqld
.
--mysqld=mysqld-version
mysqld
в каталоге ledir
.
--mysqld-version=version
--mysqld=
, но здесь Вы даете только суффикс для
mysqld
. Например, если Вы используете
--mysqld-version=max
, safe_mysqld
запустит версию
ledir/mysqld-max
. Если параметр --mysqld-version
пустой, будет использоваться ledir/mysqld
.
--no-defaults
--open-files-limit=#
mysqld
должен быть способен открыть.
Используйте ulimit -n
. Обратите внимание, что Вы должны
запустить safe_mysqld
как root, чтобы это работало правильно!
--port=#
--socket=path
--timezone=#
TZ
).
--user=#
Скрипт safe_mysqld
написан так, чтобы запускать сервер,
который был установлен или из исходников, или из двоичной вырсии MySQL, даже
если они устанавливают сервер в различные места. safe_mysqld
ожидает, что одно из этих условий будет верно:
safe_mysqld
. safe_mysqld
смотрит в рабочем каталоге подкаталоги bin и data
(для двоичных пакетов) или libexec и var (для исходных
кодов). Это условие должно быть выполнено, если Вы выполняете
safe_mysqld
из Вашего каталога MySQL (например,
/usr/local/mysql).
safe_mysqld
пытается воспользоваться их абсолютными
именами. Типичные расположения /usr/local/libexec и
/usr/local/var.Поскольку safe_mysqld
пробует находить сервер и базы данных
относительно собственного рабочего каталога, Вы можете устанавливать двоичный
дистрибутив где угодно, запуская MySQL safe_mysqld
из
соответствующего ему каталога:
shell> cd mysql_installation_directory shell> bin/safe_mysqld &
Если safe_mysqld
не может ничего сделать, даже когда
вызывается из каталога MySQL, Вы можете использовать путь для
mysqld
, который является правильным для Вашей системы. Обратите
внимание, что, если Вы проапгрейдите MySQL, создастся новый файл
safe_mysqld
, и проблема вернется. Так что зарезервируйте
правильную версию стартового скрипта и восстановите ее после апгрейда.
mysqld_multi
предполагается для управления несколькими
серверами mysqld
на разных сокетах UNIX и портах TCP/IP.
Программа будет искать группу по именем вида [mysqld#] в файле my.cnf (или
в том файле настроек, который задан опцией --config-file=...), где # может
быть любым положительным номером, начиная с 1. Эти группы должны быть такими
же, как обычная группа [mysqld]
, но с тем портом, сокетом и
прочими специфическими данными, которые требуются для отдельных процессов
mysqld
. Номер в имени группы имеет другую функцию; он может
использоваться для старта, остановки или связи с этой программой.
Usage: mysqld_multi [OPTIONS] {start|stop|report} [GNR,GNR,GNR...] or mysqld_multi [OPTIONS] {start|stop|report} [GNR-GNR,GNR,GNR-GNR,...]
GNR означает номер группы. Вы можете запускать, останавливать или менять любой GNR или несколько из них в то же самое время. Список GNRS может быть разделен запятой или тире. Последнее означает диапазон воздействия GNR1-GNR2. Без параметра GNR все найденные группы будут обработаны. Обратите внимание, что Вы не должны иметь никаких пробелов в перечне GNR. Все после первого же пробела игнорируется вообще.
mysqld_multi
поддерживает следующие опции:
--config-file=...
[mysqld_multi]
), а только на группы [mysqld#]. Без этой опции
все будет взято из обычного файла my.cnf.
--example
--help
--log=...
--mysqladmin=...
mysqladmin
(используется для закрытия системы).
--mysqld=...
mysqld
. Обратите внимание, что Вы можете указать
здесь и safe_mysqld
. Параметры будут переданы
mysqld
. Только удостоверьтесь, что Вы имеете mysqld
в Вашей системной переменной PATH
или поправили
safe_mysqld
.
--no-log
--password=...
mysqladmin
.
--tcp-ip
--user=...
mysqladmin
.
--version
Некоторые замечания относительно mysqld_multi
:
mysqld
(то есть, пользуется mysqladmin
) имеет тот
же самый пароль и логин для всех каталогов данных, к которым обращается.
Также надо проверить, что пользователь имеет привилегию Shutdown_priv! Если
Вы имеете много данных и много различных баз данных mysql с различными
паролями для MySQL-пользователя root, Вы можете создать общего пользователя
multi_admin:
shell> mysql -u root -S /tmp/mysql.sock -proot_password -e "GRANT SHUTDOWN ON *.* TO multi_admin@localhost IDENTIFIED BY 'multipass'"
pid-file
очень важен, если Вы используете
safe_mysqld
, чтобы запустить mysqld
(например,
--mysqld=safe_mysqld). Каждый mysqld
должен иметь собственный
pid-file
. Перимущество применения здесь safe_mysqld
вместо mysqld
в том, что safe_mysqld
присматривает
за процессом mysqld
и перезапустит его в случае падения.
Пожалуйста, обратите внимание, что скрипт safe_mysqld
может
требовать, чтобы Вы запустили его из определенного каталога. Это означает,
что Вам, вероятно, придется перейти в заданный каталог прежде, чем Вы
запустите оттуда программу mysqld_multi
. Если Вы имеете проблемы
при старте, смотрите скрипт safe_mysqld
. Проверьте строки:
-------------------------------------------------------------------------- MY_PWD=`pwd` Check if we are starting this relative (for the binary release) if test -d /data/mysql -a -f ./share/mysql/english/errmsg.sys -a -x ./bin/mysqld --------------------------------------------------------------------------
mysqld
из одного каталога, они передерутся!
mysqld
.
mysqld
будут обрабатываться в
порядке их обнаружения в файле настройки.
mysqld
, но
чтобы делать это, Вы должны быть root, когда запускаете скрипт
mysqld_multi
. Наличие опции в файле конфигурации не имеет
значение. Вы только получите предупреждение, если Вы не суперпользователь, и
mysqld
стартует под ВАШИМ логином в UNIX.
ВАЖНО: Удостоверьтесь, что каталог данных и pid-файл
читаются и пишутся для ЭТОГО пользователя UNIX!
mysqlds
, и почему Вы
хотите использовать отдельные процессы mysqld
.
Запуск нескольких серверов в одном каталоге баз данных выигрыша в скорости
НЕ ДАСТ НИКОГДА!Подробности в разделе "4.1.4 Запуск нескольких серверов MySQL на одной системе".
Пример файла конфигурации mysqld_multi
.
# This file should probably be in your home dir (~/.my.cnf) or /etc/my.cnf # Version 2.1 by Jani Tolonen [mysqld_multi] mysqld = /usr/local/bin/safe_mysqld mysqladmin = /usr/local/bin/mysqladmin user = multi_admin password = multipass [mysqld2] socket = /tmp/mysql.sock2 port = 3307 pid-file = /usr/local/mysql/var2/hostname.pid2 datadir = /usr/local/mysql/var2 language = /usr/local/share/mysql/english user = john [mysqld3] socket = /tmp/mysql.sock3 port = 3308 pid-file = /usr/local/mysql/var3/hostname.pid3 datadir = /usr/local/mysql/var3 language = /usr/local/share/mysql/swedish user = monty [mysqld4] socket = /tmp/mysql.sock4 port = 3309 pid-file = /usr/local/mysql/var4/hostname.pid4 datadir = /usr/local/mysql/var4 language = /usr/local/share/mysql/estonia user = tonu [mysqld6] socket = /tmp/mysql.sock6 port = 3311 pid-file = /usr/local/mysql/var6/hostname.pid6 datadir = /usr/local/mysql/var6 language = /usr/local/share/mysql/japanese user = jani
myisampack
используется, чтобы сжать MyISAM таблицы, а
pack_isam
используется, чтобы сжать ISAM таблицы. Поскольку
таблицы системы ISAM считаются устаревшими, здесь будет рассмотрен только
myisampack
, но все сказанное применимо и для
pack_isam
.
myisampack
работает, сжимая каждый столбец в таблице отдельно.
Информация, необходимая для распаковки, читается в память, когда таблица
открывается. Это приводит к резкому улучшению эффективности при доступе к
одиночным записям. Дело в том, что расжимать приходится только одну запись, а
не большой дисковый блок, как при использовании Stacker в MS-DOS. Обычно
myisampack
упаковывает файл данных на 40%-70%.
MySQL использует управление памятью (mmap()
) на сжатых
таблицах и возвращается обратно к нормальному использованию файла для чтения
и записи, если mmap()
не работает.
В настоящее время имеются два ограничения для myisampack
:
myisampack
может также упаковывать столбцы BLOB
или TEXT
. Старая программа pack_isam
делать этого,
увы, не умеет.Снятие этих ограничений находится в списке TODO, но с низким приоритетом.
myisampack
вызывается примерно так:
shell> myisampack [options] filename ...
Каждое имя файла должно быть именем индексного файла (.MYI). Если Вы не в каталоге баз данных, Вы должны определить путь к файлу. Допустимо опустить расширение .MYI.
myisampack
поддерживает следующие параметры:
-b, --backup
tbl_name.OLD
.
-#, --debug=debug_options
debug_options
часто
'd:t:o,filename'
.
-f, --force
myisampack
создает временный файл
с именем `tbl_name.TMD' при сжатии таблицы. Если Вы уничтожаете
myisampack
, файл `.TMD' не может быть удален. Обычно
myisampack
завершается с ошибкой, если находит, что файл
`tbl_name.TMD' существует. С опцией --force
myisampack
упаковывает таблицу всегда.
-?, --help
-j big_tbl_name, --join=big_tbl_name
big_tbl_name
. Все таблицы, которые должны быть
объединены, ДОЛЖНЫ БЫТЬ идентичны (те же самые имена столбца и типы, те же
самые индексыи т.д.).
-p #, --packlength=#
myisampack
сохраняет все строки с указателями длиной 1, 2 или 3
байта. В наиболее частых случаях myisampack
может определять
нужное значение длины прежде, чем начинает упаковывать файл, но в ходе
процесса упаковки может выясниться, что можно было бы использовать более
короткую длину. В этом случае myisampack
будет печатать
примечание, что в следующий раз, когда Вы будете упаковывать тот же самый
файл, Вы могли бы использовать более короткую длину записи).
-s, --silent
-t, --test
-T dir_name, --tmp_dir=dir_name
-v, --verbose
-V, --version
-w, --wait
mysqld
вызывался с опцией --skip-locking
, не стоит
вызывать myisampack
, если таблица может модифицироваться в
течение процесса упаковки.Последовательность команд, показанная ниже, иллюстрирует типичный сеанс сжатия таблицы:
shell> ls -l station.* -rw-rw-r-- 1 monty my 994128 Apr 17 19:00 station.MYD -rw-rw-r-- 1 monty my 53248 Apr 17 19:00 station.MYI -rw-rw-r-- 1 monty my 5767 Apr 17 19:00 station.frm shell> myisamchk -dvv station MyISAM file: station Isam-version: 2 Creation time: 1996-03-13 10:08:58 Recover time: 1997-02-02 3:06:43 Data records: 1192 Deleted blocks: 0 Datafile: Parts: 1192 Deleted data: 0 Datafile pointer (bytes): 2 Keyfile pointer (bytes): 2 Max datafile length: 54657023 Max keyfile length: 33554431 Recordlength: 834 Record format: Fixed length table description: Key Start Len Index Type Root Blocksize Rec/key 1 2 4 unique unsigned long 1024 1024 1 2 32 30 multip. text 10240 1024 1 Field Start Length Type 1 1 1 2 2 4 3 6 4 4 10 1 5 11 20 6 31 1 7 32 30 8 62 35 9 97 35 10 132 35 11 167 4 12 171 16 13 187 35 14 222 4 15 226 16 16 242 20 17 262 20 18 282 20 19 302 30 20 332 4 21 336 4 22 340 1 23 341 8 24 349 8 25 357 8 26 365 2 27 367 2 28 369 4 29 373 4 30 377 1 31 378 2 32 380 8 33 388 4 34 392 4 35 396 4 36 400 4 37 404 1 38 405 4 39 409 4 40 413 4 41 417 4 42 421 4 43 425 4 44 429 20 45 449 30 46 479 1 47 480 1 48 481 79 49 560 79 50 639 79 51 718 79 52 797 8 53 805 1 54 806 1 55 807 20 56 827 4 57 831 4 shell> myisampack station.MYI Compressing station.MYI: (1192 records) - Calculating statistics normal: 20 empty-space: 16 empty-zero: 12 empty-fill: 11 pre-space: 0 end-space: 12 table-lookups: 5 zero: 7 Original trees: 57 After join: 17 - Compressing file 87.14% shell> ls -l station.* -rw-rw-r-- 1 monty my 127874 Apr 17 19:00 station.MYD -rw-rw-r-- 1 monty my 55296 Apr 17 19:04 station.MYI -rw-rw-r-- 1 monty my 5767 Apr 17 19:00 station.frm shell> myisamchk -dvv station MyISAM file: station Isam-version: 2 Creation time: 1996-03-13 10:08:58 Recover time: 1997-04-17 19:04:26 Data records: 1192 Deleted blocks: 0 Datafile: Parts: 1192 Deleted data: 0 Datafilepointer (bytes): 3 Keyfile pointer (bytes): 1 Max datafile length: 16777215 Max keyfile length: 131071 Recordlength: 834 Record format: Compressed table description: Key Start Len Index Type Root Blocksize Rec/key 1 2 4 unique unsigned long 10240 1024 1 2 32 30 multip. text 54272 1024 1 Field Start Length Type Huff tree Bits 1 1 1 constant 1 0 2 2 4 zerofill(1) 2 9 3 6 4 no zeros, zerofill(1) 2 9 4 10 1 3 9 5 11 20 table-lookup 4 0 6 31 1 3 9 7 32 30 no endspace, not_always 5 9 8 62 35 no endspace, not_always, no empty 6 9 9 97 35 no empty 7 9 10 132 35 no endspace, not_always, no empty 6 9 11 167 4 zerofill(1) 2 9 12 171 16 no endspace, not_always, no empty 5 9 13 187 35 no endspace, not_always, no empty 6 9 14 222 4 zerofill(1) 2 9 15 226 16 no endspace, not_always, no empty 5 9 16 242 20 no endspace, not_always 8 9 17 262 20 no endspace, no empty 8 9 18 282 20 no endspace, no empty 5 9 19 302 30 no endspace, no empty 6 9 20 332 4 always zero 2 9 21 336 4 always zero 2 9 22 340 1 3 9 23 341 8 table-lookup 9 0 24 349 8 table-lookup 10 0 25 357 8 always zero 2 9 26 365 2 2 9 27 367 2 no zeros, zerofill(1) 2 9 28 369 4 no zeros, zerofill(1) 2 9 29 373 4 table-lookup 11 0 30 377 1 3 9 31 378 2 no zeros, zerofill(1) 2 9 32 380 8 no zeros 2 9 33 388 4 always zero 2 9 34 392 4 table-lookup 12 0 35 396 4 no zeros, zerofill(1) 13 9 36 400 4 no zeros, zerofill(1) 2 9 37 404 1 2 9 38 405 4 no zeros 2 9 39 409 4 always zero 2 9 40 413 4 no zeros 2 9 41 417 4 always zero 2 9 42 421 4 no zeros 2 9 43 425 4 always zero 2 9 44 429 20 no empty 3 9 45 449 30 no empty 3 9 46 479 1 14 4 47 480 1 14 4 48 481 79 no endspace, no empty 15 9 49 560 79 no empty 2 9 50 639 79 no empty 2 9 51 718 79 no endspace 16 9 52 797 8 no empty 2 9 53 805 1 17 1 54 806 1 3 9 55 807 20 no empty 3 9 56 827 4 no zeros, zerofill(2) 2 9 57 831 4 no zeros, zerofill(1) 2 9
Информация, напечатанная myisampack
, описана ниже:
normal
empty-space
empty-zero
empty-fill
INTEGER
может быть изменен на MEDIUMINT
).
pre-space
end-space
table-lookup
ENUM
перед сжатием Huffman.
zero
Original trees
After join
После того, как таблица была сжата, myisamchk -dvv
печатает
дополнительную информацию относительно каждого поля:
Type
constant
no endspace
no endspace, not_always
no endspace, no empty
table-lookup
ENUM
.
zerofill(n)
n
байт в значении всегда 0, и поэтому
не были сохранены.
no zeros
always zero
Huff tree
Bits
После того, как Вы выполнили
pack_isam
/myisampack
,
Вы должны выполнить isamchk
/myisamchk
, чтобы
освежить индекс. В это время Вы можете также сортировать индексные блоки и
создавать статистику, необходимую для оптимизатора MySQL, чтобы он мог
работать более эффективно:
myisamchk -rq --analyze --sort-index table_name.MYI isamchk -rq --analyze --sort-index table_name.ISM
После того, как Вы установили упакованную таблицу в каталог баз данных
MySQL, Вы должны скомандовать mysqladmin flush-tables
, чтобы
вынудить mysqld
использовать новую таблицу.
Если Вы хотите распаковать упакованную таблицу, Вы можете сделать это с
помощью опции --unpack
в вызове isamchk
или
myisamchk
.
mysqld-max
представляет собой сервер MySQL
(mysqld
), собранный со следующими параметрами конфигурации:
Опция | Комментарий |
--with-server-suffix=-max | Добавлять суффикс к строке версии
mysqld . |
--with-bdb | Поддерживать таблицы Berkeley DB (BDB) |
--with-innodb | Поддерживать таблицы InnoDB. |
CFLAGS=-DUSE_SYMDIR | Поддерживать ссылки для Windows. |
Вы можете скачать бинарники MySQL-max с координат: http://www.mysql.com/downloads/mysql-max-3.23.html.
Двоичный дистрибутив (не исходники!) Windows MySQL 3.23 включает
стандартный mysqld.exe
и расширенный
mysqld-max.exe
. Скачать можно с координат:
http://www.mysql.com/downloads/mysql-3.23.html. Подробности в разделе
"2.1.2 Установка MySQL в Windows
".
Обратите внимание, что, так как Berkeley DB и InnoDB не доступны для всех
платформ, некоторые из двоичных версий Max
могут и не иметь
поддержку их обоих. Вы можете проверять, какие типы таблицы поддержаны,
делая следующий запрос:
mysql> show variables like "have_%"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | have_bdb | YES | | have_innodb | NO | | have_isam | YES | | have_raid | NO | | have_ssl | NO | +---------------+-------+
Смысл значений:
Значение | Смысл. |
YES | Опция активизирована и пригодна для использования. |
NO | MySQL не компилируется с поддержкой для этой опции. |
DISABLED | Опция xxxx заблокирована, потому что
mysqld запущен с опцией --skip-xxxx , или, наоборот,
mysqld не получил всех необходимых параметров, чтобы включить
поддержку опции. В этом случае файл hostname.err должен
содержать причину того, почему опция заблокирована. |
ОБРАТИТЕ ВНИМАНИЕ: Чтобы создавать таблицы InnoDB, Вы
ДОЛЖНЫ редактировать Ваши параметры запуска, чтобы включить
по крайней мере опцию innodb_data_file_path
. Подробности в
разделе "7.6.2 Опции запуска InnoDB".
Чтобы получать лучшую эффективность для таблиц BDB, Вы также должны добавить некоторые параметры конфигурации для них. Подробности в разделе "7.5.3 Опции запуска BDB".
safe_mysqld
автоматически пробует запускать любой двоичный
исполняемый модуль mysqld
с префиксом -max
.
mysqld-max
RPM использует вышеупомянутое свойство
safe_mysqld
. Он только устанавливает выполнимую программу
mysqld-max
, а safe_mysqld
автоматически использует
эту выполнимую программу, когда будет перезапущен.
Следующая таблица показывает, какие таблицы поддерживаются MySQL-Max для разных платформ:
Система | BDB | InnoDB |
AIX 4.3 | N | Y |
HP-UX 11.0 | N | Y |
Linux-Alpha | N | Y |
Linux-Intel | Y | Y |
Linux-Ia64 | N | Y |
Solaris-Intel | N | Y |
Solaris-Sparc | Y | Y |
SCO OSR5 | Y | Y |
Unix Ware | Y | Y |
Windows NT | Y | Y |
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |