Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1734251
  • 博文数量: 107
  • 博客积分: 1715
  • 博客等级: 上尉
  • 技术积分: 3168
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-18 18:42
个人简介

阿里巴巴DBA,原去哪儿网DBA。专注于MySQL源码研究、DBA运维、CGroup虚拟化及Linux Kernel源码研究等。 github:https://github.com/HengWang/ Email:king_wangheng@163.com 微博 :@王恒-Henry QQ :506437736

文章分类

全部博文(107)

文章存档

2014年(2)

2013年(38)

2012年(67)

分类: Mysql/postgreSQL

2012-10-13 12:06:40

目的

       基于现有业务需求,复杂查询严重影响了数据库服务器的性能。在MySQL-5.6中,着重对查询优化器进行了改造,提高了查询的性能。为了进一步验证查询性能的提高,对MySQL-5.6的查询性能进行测试。

设计

       为了全面了解MySQL-5.6的查询性能,分别对mysql-5.5.20percona-server-5.5.20mysql-5.6.6percona-server-5.6.6四个版本的数据库在相同配置下,执行相同测试语句,使用sql_no_cache避免innodb_buffer_pool对查询的影响,测试相同次数(10),获取查询时间的总值、最大值、最小值、平均值。此外,输出查询计划,为进一步研究提供思路。

       为了使得测试更贴近实际线上环境,测试库选择实际的业务数据库,测试语句选择了一个开发目前性能较低的SQL

       SQL查询语句如下所示:

 

SELECT count(1)

FROM app app, appver av

WHERE

  av.appid = app.appid AND

  av.stat in (0,1,2) AND

  av.pkgvercode in

    ( SELECT max(pkgvercode) maxpkgvercode FROM appver WHERE appver.appid = av.appid GROUP BY appid) AND

  av.pkgid in ( SELECT DISTINCT pkg.pkgid FROM pkginfo pkg, appvermarket WHERE pkg.apptype = 0 AND (pkg.apptypescore BETWEEN 1 and 100) AND

  (appvermarket.modifytime BETWEEN '1990-01-01' AND '2013-01-01') AND

  pkg.pkgid = appvermarket.pkgid )

ORDER BY av.creationtime DESC

 

测试

       测试查询语句的执行时间、以及执行总时间、执行最大时间、执行最小时间、平均执行时间。具体如下所示:

 

次数

mysql-5.5.20sec

percona-server-5.5.20sec

mysql-5.6.6sec

percona-server-5.6.6sec

1

22.74938375

21.67018175

4.841938

5.144301

2

20.3056995

18.897762

2.503185

2.44326125

3

20.219908

19.35700875

2.54380675

2.411751

4

20.02808875

18.7846835

2.5677525

2.4499795

5

19.058993

18.85679225

2.6188195

2.54481625

6

19.1560985

18.5317

2.53454075

2.4130805

7

19.199497

18.84013225

2.583974

2.417411

8

19.4677955

19.75344125

2.67006825

2.4147165

9

19.50529475

19.01621475

2.55766075

2.268934

10

19.30806825

19.030371

2.588415

2.38645325

Total

198.99882700

192.73828750

28.01016050

26.89470425

Max

22.74938375

21.67018175

4.84193800

5.14430100

Min

19.05899300

18.53170000

2.50318500

2.26893400

Avg

19.89988270

19.27382875

2.80101605

2.68947042

 

       MySQL查询执行时间的比较如下图所示,从图中可以明显发现,查询性能有较大的提高。

 

 

 

通过以上各个版本执行相同SQL查询10次,得到的结果可知:mysql-5.6Percona-server-5.6在查询性能上,有较大的提高。以平均值来看,5.6版本的查询性能是5.5版本的查询性能的近7倍。此外,Percona-mysql的性能较mysql官方的性能有所提高,但不明显。具体如下所示。

 

Version

mysql-5.5.20sec

percona-server-5.5.20sec

mysql-5.6.6sec

percona-server-5.6.6sec

AVG

19.8998827

19.27383

2.801016

2.68947042

mysql-5.5.20sec

19.89988

1

0.96854

0.140755

0.135150064

percona-server-5.5.20sec

19.27383

0.051883827

1

0.145327

0.139540018

mysql-5.6.6sec

2.801016

0.018523217

6.881013

1

0.960176726

percona-server-5.6.6sec

2.68947

0.00688731

7.166403

1.041475

1

 

       除了以上实际的输出结果有较大差异,相同的查询语句,MySQL-5.5MySQL-5.6的执行计划也有较大差异。

       MySQL-5.5的查询计划如下所示:

 

id

select_type

table

type

possible_keys

key

key_len

ref

rows

Extra

1

PRIMARY

av

ALL

appver_appid_i

NULL

NULL

NULL

65012

Using where

1

PRIMARY

app

eq_ref

PRIMARY

PRIMARY

4

test.av.appid

1

Using index

3

DEPENDENT SUBQUERY

pkg

ref

U_PKGID,idx_apptype,idx_apptypescore

U_PKGID

4

func

2

Using where; Using temporary

3

DEPENDENT SUBQUERY

appvermarket

ALL

NULL

NULL

NULL

NULL

70243

Using where; Using join buffer

2

DEPENDENT SUBQUERY

appver

ref

appver_appid_i

appver_appid_i

4

test.av.appid

1

Using where

 

MySQL-5.6的查询计划如下所示:

 

id

select_type

table

type

possible_keys

key

key_len

ref

rows

Extra

1

PRIMARY

av

ALL

PRIMARY,appver_appid_i

NULL

NULL

NULL

64579

Using where

1

PRIMARY

appvermarket

ALL

NULL

NULL

NULL

NULL

73634

Using where; Start materialize

1

PRIMARY

pkg

ref

U_PKGID,idx_apptype,idx_apptypescore

U_PKGID

4

test.appvermarket.pkgid

3

Using where; End materialize

1

PRIMARY

app

eq_ref

PRIMARY

PRIMARY

4

test.av.appid

1

Using index

2

DEPENDENT SUBQUERY

appver

ref

appver_appid_i

appver_appid_i

4

test.av.appid

1

Using where

 

       从查询计划可以看出,在Extra中,增加了Start materializeEnd materialize信息。具体查询优化器的处理,还需要通过分析源码进行深入的探索。

 

总结

       通过测试发现,5.6版本较5.5版本从SQL执行时间来看,在查询性能方面,有较大的提高。由于测试的SQL较少,没有对多种SQL查询进行测试,仍然存在一定的不完善之处。因此,后续测试的SQL查询还会进一步进行。此外,从查询计划来看,查询优化器也增加了提高性能的方式,有待进一步通过研究源码进行深入的分析和探索。

 

 

 

 

 

阅读(8198) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~