服务器阿里云ECS,centos, mariadb,数据表 info 现有13万条数据,然后执行了下面这一段:
sql
#status是表info的一个索引字段 SELECT COUNT(*) FROM `info` WHERE `status`='1' #status=1为10万数据
执行花费 6987.0 ms 有时候会更长(尤其是第一次的时候)。如何优化?
阿里云ECS 1G读写性能
[root@aliyun basic]# dd if=/dev/zero of=test bs=64k count=4k oflag=dsync
4096+0 records in
4096+0 records out
268435456 bytes (268 MB) copied, 23.0049 s, 11.7 MB/s
**对比linode 1024 1G***
[root@linode ~]# dd if=/dev/zero of=test bs=64k count=4k oflag=dsync
4096+0 records in
4096+0 records out
268435456 bytes (268 MB) copied, 3.86091 s, 69.5 MB/s
后续 2015-6-30
我将内存增加到了2G之后,查询明显变快了!不超过1s!
关于一些回复说status加索引,肯定加了,不然怎么跑得动,直接504的好不
吐槽一下很多回复的本身就是错误的,我这两天找了很久,阿里云的磁盘IO性能确实是很低的。
阿里云后台管理,磁盘IO的平均是 0.015MB/s。使用fdisk -l
阿里云ECS是 512 byte
,Linode 是 4094 byte
。其实最根本问题还是IO问题,如果真的说将status另外独立表,这也是无济于事的,维护成本将增加。阿里云是普通磁盘,Linode 是SSD,确实是不具备可比性。
说到读写性能,楼主可以购买
阿里云ssd硬盘
或者直接使用RSD
,当然,就算阿里云磁盘I/O为10M/S,也不能要6秒吧?何况你说的是写入性能,读取性能肯定不止10M/s阿里云的ECS确实IO性能很差,你直接用来假设数据库很容易出现这样的问题。
提供几条思路:
这个确实跟阿里云的硬盘IO有关,多年前我也曾用过阿里云的机器做服务器,运行一段时间后发现系统有异常,后来通过dd多次出来的结果只有大概 4 MB/s,这样的IO肯定不适合做数据库。不知道现在阿里云有没有ssd,如果有的话,建议选择ssd,否则只有花大力气优化了。
首先在做其他的优化之前,先应该优化下sql语句,在大数据量的查询语句中,一定要尽量的减少*号的使用,而使用明确的列名来告诉数据库你要查什么,否则数据库底层的查询会话更多的时间来理解你的*所代表的意思,这样当然会有一定的影响。
这个时间太长了吧。等的人花儿都谢了。换服务器吧。阿里现在估计还不成熟。用百度试试。实在不行。选国外的吧。AWS。微软的AZURE都不错。我一直用AWS。木有楼主的问题。
阿里云使用机械硬盘,Linode使用固态硬盘,这样比合适吗?要不要考虑价格成本的因素。固态硬盘当然能提升数据库的性能,淘宝去IOE也引入了PCIe固态存储。
使用机械硬盘的时候,要尽量避免系统发生swap交换内存数据到磁盘。还有MySQL可以考虑关闭二进制日志,加大innodb_buffer_pool_size大小来提升性能,而且注意给WHERE子句中的条件字段status建立索引。
试试 count(1) status添加索引
同等阿里云>100W <500ms,IO并不是全部问题,才十几万数据233333333.
为什么要去解决不是你范围内的问题呢?只有阿里云是这样那就换呗。没必要在这些不成熟的云上浪费时间。他们总会变好的。但是如果你在它们身上浪费时间,是找不回的。