Назад | Перейти на главную страницу

Как настроить сервер MySQL для использования большего объема памяти

У меня есть установка MySQL в Windows вместе с Plesk. Версия 5.0.45 Community.

Базы данных, которые у меня есть на сервере, - это MyISAM, а также InnoDb, но преимущественно innodb.

У меня на сервере было 8 ГБ памяти, но MySQL не поднимается выше 1,3 ГБ, и настройка параметров не помогает. Я попытался увеличить выделение памяти для innodb_buffer_pool_size, он работает, если я установил его до 1 ГБ, но если я установил 2 ГБ или выше, сервер не вернется в онлайн!

Я хочу, чтобы mySQL использовал по крайней мере 5-6 гигабайт памяти, которая у меня есть для производительности, но я не могу заставить это работать.

Кто-нибудь может помочь? Мой файл конфигурации mysql находится ниже (есть 2 раздела mysqld ... когда я использовал рабочую среду MySQL, он создал еще один!)

[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

Но это непросто. 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";

Больше информации на этом ссылка на сайт.