我有一个MySQL集群:(主人,两个奴隶)。 最近(7天),我遇到了一个奇怪的问题:同一个SQL在不同的数据库主机上有不同的成本。 此问题仅发生在几个表;
我想知道为什么以及如何解决这个问题。 主费用2.47秒
mysql> explain select id from notification_message where expire_time < '2015-07-23' limit 1\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: notification_message
type: range
possible_keys: idx_expire_time
key: idx_expire_time
key_len: 6
ref: NULL
rows: 5414595
Extra: Using where; Using index
1 row in set (0.00 sec)
mysql> select id from notification_message where expire_time < '2015-07-23' limit 1\G
*************************** 1. row ***************************
id: 186925000
1 row in set (2.47 sec)
从属费用0.00秒
mysql> explain select id from notification_message where expire_time < '2015-07-23' limit 1\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: notification_message
type: range
possible_keys: idx_expire_time
key: idx_expire_time
key_len: 6
ref: NULL
rows: 4999367
Extra: Using where; Using index
1 row in set (0.00 sec)
mysql> select id from notification_message where expire_time < '2015-07-23' limit 1;
+-----------+
| id |
+-----------+
| 186925000 |
+-----------+
1 row in set (0.00 sec)
这是mysql版本
主服务器版本: “服务器版本:5.6.15-56-log Percona Server(GPL),版本rel63.0,修订版519”
奴隶服务器版本: “服务器版本:5.6.22-71.0-log Percona Server(GPL),版本71.0,修订版726”
这是硬件
掌握与奴隶相同: os core:Linux 2.6.32-431.20.3.el6.mt20150216.x86_64 操作系统:CentOS CPU:Intel(R)Xeon(R)CPU E5-2630 v2 @ 2.60GHz CPU数量:24 ram:130GB RAID:(raid1,SAS [1TB * 2] 1TB)(raid5,SSD [480.0GB * 6] 2.4TB)
答案 0 :(得分:0)
(评论框备注太久了):
仍然缺少一些信息:
主和从mysql配置,然后主要是内存和磁盘数据位置(如果一个DB存在于SSD而另一个存在于SAS 1TB磁盘上,则该怎么办)
主人和主人的无负载信息; slave:使用percona插件安装像cacti这样的工具。
要更好地测试查询时间:注意在“新鲜”实例中运行:在从属上键入flush query cache
并重新测试查询。这将创建一个必须从磁盘加载所有数据的情况。
通常在主服务器上以这种方式进行测试是否定的,因为它会使系统运行一段时间(从磁盘重新加载所有数据以加热缓存需要时间(根据负载而长达数小时))。< / p>