2016-09-20 169 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來說,交換是很糟糕的。 –