cyberpower
New Member
Здравейте,
Тези дни един от сървърите взе често да забива, имах съмнения че проблема се дължи на MySQL и май от това се оказа, но още не се знае промените които направих са от тази вечер. Ще видим през деня като скочи натоварването какъв ефект ще имат.
Инсталирах си един скрипт mysqltuner и се оказа че Max Memory Limit за MySQL е два пъти повече от реалната памет на сървъра. Като се поразрових се оказа че нищо не е както трябва в конфигурацията и направих промени почти по всички настройки.
В момента my.cnf настройките изглеждат по следния начин:
table_cache=2200
table_definition_cache=2200
query_cache_size=80M
query_cache_limit=8M
sort_buffer_size=8M
read_rnd_buffer_size=8M
open_files_limit=4800
max_heap_table_size=60M
tmp_table_size=60M
read_buffer_size=2M
innodb_buffer_pool_size=250M
thread_cache_size=25
join_buffer_size=15M
key_buffer=100M
max_connections=22
max_connect_errors=10
max_user_connections=22
wait_timeout=6000
interactive_timeout=6000
max_allowed_packet=4M
myisam_sort_buffer_size=16M
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2
thread_concurrency=4
Apacehe-то е worker fastcgi с включени следните модули:
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule substitute_module modules/mod_substitute.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule version_module modules/mod_version.so
LoadModule fcgid_module /usr/lib/httpd/modules/mod_fcgid.so
Сървъра е със следните параметри:
Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz, 4 cores
Real memory:1.63GB(Реално са 1.70GB но явно част отиват за системни ресурси и толкова ми засича total)
Virtual memory:1GB
В момента mysqltuner ми показва че Max Memory Limit за MySQL е 1.13GB. Това добре ли е или трябва да го намаля или увелича. Коментари за самите настройки също са добре дошли, че сървърите не са ми силна страна. Притеснява ме най вече max_connections дали не е малко че преди беше 50, а mysqltuner ми показваше че max е достигало до 45 и ме съветваше да го увелича, но като го увелича скача и Max Memory Limit за MySQL
Ето и някои допълнителни данни:
>>top
6527 apache 20 0 62244 26m 6932 S 18.9 1.6 0:03.12 php-cgi
6315 apache 20 0 74908 39m 7396 S 17.3 2.3 0:29.32 php-cgi
6427 apache 20 0 73104 37m 7520 S 7.0 2.2 0:25.79 php-cgi
1116 mysql 20 0 603m 421m 5024 S 3.0 25.2 3:21.91 mysqld
mysqltuner
Total buffers: 492.0M global + 33.2M per thread (22 max threads)
Като бази данни имам:
Една с големина 1.2GB на InnoDB към която са по-голяма част от заявките над 50%
Една с големина около 400MB MyISAM
И други 10-тина около 100MB пак на MyISAM
Тези дни един от сървърите взе често да забива, имах съмнения че проблема се дължи на MySQL и май от това се оказа, но още не се знае промените които направих са от тази вечер. Ще видим през деня като скочи натоварването какъв ефект ще имат.
Инсталирах си един скрипт mysqltuner и се оказа че Max Memory Limit за MySQL е два пъти повече от реалната памет на сървъра. Като се поразрових се оказа че нищо не е както трябва в конфигурацията и направих промени почти по всички настройки.
В момента my.cnf настройките изглеждат по следния начин:
table_cache=2200
table_definition_cache=2200
query_cache_size=80M
query_cache_limit=8M
sort_buffer_size=8M
read_rnd_buffer_size=8M
open_files_limit=4800
max_heap_table_size=60M
tmp_table_size=60M
read_buffer_size=2M
innodb_buffer_pool_size=250M
thread_cache_size=25
join_buffer_size=15M
key_buffer=100M
max_connections=22
max_connect_errors=10
max_user_connections=22
wait_timeout=6000
interactive_timeout=6000
max_allowed_packet=4M
myisam_sort_buffer_size=16M
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2
thread_concurrency=4
Apacehe-то е worker fastcgi с включени следните модули:
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule substitute_module modules/mod_substitute.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule version_module modules/mod_version.so
LoadModule fcgid_module /usr/lib/httpd/modules/mod_fcgid.so
Сървъра е със следните параметри:
Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz, 4 cores
Real memory:1.63GB(Реално са 1.70GB но явно част отиват за системни ресурси и толкова ми засича total)
Virtual memory:1GB
В момента mysqltuner ми показва че Max Memory Limit за MySQL е 1.13GB. Това добре ли е или трябва да го намаля или увелича. Коментари за самите настройки също са добре дошли, че сървърите не са ми силна страна. Притеснява ме най вече max_connections дали не е малко че преди беше 50, а mysqltuner ми показваше че max е достигало до 45 и ме съветваше да го увелича, но като го увелича скача и Max Memory Limit за MySQL
Ето и някои допълнителни данни:
>>top
6527 apache 20 0 62244 26m 6932 S 18.9 1.6 0:03.12 php-cgi
6315 apache 20 0 74908 39m 7396 S 17.3 2.3 0:29.32 php-cgi
6427 apache 20 0 73104 37m 7520 S 7.0 2.2 0:25.79 php-cgi
1116 mysql 20 0 603m 421m 5024 S 3.0 25.2 3:21.91 mysqld
mysqltuner
Total buffers: 492.0M global + 33.2M per thread (22 max threads)
Като бази данни имам:
Една с големина 1.2GB на InnoDB към която са по-голяма част от заявките над 50%
Една с големина около 400MB MyISAM
И други 10-тина около 100MB пак на MyISAM