【发布时间】:2009-06-10 16:28:02
【问题描述】:
我们有一个 XMPP 应用程序,它使用 MySQL 来存储信息。到目前为止,我们没有遇到任何特定的负载问题,但我正在努力为最坏的情况(或最好的,就用户而言;))做好准备。
安装此 MySQL 服务器的主机是具有 2GB RAM 的 Slicehost 切片。
昨天,我激活了慢查询日志记录,以确保我们实际上没有什么慢的。不幸的是,似乎实际上发现了很多慢查询:
从 /var/log/mysql/mysql-slow.log 读取 mysql 慢查询日志 计数:109 Time=25.57s (2787s) Lock=0.00s (0s) Rows=1.0 (109), xxxxx[xxxxx]@[172.21.xxx.xxx] SELECT * FROM `feeds` WHERE (`id` = 'S') LIMIT N这对我来说真的很奇怪,因为 id 实际上是一个主键...... 该表是 InnoDB
我做了解释:
mysql> EXPLAIN SELECT * FROM `feeds` WHERE (`id` = '2650') LIMIT 1; +----+-------------+--------+-------+-------------- -+---------+---------+--------+------+--------+ |编号 |选择类型 |表|类型 |可能的键 |关键 | key_len |参考 |行 |额外 | +----+-------------+--------+-------+-------------- -+---------+---------+--------+------+--------+ | 1 |简单 |饲料 |常量 |初级 |初级 | 4 |常量 | 1 | | +----+-------------+--------+-------+-------------- -+---------+---------+--------+------+--------+ 一组中的 1 行(0.00 秒)发生这种情况一定有另一个原因。在我们的日志中实际上有很多类似的慢查询(使用主键的查询)。
我认为在这里发布 MySQL 设置是有意义的:
mysql> 显示变量; +---------------------------------+---------------- --------------+ |变量名 |价值 | +---------------------------------+---------------- --------------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | | automatic_sp_privileges |开 | |后台日志 | 50 | |基于| /usr/ | | binlog_cache_size | 32768 | | bulk_insert_buffer_size | 8388608 | | character_set_client |拉丁语1 | |字符集连接 |拉丁语1 | |字符集数据库 |拉丁语1 | |字符集文件系统 |二进制 | |字符集结果 |拉丁语1 | | character_set_server |拉丁语1 | |字符集系统 | utf8 | |字符集目录 | /usr/share/mysql/charsets/ | | collation_connection | latin1_swedish_ci | | collation_database | latin1_swedish_ci | |排序服务器 | latin1_swedish_ci | |完成类型 | 0 | |并发插入 | 1 | |连接超时 | 10 | |数据目录 | /var/lib/mysql/ | |日期格式 | %Y-%m-%d | |日期时间格式 | %Y-%m-%d %H:%i:%s | | default_week_format | 0 | | delay_key_write |开 | |延迟插入限制 | 100 | |延迟插入超时 | 300 | |延迟队列大小 | 1000 | | div_precision_increment | 4 | | keep_files_on_create |关闭 | | engine_condition_pushdown |关闭 | | expire_logs_days | 10 | |冲洗 |关闭 | |冲洗时间 | 0 | | ft_boolean_syntax | + ->我们的大多数请求都是“基本的”,但是,我们需要极快的速度!
对于究竟是什么让 MySQL 如此缓慢有什么想法吗?
[SUMMARY]总结各种答案:
- 删除“LIMIT”,更改 WHERE id = “X” 进入 WHERE id = X
- 确保我没有任何 运行的脚本(备份或其他) 有时会消耗很多 资源
- 确保“主机”实际上不是罪魁祸首。
【问题讨论】:
-
表中有多少条记录?我在不是特别大的表上发生过这种情况,并通过添加索引来修复它..
-
确实,这个表现在相当小:20k 行。
-
由于是主键,主键不是自动索引的吗?
-
不确定我是否理解...(嘿,你破坏了布局;))。我会假设主键是索引。
-
抱歉,现在修复了布局,不知道为什么会这样...我试图将代码块(缩进 4 个空格)更改为预块,这样它就不会尝试像代码一样突出显示它。我的问题是提姆,他说他通过添加索引解决了类似的问题,这在这里似乎不适用,因为主键列应该被索引(作为主键)
标签: mysql performance optimization innodb