【发布时间】:2017-01-28 13:06:01
【问题描述】:
我有一个非常大的网站,使用 PHP 和 MYSQL 构建老式的。
我的网站上有超过 1,000 个不同的查询,位于不同的 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。 我的.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
当我使用 show processlist 时,我有大约 6-7 个查询在运行
【问题讨论】:
-
第一个,当您的网站运行缓慢时,在 mysql 控制台中从根目录运行
show processlist查询以查看发生了什么 -
我有一堆问题:什么版本的 MySQL?你用的是什么存储引擎? my.cnf 中的缓冲区设置是什么?你在你的代码中做了多少种?抱歉 - 根据您的陈述无法回答这个问题。而 MySQL 我不会产生太大的性能差异。
-
用所有这些信息更新了我的问题,@TGray。我不知道我做了多少排序,但我猜不多。我的主要问题是使用 SELECT 和 ORDER BY 时有近 300k 行的表,尽管查询是针对特定的 user_id。
标签: mysql performance