[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
You can determine the default buffer sizes used by the mysqld
server
with this command:
shell> mysqld --help |
This command produces a list of all mysqld
options and configurable
variables. The output includes the default variable values and looks something
like this:
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 read_rnd_buffer_size current value: 262144 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 |
If there is a mysqld
server currently running, you can see what
values it actually is using for the variables by issuing this statement:
mysql> SHOW VARIABLES; |
You can also see some statistics and status indicators for a running server by issuing this statement:
mysql> SHOW STATUS; |
You can find a full description for all variables in the SHOW VARIABLES
section in this manual. See section SHOW VARIABLES
.
For information about status variables, see
SHOW STATUS
.
Server variable and status information also can be obtained using
mysqladmin
:
shell> mysqladmin variables shell> mysqladmin extended-status |
MySQL uses algorithms that are very scalable, so you can usually run with very little memory. However, if you give MySQL more memory, normally you will also get better performance.
When tuning a MySQL server, the two most important variables to use
are key_buffer_size
and table_cache
. You should first feel
confident that you have these set appropriately before trying to change
any other variables.
The following examples indicate some typical variable values for different
runtime configurations. The examples use the mysqld_safe
script and
use --name=value
syntax to set the variable name
to the value
value
. This syntax is available as of MySQL 4.0. For older versions
of MySQL, take the following differences into account:
safe_mysqld
rather than mysqld_safe
.
--set-variable=name=value
or -O name=value
syntax.
_size
, you may need to specify them
without _size
. For example, the old name for sort_buffer_size
is
sort_buffer
. The old name for read_buffer_size
is
record_buffer
. To see which variables your version of the server
recognizes, use mysqld --help
.
If you have at least 256M of memory and many tables and want maximum performance with a moderate number of clients, you should use something like this:
shell> mysqld_safe --key_buffer_size=64M --table_cache=256 \ --sort_buffer_size=4M --read_buffer_size=1M & |
If you have only 128M of memory and only a few tables, but you still do a lot of sorting, you can use something like:
shell> mysqld_safe --key_buffer_size=16M --sort_buffer_size=1M |
If you have little memory and lots of connections, use something like this:
shell> mysqld_safe --key_buffer_size=512K --sort_buffer_size=100K \ --read_buffer_size=100K & |
Or even this:
shell> mysqld_safe --key_buffer_size=512K --sort_buffer_size=16K \ --table_cache=32 --read_buffer_size=8K -O net_buffer_length=1K & |
If you are doing a GROUP BY
or ORDER BY
on tables that are
much larger than your available memory, you should increase the value of
read_rnd_buffer_size
to speed up the reading of rows after sorting
operations.
When you have installed MySQL, the `support-files' directory will contain some different `my.cnf' example files, `my-huge.cnf', `my-large.cnf', `my-medium.cnf', and `my-small.cnf', you can use as a base to optimize your system.
If there are very many simultaneous connections, swapping problems
may occur unless mysqld
has been configured to use very
little memory for each connection. mysqld
performs better
if you have enough memory for all connections.
Note that if you specicy an option on the command line for mysqld
or
mysqld_safe
, it remains in effect only for that invocation of the server.
To use the option every time the server runs, put it in an option file.
To see the effects of a parameter change, do something like this:
shell> mysqld --key_buffer_size=32m --help |
Make sure that the --help
option is last; otherwise, the effect of any
options listed after it on the command line will not be reflected in the
output.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |