5.5.2 Настройка параметров сервера
Размеры буферов, используемые по умолчанию сервером mysqld
, можно узнать с
помощью следующей команды:
shell> mysqld --help
Эта команда выдает список всех опций mysqld
и конфигурируемых переменных.
Вывод включает в себя величины по умолчанию и выглядит примерно следующим
образом:
Possible variables for option --set-variable (-O) are:
back_log current value: 5
bdb_cache_size current value: 1048540
binlog_cache_size current value: 32768
connect_timeout current value: 5
delayed_insert_timeout current value: 300
delayed_insert_limit current value: 100
delayed_queue_size current value: 1000
flush_time current value: 0
interactive_timeout current value: 28800
join_buffer_size current value: 131072
key_buffer_size current value: 1048540
lower_case_table_names current value: 0
long_query_time current value: 10
max_allowed_packet current value: 1048576
max_binlog_cache_size current value: 4294967295
max_connections current value: 100
max_connect_errors current value: 10
max_delayed_threads current value: 20
max_heap_table_size current value: 16777216
max_join_size current value: 4294967295
max_sort_length current value: 1024
max_tmp_tables current value: 32
max_write_lock_count current value: 4294967295
myisam_sort_buffer_size current value: 8388608
net_buffer_length current value: 16384
net_retry_count current value: 10
net_read_timeout current value: 30
net_write_timeout current value: 60
query_buffer_size current value: 0
record_buffer current value: 131072
record_rnd_buffer current value: 131072
slow_launch_time current value: 2
sort_buffer current value: 2097116
table_cache current value: 64
thread_concurrency current value: 10
tmp_table_size current value: 1048576
thread_stack current value: 131072
wait_timeout current value: 28800
Если сервер mysqld
в настоящее время работает, то для того, чтобы увидеть,
какие величины реально используются для переменных, необходимо выполнить
следующую команду:
shell> mysqladmin variables
Полное описание всех переменных можно найти в разделе SHOW VARIABLES
этого
руководства (see section 4.5.6.4 SHOW VARIABLES
).
Некоторые статистические данные по работающему серверу можно также
просмотреть с помощью команды SHOW STATUS
(see section 4.5.6.3 SHOW STATUS
).
В MySQL используются алгоритмы, масштабируемые в широких пределах, так что
обычно можно работать с очень небольшой памятью. Однако если выделить для
MySQL больше памяти, то и производительность, как правило, будет выше.
При настройке сервера MySQL наиболее важными из используемых являются две
переменные key_buffer_size
и table_cache
. Но прежде чем пытаться изменить
ту или иную переменную, вначале следует убедиться, что вы обладаете
необходимыми для этого правами.
Если имеется большая память (>=256 Mб) и много таблиц, то для обеспечения
максимальной производительности путем регулирования количества клиентов
следует использовать что-нибудь вроде этого:
shell> safe_mysqld -O key_buffer=64M -O table_cache=256 \
-O sort_buffer=4M -O record_buffer=1M &
Если память составляет только 128 Mб и количество таблиц невелико, но тем
не менее, выполняется много сортировок, то можно использовать что-нибудь
вроде:
shell> safe_mysqld -O key_buffer=16M -O sort_buffer=1M
При малой памяти и большом количестве соединений следует использовать
что-нибудь вроде следующего:
shell> safe_mysqld -O key_buffer=512k -O sort_buffer=100k \
-O record_buffer=100k &
или даже:
shell> safe_mysqld -O key_buffer=512k -O sort_buffer=16k \
-O table_cache=32 -O record_buffer=8k \
-O net_buffer=1K &
Если выполняются операции GROUP BY
или ORDER BY
на файлах, которые намного
больше, чем доступная память, то следует увеличить величину
record_rnd_buffer
для ускорения чтения строк после выполнения сортировки.
После установки MySQL каталог `support-files' будет содержать несколько
различных файлов-примеров `my.cnf', а именно: `my-huge.cnf', `my-large.cnf',
`my-medium.cnf' и `my-small.cnf', которые можно использовать как основу для
оптимизации вашей системы.
Если демон mysqld
не отконфигурирован для использования очень малой памяти
для каждого соединения, то в условиях очень большого количества соединений
могут возникнуть проблемы с подкачкой виртуальной памяти. При наличии
достаточной памяти для всех соединений mysqld
, конечно, будет
функционировать лучше.
Следует учитывать, что при изменении какой-либо опции для mysqld
это
изменение действительно только для данного экземпляра сервера.
Чтобы увидеть воздействие изменения параметра, нужно выполнить что-нибудь
вроде этого:
shell> mysqld -O key_buffer=32m --help
Следует удостовериться, что опция --help
расположена последней; в
противном случае влияние любой опции, следующей после нее в командной
строке, в данном выводе отражено не будет.