开发者社区> 技术小美> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Icc编译MySQL性能调研(二)

简介:
+关注继续查看

SQL1(select customerd, customername, companyname, realcompanyname from tb_shifen_customerwhere urldomain like "%.cn" and status=3 and accountm>0 limit 10) union (select customerd, customername, companyname, realcompanyname from tb_shifen_customer where urldomain like "%.cn" and status in (1,4,6) and status=3 and accountm<=0 and invalidate>=date_sub(curdate(),interval ? day) limit 10) union (select customerd, customername, companyname, realcompanyname from tb_shifen_customer where urldomain like "%.cn" and status in (1,4,6) and accountm>0 limit 10) union (select customerd, customername, companyname, realcompanyname from tb_shifen_customer where urldomain like "%.cn" and status=2 limit 10);

 

SQL1

执行时间

Concurrency=1

Concurrency=10

Concurrency=100

Icc编译的mysql

36.01s

31.20s

162.78s

Gcc编译的mysql

41.02s

40.30s

181.83s

Icc较gcc的提升

12.6%

22.0%

10.5%

 

表8

SQL2select count(*) from tb_customer where urldomain like "%.cn";

 

 

SQL2

执行时间

Concurrency=1

Concurrency=10

Concurrency=100

Icc编译的mysql

0.014s

0.014s

0.029s

Gcc编译的mysql

0.026s

0.027s

0.035s

Icc较gcc的提升

41.2%

48.1%

17.1%

 

表9

SQL3select cust.cust_id,cust.cust_stat_1,cust.cust_stat_2,cust.cust_name, cust.cust_branch_name,cust.cust_input_type,cust.add_time,cust.cust_follow_num, cust.cust_trade_1,cust.cust_trade_2,dis.distribute_time from tb_customer cust left join tb_cust_distribute dis on cust.cust_id=dis.cust_id and dis.state=1 where cust.cust_id>0 and cust.cust_stat_1 in(8) and cust.pose_id=157 order by cust.cust_id desc limit 1170 , 15;


SQL2

执行时间

Concurrency=1

Concurrency=10

Concurrency=100

Icc编译的mysql

2.839s

3.631s

9.554s

Gcc编译的mysql

2.828s

3.740s

10.867s

Icc较gcc的提升

-0.3%

2.91%

12.1%

 

表10

上述3个类型的SQL是从测试库上执行的读操作中挑选出来的,相应的表的引擎改成了MyISAM引擎。这3个SQL涉及了扫表,索引扫描,排序等操作。从测试的结果上看,icc编译的mysql对MyISAM引擎读操作的优化效果明显。从执行时间上看(QPS)减少大概在10%-20%之间(QPS增加10%-20%)。

SQL4:update tb_cust_app tc left join (select count(distinct f.cust_id) num, follow_id from tb_follow_assignf, tb_customer c where f.cust_id=c.cust_id and c.cust_stat_1<>5 group by follow_id) tf on tc.user_id = tf.follow_id set tc.ownered_size=ifnull(tf.num,0) ;

 

SQL2

执行时间

Concurrency=1

Concurrency=10

Concurrency=100

Icc编译的mysql

31.279s

42.290s

342.80s

Gcc编译的mysql

33.274s

53.731s

566.374s

Icc较gcc的提升

6.0%

21.23%

39.5%

 

表11

SQL4同上一节的SQL3。在上一节InnoDB引擎下,icc编译的mysql对于此SQL在执行时间上明显慢于gcc编译的mysql,也主要是因为该SQL导致innodb全脚本测试icc编译的mysql慢于gcc编译的mysql。但是对于MyISAM引擎,从测试结果上看,icc编译的mysql明显优于gcc编译的mysql。从测试可以看出icc编译的mysql对MyISAM写操作也有优化效果,从执行时间上看(QPS)减少大概在10%-20%之间(QPS增加10%-20%)。

 

测试结论

