Размеры буферов, используемые по умолчанию сервером 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 read_buffer_size current value: 131072 record_rnd_buffer_size 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
Не забывайте, что --set-variable
не используется в MySQL 4.0. Просто
указывайте --var=option
.
Если сервер mysqld
в настоящее время работает, то для того, чтобы увидеть,
какие величины реально используются для переменных, необходимо выполнить
следующую команду:
shell> mysqladmin variables
Полное описание всех переменных можно найти в разделе SHOW VARIABLES
этого
руководства (see Раздел 4.5.6.4, «SHOW VARIABLES
»).
Некоторые статистические данные по работающему серверу можно также
просмотреть с помощью команды SHOW STATUS
(see Раздел 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 read_buffer_size=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 read_buffer_size=100k &
или даже:
shell> safe_mysqld -O key_buffer=512k -O sort_buffer=16k \ -O table_cache=32 -O read_buffer_size=8k \ -O net_buffer_length=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
расположена последней; в
противном случае влияние любой опции, следующей после нее в командной
строке, в данном выводе отражено не будет.