![如何设置 MySQL 服务器以利用更多内存](https://linux22.com/image/538299/%E5%A6%82%E4%BD%95%E8%AE%BE%E7%BD%AE%20MySQL%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BB%A5%E5%88%A9%E7%94%A8%E6%9B%B4%E5%A4%9A%E5%86%85%E5%AD%98.png)
我在 Windows 上安装了 MySQL 和 Plesk。版本是 5.0.45 Community。
我在服务器上的数据库是 MyISAM 和 InnoDb,但主要是 innodb。
我的服务器上有 8G 内存,但 MySQL 不会增加超过 1.3G,调整设置也无济于事。我尝试增加 innodb_buffer_pool_size 的内存分配,如果我将其设置为 1G,它就可以正常工作,但如果我将其设置为 2G 或更高,服务器就不会重新上线!
我希望 mySQL 至少使用 5-6 GB 的内存来提高性能,但我无法让它工作。
有人可以帮忙吗?我的 mysql 配置文件如下(有 2 个 mysqld 部分...当我使用 MySQL workbench 时,它创建了另一个!)
[MySQLD]
port=3306
basedir=C:\\Program Files (x86)\\Parallels\\Plesk\\Databases\\MySQL
datadir=C:\\Program Files (x86)\\Parallels\\Plesk\\Databases\\MySQL\\Data
default-character-set=latin1
default-storage-engine=INNODB
query_cache_size=128M
table_cache=1024
tmp_table_size=32M
thread_cache=32
myisam_max_sort_file_size=100G
myisam_max_extra_sort_file_size=100G
myisam_sort_buffer_size=2M
key_buffer_size=32M
read_buffer_size=16M
read_rnd_buffer_size=2M
sort_buffer_size=8M
innodb_additional_mem_pool_size=24M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=10M
innodb_buffer_pool_size=1G
innodb_log_file_size=10M
innodb_thread_concurrency=8
max_connections=700
key_buffer=48M
max_allowed_packet=5M
sort_buffer=2M
net_buffer_length=4K
old_passwords=1
wait_timeout=20
connect_timeout=60
[client]
port=3306
[mysqld]
query_cache_min_res_unit = 4096
innodb_additional_mem_pool_size = 1048576
innodb_buffer_pool_size = 1G
query_cache_limit = 1048576
key_buffer_size = 8388608
sort_buffer_size = 2097144
query_cache_type = 1
query_cache_size = 312M
log-slow-queries
connect_timeout = 5
wait_timeout = 20
thread_cache_size = 15
read_buffer_size = 131072
table_cache = 64
答案1
但这并不容易。MySQL 有许多影响内存利用率的变量。其中许多变量也依赖于存储引擎。一些变量是全局的,一些是线程特定的,因此您必须将它们乘以并发连接数。
这是一个根据参数列表计算内存利用率的脚本:
#!/usr/bin/env - perl
$K=1024;
$M=$K*$K;
$num_connections = 20;
$thread_stack = 64*$K;
$read_rnd_buffer_size = 2*$M;
$max_allowed_packet = 1*$M;
$tmp_table_size = 2*$M;
# Set low for non-myisam config, but not lower than 4M since temp tables need it, too.
$myisam_sort_buffer_size=4 *$M;
$read_buffer_size = 2 *$M;
$join_buffer_size = 8 *$M;
$query_cache_size = 128 * $M;
# Set low for non-myisam config
$key_buffer_size = 4 * $M;
$innodb_buffer_pool_size = 64 *$M;
$innodb_additional_mem_pool_size = 2 *$M;
$innodb_log_buffer_size = 4 * $M;
#=============== CALCULATIONS. DO NOT MODIFY
$per_thread_ram = $thread_stack
+ $read_rnd_buffer_size
+ $max_allowed_packet
+ $tmp_table_size
+ $myisam_sort_buffer_size
+ $read_buffer_size
+ $join_buffer_size;
$total_ram = $per_thread_ram * $num_connections
+ $query_cache_size
+ $key_buffer_size
+ $innodb_buffer_pool_size
+ $innodb_additional_mem_pool_size
+ $innodb_log_buffer_size;
print "Total RAM consumed: ".$total_ram/$M." MB\n";
更多信息请访问此处关联。