从两个维度上总结测试结论:1存储引擎维度;2CPU,IO负载。

从存储引擎维度:对于MyISAM引擎,从sql-bench,mysqlslap使用某数据库数据测试结果上看,icc编译的mysql无论从读操作还是写操作都有优化效果,SQL执行时间平均减少10%-20%。对于一些比较消耗CPU的SQL(比如排序等,执行时间较长的SQL),在一定的并发下优化效果更明显。

对于InnoDB引擎,从sql-bench,mysqlslap使用全脚本测试结果上看,icc编译的mysql较gcc编译的mysql从QPS(SQL执行时间)没有优势,甚至是劣势。同时从sql-bench,全脚本中的逐个SQL分析来看:对于利用primary key或者全表扫描的SQL,icc编译的mysql有一些优化效果;对于利用辅助索引的SQL,icc编译的mysql在执行时间上比gcc编译的mysql慢。分析原因,InnoDB使用聚簇索引存储数据,利用辅助索引时,还需要走一遍primary key,这中间会有比较多的随机读等操作。

从IO,CPU负载维度:通过测试中对于资源的统计和对比,icc编译的mysql在用户态cpu开销上较gcc编译的mysql小(相差不大);在内核态cpu开销要比gcc编译的mysql多;在内存上开销上icc编译的mysql稍小。Icc对于CPU密集,IO负载不重的场景,优化效果明显;对于IO负载较重的场景,icc编译的mysql优化效果可能不明显。

综上所述:icc编译的mysql用于MyISAM引擎,较gcc编译的mysql优化效果明显。对于InnoDB引擎,使用辅助索引等操作,icc编译的mysql比gcc编译的mysql在执行时间上要慢,存在劣势。对于使用全表扫描、primary key的InnoDB操作,在低并发下,icc编译的mysql在执行时间上不会慢,在高并发下icc编译的mysql具有优势。同时业务类型是CPU密集型,而不是IO密集型,有助于发挥icc编译器的优化效果。

 










本文转自百度技术51CTO博客,原文链接:http://blog.51cto.com/baidutech/748545,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【MySQL性能优化】概述与优化方面(一)
【MySQL性能优化】概述与优化方面(一)
42 0
MySQL性能优化
MySQL性能优化 一:影响数据库的性能因素 1、超高的QPS与TPS  风险:效率低下的sql 2、大量的并发和超高的CPU使用率  风险:   大量的并发:数据库连接数被占满(max_connections默认100)   超高的CPU使用率:因CPU资源耗尽而出现宕机 3、磁盘IO  .
1669 0
MySQL 性能优化
网站访问量越来越大,MySQL 自然成为瓶颈,因此最近我一直在研究MySQL的优化,第一步自然想到的是MySQL系统 参数的优化,作为一个访问量很大的网站(日20万人次以上)的数据库 系统,不可能指望MySQL默认的系统参数能够让MySQL运行得非常顺畅。
676 0
阿里云服务器ECS如何安装PHP+MYSQL环境?
阿里云服务器ECS如何安装PHP+MYSQL环境?
6576 0
docker安装mysql
docker安装mysql5.7详解,容器打包迁移等。
1722 0
使用ROS创建ECS,安装MySQL并生成用户
在杭州创建自建数据库网络和服务器环境,部署一台ECS,安装MySQL并创建root用户,三个普通用户并分配权限,创建数据库插入测试数据。ros模板 { "ROSTemplateFormatVersion": "2015-09-01", "Description": "部署自建数据库网络和服.
1105 0
阿里云linux服务器安装mysql并实现远程访问
阿里云linux服务器安装mysql数据库,并实现远程访问。
9299 0
从零开始搭建Java开发环境第二篇:如何在windows10里安装MySQL
1 下载安装包 1.1 压缩包 https://dev.mysql.com/downloads/mysql/ [外链图片转存失败(img-oesO8K09-1566652568838)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")] 1.
772 0
+关注
6819
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载