MySQL变慢了

时间:2015-12-01 17:49:34

标签: php mysql performance database-performance

php申请MySQL有时会变慢。当我重新启动mysql服务时,它工作正常。

以下是我在my.cnf文件中执行的一些关键配置:

skip-external-locking
skip-name-resolve

我也启用并检查了slow query logs。那里没有任何东西,因为它是断断续续的问题。

所有用户都与服务器IP地址相关联。

MySQL Tunner建议:

--------绩效指标------------------------------------- -----

[ - ] Up:19h 23m 22s(5K q [0.072 qps],1K conn,TX:2M,RX:606K)

[ - ]读/写:99%/ 1%

[ - ]禁用二进制日志记录

[ - ]总缓冲区:1.1G全局+每线程2.7M(最多5000个线程)

[确定]最大内存使用量:1.1G(已安装RAM的32.15%)

[!!]最大内存使用量:14.2G(已安装RAM的422.17%)

[确定]慢查询:0%(0 / 5K)

[确定]可用连接的最高使用率:0%(4/5000)

[!!]中止连接:4.72%(89/1886)

[!!]禁用查询缓存

[确定]需要临时表的排序:0%(0个临时排序/ 92个排序)

[!!]在磁盘上创建的临时表:70%(磁盘上608 /总计868)

[确定]线程缓存命中率:99%(4个创建/ 1K连接)

[确定]表缓存命中率:95%(166开/ 173开)

[确定]使用的打开文件限制:0%(76 / 25K)

[确定]立即获得表锁:100%(2K立即/ 2K锁)

如果您需要更多信息以解决此问题,请与我们联系。

4 个答案:

答案 0 :(得分:0)

先检查Mysql Log

也许你有75%的系统等待,很可能是由于大量交换。

  1. 使用mysqltuner.pl查找影响内存的变量 使用
  2. 按" m"当在顶部看到什么吃了记忆
  3. 使用free -m查看缓存的数量
  4. 使用iotop查看谁正在吃IO
  5. 当您不知道发生了什么时,

    EXPLAIN扩展命令会显示有关您的查询的详细信息http://dev.mysql.com/doc/refman/5.0/en/explain-extended.html

    使用查询缓存http://dev.mysql.com/doc/refman/5.1/en/query-cache-configuration.html

    确保根据您的硬件http://dev.mysql.com/doc/refman/5.5/en/option-files.html

    优化MySQL服务器配置文件选项

    确保在创建表结构时使用优化数据类型例如"注释" fields的大小为256个字符,使用类型为VARCHAR(256)的字段将其回复给MYSQL,而不是使用TEXT。查询会更快。

答案 1 :(得分:0)

此:

[--] Total buffers: 1.1G global + 2.7M per thread (5000 max threads)

与此相关:

[!!] Maximum possible memory usage: 14.2G (422.17% of installed RAM)

这是不好的,因为一旦你开始使用比系统中可用的RAM更多的内存,你就会开始交换到磁盘,性能将会突然显现

永远没有充分的理由:

[!!] Query cache is disabled

检查内存使用情况可能有助于解决此问题:

[!!] Temporary tables created on disk: 70% (608 on disk / 868 total)

答案 2 :(得分:0)

使用INNODB时,整体DBMS性能取决于很多配置(在my.ini中),调整它们是一项实验性工作,它依赖于从物理功能到表索引到连接甚至排序查询的各种因素。登记/> 一般来说,我猜最重要的INNODB配置属性是innodb_buffer_pool_size

  与MyISAM不同,InnoDB使用缓冲池来缓存索引和行数据。设置得越大,访问表中数据所需的磁盘I / O就越少。在专用数据库服务器上,您可以将此参数设置为机器物理内存大小的80%。但是,请不要将其设置得太大,因为物理内存的竞争可能会导致操作系统中的分页。

如果您的数据库最近成长并且innodb_buffer_pool_size很小,那么这将是第一个怀疑点。当然,更改此属性(通常使用其他一些参数,例如innodb_log_file_size)会很麻烦,因为您必须转储并恢复所有数据。
如果它不起作用,那么你应该考虑其他可能性,这不是一件简单的事情。

答案 3 :(得分:0)

max_connections = 100 - 不是5000
long_query_time = 1 - 使慢速日志更有用
保持慢速日志 关闭查询缓存 (磁盘上608 /总计868) - >看看慢日志
使用pt-query-digest查找最差的'查询。

相关问题