版权声明:本文由黄辉原创文章,转载请注明出处:
文章原文连接:https://www.qcloud.com/community/article/195mysql
来源:腾云阁 https://www.qcloud.com/communitysql
现在,多样的交易模式以及大众消费观念的改变使得数据库应用领域不断扩大,现代的大型分布式应用系统的数据膨胀也对数据库的海量数据处理能力和并行处理能力提出了更高的要求,如何在数据呈现海量扩张的同时提升处理速度和应用系统的可用性,使客户能同时获得更高的处理速度、更高的数据可用性和更大的数据集,是数据库系统面临的一个挑战。
经过TPC-H基准测试,可得到数据库单位时间内的性能处理能力,为评估数据库系统的现有性能服务水平提供有效依据,经过横向对比促进数据库系统的总体质量提高,能更好地在重大信息化工程中实现推广。数据库
TPC-H是由TPC(Transaction Processing Performance Council)事务处理性能委员会公布的一套针对数据库决策支持能力的测试基准,经过模拟数据库中与业务相关的复杂查询和并行的数据修改操做考察数据库的综合处理能力,获取数据库操做的响应时间和每小时执行的查询数指标(QphH@Size)。
TPC-H基准模型中定义了一个数据库模型,容量能够在1GB~10000GB的8个级别中进行选择。数据库模型包括CUSTOMER、LINEITEM、NATION、ORDERS、PART、PARTSUPP、REGION和SUPPLIER 8张数据表,涉及22条复杂的select查询流语句和2条带有insert和delete程序段的更新流语句。服务器
1.比较在同等资源条件下具备分布式属性的GreenPlum与单机版mysql在进行TPC-H类测试的性能区别。
2.分析两种DB形成性能区别的缘由。分布式
测试环境:腾讯云
测试对象:GreenPlum、Mysql,二者的配置信息统计以下:性能
指标 | 参数 |
---|---|
文本1 | 文本2 |
操做系统 | CentOS 6.7 64位 |
cpu | Intel(R) Xeon(R) CPU E5-26xx v3 8核 |
内存 | 24GB |
公网带宽 | 100Mbps |
IP | 123.207.228.51 |
版本 | MySql5.6 |
表2 Mysql服务器测试
表名称 | 数据条数 |
---|---|
customer | 150000 |
lineitem | 6001215 |
nation | 25 |
orders | 1500000 |
part | 200000 |
partsupp | 800000 |
region | 5 |
supplier | 10000 |
表3 各测试表数据量统计优化
执行的sql | GeenPlum执行时间(单位:秒) | Mysql执行时间(单位:秒) |
---|---|---|
Q1 | 4.01 | 12.66 |
Q2 | 0.50 | 3.27 |
Q3 | 1.35 | 5.06 |
Q4 | 0.11 | 0.01 |
Q5 | 0.19 | 27.29 |
Q6 | 0.01 | 2.50 |
Q7 | 6.06 | 10.79 |
Q8 | 1.46 | 39.78 |
Q9 | 4.00 | >12小时 |
Q10 | 0.14 | 4.74 |
Q11 | 0.30 | 7.90 |
Q12 | 0.08 | 2.35 |
Q13 | 1.04 | >12小时 |
Q14 | 0.04 | 9.37 |
Q15 | 0.07 | 4.76 |
Q16 | 0.51 | 2.90 |
Q17 | 3.21 | 48697.95 |
Q18 | 14.23 | >12小时 |
Q19 | 0.95 | 23.12 |
Q20 | 0.16 | >12小时 |
Q21 | 7.23 | >12小时 |
Q22 | 0.96 | 8540.22 |
表4 22条sql执行时间统计spa
根据执行时间的统计,咱们能够看出两种数据库在进行TPC-H类测试有着较大差别,下面咱们将选取两个典型的事例SQL,分析GreenPlum与Mysql在执行该类SQL的性能差别缘由。操作系统
咱们选取Q3,从执行时间统计能够看出GreenPlum的执行速度大概是Mysql的4倍左右。首先,查看下Q3语句,以下图1所示。
图1 Q3语句
而后,explain下Q3,获得结果分别如图2和图3。
图2 GreenPlum执行explain Q3的结果
图3 Mysql执行explain Q3的结果
从以上的执行过程解释能够看出,GreenPlum上的执行步骤主要有:
整个过程耗时的点主要有:
Mysql的执行过程比较简单,首先是在lineitem表作一次where过滤,获取结果计算出revenue值,因为order by的值是revenue,所以,须要一次非关键字(revenue)排序,排序的量为3271974(约320万),这里很是耗时。而后在order表和customer表作一些where过滤。
从以上执行过程能够看出,主要的耗时点应该在sort操做上,GreenPlum是在全部segment上同时进行一次8万条记录的sort,而Mysql则是直接进行一次320万记录的sort。因为Mysql是在单个服务器上搭建的,该服务器的性能(8核CPU、24GB内存)远高于GreenPlum的单个segment(1核CPU、4GB内存),所以,若是充分利用服务器的性能,二者的sort时间应该相差不大,但是事实如此吗?接下来咱们查看下Mysql所在服务器的CPU使用状况,获得执行Q3先后的结果如图4所示:
图4 Mysql执行Q3先后其所在服务器的CPU使用时间状况
能够看出,执行Q3先后,只有CPU6的使用时间有较大变化,变化时间大概为500jiffies即5秒,与总的sql执行时间(5.06秒)基本吻合,所以,执行Q3 过程当中,mysql所在的服务器只使用了一个CPU来进行计算。
综上,Mysql和GreenPlum的耗时区别主要体如今sort操做上,Mysql对320万条记录作了一次sort,但只能使用单个CPU计算,没有发挥服务器自己多核CPU的性能优点,总体执行时间较长。而GreenPlum因为采用了分布式的结构,每一个segment对应一个CPU,数据均匀分布到各个segment,在各节点并行执行Filter、hash join、group by,sort等操做,充分利用了每一个CPU的计算能力,而后将结果进行广播,或对总体数据进行重分布再进行计算,最后由master归并各segment的结果数据。在进行广播或者重分布时,会在segment节点间进行数据传输,消耗了必定的时间,但因为GreenPlum对sql的优化更好,以及并行计算的能力,所以,相比于Mysql,总的执行时间更短。
咱们再选取一个典型的事例——Q17,根据执行时间统计,Mysql的执行时间是GreenPlum的1.5万倍,这是一个至关大的差距!到底是什么缘由会致使如此大的区别,咱们首先查看Q17的sql语句以下图5所示。
图5 Q17语句
与Q3不一样的是Q17涉及到了子查询,依旧,咱们在mysql和GreenPlum上explain下sql,获得的结果如图六、图7所示。
图6 GreenPlum执行explain Q17的结果
图7 Mysql执行explain Q17的结果
子查询sql(select l_partkey as agg_partkey, 0.2 * avg(l_quantity) as avg_quantity from lineitem group by l_partkey
)里面涉及group by,咱们来看一下二者在聚合上的区别:
Mysql:因为group by的是非索引关键字,因此直接进行了filesort lineitem(600万条记录)。
GreenPlum:首先在每一个segment(有该表150万条记录)作一次group by l_partkey,采用了更高效的HashAggregate聚合方式。为了全部segment能够并行作join,会将lineitem表的数据作一次重分布(5万条记录),每一个segment获得的是hash分布到自身的记录。
能够看出,Mysql在聚合上的效率要明显低于GreenPlum。
而后,子查询结果会与现表作join操做,咱们来继续看下二者在join上的区别:
Mysql:把子查询结果做为临时表(20万条记录)与现表lineitem(600万条记录)直接作了join,将产生600万×20万=1.2万亿的数据量.......
GreenPlum:首先对sql进行了优化,先执行了where条件,减小了part表的数据到260条(单个segment的量,总量为4×260条,接下来的数据量都为单个segment的)。
采用了更高效的join方式hash join。
若是使用临时表与lineitem表直接hash join,会产生50万左右的数据量,但GreenPlum并无这么作,而是利用part表来进行join,由于part表通过where过滤后数据量很是小,和part表作hash join,数据量也相对较小。总共作了两次hash join:
二者一对比,GreenPlum作join的数据量为(246+2598)×4=11376条,远小于Mysql的1.2万亿条,二者的性能不言而喻。
综上,在执行Q17时,Mysql和GreenPlum的效率差异除了GreenPlum具备并行计算能力外,还体如今聚合和关联这两个操做的优化上面。
根据以上的统计结果和性能对比分析,能够看出,GreenPlum在TPC-H类的测试性能会远远高于单机版的Mysql,说明具备分布式属性的GreenPlum在关于复杂语句(涉及到多表属性查询、group by、order by 、join、子查询等)的查询效率较高,且能够充分利用系统CPU资源来提高查询速度,更适用于OLAP。