很慢的mysql

我有一个很大的问题,我的服务器的MySQL。 一切正常,但从一周以来,这是非常缓慢的。 每个查询都很慢(更多20次)。 我没有改变我的configuration。

有人可以帮助我知道为什么我的服务器现在很慢?

谢谢。

这是我的my.cnf:

[mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] # # * Basic Settings # user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp language = /usr/share/mysql/english #join_buffer_size = 128.0K skip-external-locking # # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 127.0.0.1 # * Fine Tuning # key_buffer = 16M max_allowed_packet = 16M max_heap_table_size = 64M tmp_table_size = 64M thread_stack = 128K thread_cache_size = 8 #max_connections = 100 table_cache = 400 join_buffer_size = 2000K #thread_concurrency = 10 # # * Query Cache Configuration # query_cache_limit = 1M query_cache_size = 16M # # * Logging and Replication # # Both location gets rotated by the cronjob. # Be aware that this log type is a performance killer. #log = /var/log/mysql/mysql.log # # Error logging goes to syslog. This is a Debian improvement :) # # Here you can see queries with especially long duration log_slow_queries = /var/log/mysql/mysql-slow.log long_query_time = 2 #log-queries-not-using-indexes # # The following can be used as easy to replay backup logs or for replication. #server-id = 1 log_bin = /var/log/mysql/mysql-bin.log # WARNING: Using expire_logs_days without bin_log crashes the server! See README.Debian! expire_logs_days = 10 max_binlog_size = 100M #binlog_do_db = include_database_name #binlog_ignore_db = include_database_name # # * BerkeleyDB # # Using BerkeleyDB is now discouraged as its support will cease in 5.1.12. skip-bdb # # * InnoDB # # InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. # Read the manual for more InnoDB related options. There are many! # You might want to disable InnoDB to shrink the mysqld process by circa 100MB. #skip-innodb innodb_buffer_pool_size = 42M # # * Security Features # # Read the manual, too, if you want chroot! # chroot = /var/lib/mysql/ # # For generating SSL certificates I recommend the OpenSSL GUI "tinyca". # # ssl-ca=/etc/mysql/cacert.pem # ssl-cert=/etc/mysql/server-cert.pem # ssl-key=/etc/mysql/server-key.pem [mysqldump] quick quote-names max_allowed_packet = 16M [mysql] #no-auto-rehash # faster start of mysql but no tab completition [isamchk] key_buffer = 16M 

您应该避免在configuration中使用thread_stack选项 。 虽然此选项不会影响性能,但可能会导致问题。

这篇文章可能是有用的。

不了解你的工作量是什么,没有。

我build议您在非生产服务器上重现问题,然后可以安全地尝试解决问题。

您的服务器调整了一个微小的内存。 如果您的数据库比玩具大,这可能会导致性能不佳。

我假设你的服务器被DEDICATED作为一个数据库; 你想分配很多内存到innodb_buffer_pool或key_buffer,取决于你的应用程序是否使用innodb或myisam。

你应该知道开发人员正在使用什么,并让他们给你调整技巧。

您的数据库性能可能已经下降,因为您的数据越来越大; 大多数数据库都会发生这种情况,所以您需要联系您的开发团队,让他们停止这种情况发生,或者做容量规划,以便将来可以处理增长。

mysqltuner.pl很适合检查你的MySQL设置是否适合你的实际使用。 如果它是一个大型数据库,并且无法调整到足够快(最佳数据库types,设置,硬件等),那么可能是考虑设置镜像的时候了。

尝试打开“log_slow_queries”,这会很快填满日志文件并吃掉资源的日志。

另外,请尝试找出哪些查询可能会很慢,因为它们不使用参数“log-queries-not-using-indexes”(请参阅mysql手册 )中的索引。

您可以使用“EXPLAIN SELECT FROM … ”查找哪些不使用索引或哪些索引可以改进。 注意:不要使用太多的索引,因为在INSERT和UPDATE(当然还有DELETE)时,它们也必须更新。

CU,arnep

我logging缓慢的查询,但查询“提交;” 需要20个时间。 数据库大小是30Mo,这不是一个大的数据库。

我的网站是一个小网站。

这是VPS吗? 尝试启用,在innodb延迟提交,

innodb_flush_log_at_trx_commit = 2

这是不安全的,但你可以尝试在大io负载的原因。

在这里粘贴vmstat 1的输出

这可能是服务器负载,或内存不足,或可能是一个调整不好的my.cnf文件。 My.cnf需要设置为符合您的特定环境 – 服务器容量,查询configuration文件等。

您可以运行sevaral脚本来帮助调整您的MySQL设置以适合您的特定环境和负载。 一个这样的脚本是tuning-primer.sh 。

要让这些脚本提供准确的结果,您的服务器在运行之前需要运行数天。 即使没有,一些build议可能会有所帮助。

我用你的文章MS,我已经在my.cnf中添加了这些值:

  innodb_buffer_pool_size = 384M #innodb_log_file_size = 64M innodb_flush_log_at_trx_commit = 2 

384M是我的内存(1Go)的40%我评论这个值“innodb_log_file_size”,因为我的服务器崩溃与此值。 我不明白为什么。