2016-09-20 167 views
1

我有一个非常大的网站,用PHP & MYSQL构建老式。Mysql的“内存使用量”增加和增加

我在我的网站上有不止1000个不同的查询,在不同的PHP页面上,而且很难将它们全部更新到MYSQLI。

我买了4GB RAM的VPS服务器,在过去的几个月里,我的网页加载速度非常慢。

当我重新启动服务器时,一切都运行平稳,但几小时/天后,网页加载时间超过3秒以上,页面加载速度变慢。我注意到mysqld服务正在增加和增加内存使用量,从服务器重新启动时的80MB开始,它达到了大约400MB以上的使用量。

我把我的index.php结尾mysql_close(),但它似乎像连接数量仍在增加。

问题 什么会导致mysql内存使用量的无限增量? 将我的所有查询更新到MYSQLI可能会提高性能?

一些信息:

innodb_version 
5.5.31 
protocol_version 
10 
slave_type_conversions 
version 
5.5.31-log 
version_comment 
MySQL Community Server (GPL) 
version_compile_machine 
x86_64 
version_compile_os 
Linux 

存储引擎:混合(萨姆表是INNODB,一些表是MyISAM的 my.cnf中:运行

[mysqld] 
datadir=/var/lib/mysql 
socket=/var/lib/mysql/mysql.sock 
user=mysql 
max-connections=100000 
# Disabling symbolic-links is recommended to prevent assorted security risks 
symbolic-links=0 
thread_cache_size=5 
table_open_cache=99390 
sort_buffer_size=512M 
read_rnd_buffer_size=512M 
query_cache_size=512M 
query_cache_limit = 16M 
query_cache_type = 1 
slow_query_log=1 
slow_query_log_file=slow_query_log.log # 
long_query_time=5 
log-queries-not-using-indexes=1 


[mysqld_safe] 
log-error=/var/log/mysqld.log 
pid-file=/var/run/mysqld/mysqld.pid 

我有大约6-7〜查询当我用show processlist

+0

第一个第一个,当你的网站变慢时,在mysql控制台中运行'show processlist'查询从根目录看看发生了什么 –

+0

我有一堆问题:什么版本的MySQL?你使用什么存储引擎? my.cnf中的缓冲区设置是什么?你在代码中做了多少种?对不起 - 这个问题不能根据你的陈述来回答。而MySQLI不会有太大的性能差异。 –

+0

用@TGray的所有这些信息更新了我的问题。我不知道我在做什么,但我猜不多。我的主要问题是从使用SELECT和ORDER BY的近300k行的表,尽管查询是针对特定的user_id。 – TheUnreal

回答

0

max-connections=100000 - Yikes!降到1000

table_open_cache=99390 - 下降,比方说,2000

sort_buffer_size=512M - 的RAM,比如下降到1%,40M

read_rnd_buffer_size=512M - 同上

query_cache_size=512M - 过大;减慢速度;降至40M

long_query_time=5 - 不够低,降至2

log-queries-not-using-indexes=1 - 杂乱的slowlog没有提供多少信息;改为0

你没有说你正在使用哪个引擎。有关MyISAM和InnoDB的建议,请阅读this

1000页 - 这不是太多。

哪个Web服务器?如果是Apache,请不要将MaxClients设置为20以上。

+0

我在帖子中提到我的表是MyIsam和InnoDB的混合体。我一直在阅读这个工作人员,但很难做出这样的决定。去试试你的配置,谢谢。并且它是apache – TheUnreal

+0

Mysqld继续变得越来越大,就像所有打开的连接都没有关闭,我不知道为什么它会发生。 – TheUnreal

+0

mysqld的内存使用量将增长,直到它达到某个限制,然后它会稍微波动。我的建议旨在保持这个极限不会过大。对MySQL来说,交换是很糟糕的。 –