精华内容
下载资源
问答
  • 1、引言如今,多样的交易模式以及大众消费观念的改变使得数据库应用领域不断扩大,现代的大型分布式应用系统的数据膨胀也对数据库的...通过TPC-H基准测试,可获得数据库单位时间内的性能处理能力,为评估数据库系...

    1、引言

    如今,多样的交易模式以及大众消费观念的改变使得数据库应用领域不断扩大,现代的大型分布式应用系统的数据膨胀也对数据库的海量数据处理能力和并行处理能力提出了更高的要求,如何在数据呈现海量扩张的同时提高处理速度和应用系统的可用性,使客户能同时得到更高的处理速度、更高的数据可用性和更大的数据集,是数据库系统面临的一个挑战。通过TPC-H基准测试,可获得数据库单位时间内的性能处理能力,为评估数据库系统的现有性能服务水平提供有效依据,通过横向对比促进数据库系统的整体质量提升,能更好地在国家重大行业和重大信息化工程中实现推广。

    2、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程序段的更新流语句。测试分为Power测试和Throughout测试两种类型,Power测试是随机执行22条查询流中的一条测试流和2条更新流中的一条测试流,考核指标为QppH@Size;Throughout测试执行的是多条查询流和一条更新流对数据库的混合操作,考核指标是QthH@Size,Power测试和Throughout测试通过数理方式合成的结果为TPC-H基准测试中最关键的一项指标:每小时数据库查询数(QphH@Size),是QppH@Size和QthH@Size结果的乘积的1/2次方。

    3、某数据库测试执行和优化过程

    3.1测试执行过程

    数据加载完成后需要进行数据完整性检查,30GB容量的数据情况应如下:

    Region

    5

    Nation

    25

    Supplier

    300000

    Customer

    4500000

    Part

    6000000

    Partsupp

    24000000

    Orders

    45000000

    Lineitem

    179998372

    通过《TPC-H测试规范》排序集中规定的方式单线程执行功率测试中的22条SQL查询语句,2条更新流语句通过人工执行并统计时间;吞吐率测试为10个线程同时执行。

    测试监控:使用spotlight和vmstat、iostat、sar命令同步监控。

    3.2测试优化过程

    为获得最优的数据库性能处理能力,在测试中根据数据库的性能展现进行了适当优化,优化内容主要如下:

    Ø

    关闭CPU超线程功能,但优化效果不明显;

    Ø

    关闭虚拟化设置和服务器省电模式,但优化效果不明显;

    Ø

    修改配置文件中的参数设置:

    MEMORY_POOL

    40MB--->2000MB //系统内存池大小

    BUFFER

    80MB--->50000MB

    //系统缓冲区大小

    MAX_BUFFER

    700MB--->50000MB //系统最大缓冲区大小

    SORT_BUF_SIZE

    2MB--->40MB //排序缓存区大小

    WORKER_THREADS 4

    core --->48 core

    //工作线程的数目

    MAX_PARALLEL_DEGREE 1--->4

    //水平分区表并行执行的最大任务数。

    PARALLEL_THRD_NUM 10--->48

    //用来设置并行工作线程个数,仅当PARALLEL_POLICY值为2时才启用此参数

    ……

    3.3测试结果

    (1)配置统计信息:

    配置项

    数据库类型

    XXDem

    数据规模

    30

    测试流数量

    10

    使用更新数据

    False

    (2)测试结果统计信息:

    测试结果

    Power Score

    5591.46515258

    Throughput Score

    38260.8695652

    QphH

    14626.4937316

    (3)响应时间统计信息:

    Stream 0

    Stream 1

    Stream 2

    Stream 3

    Stream 4

    Stream 5

    Stream 6

    Stream 7

    Stream 8

    Stream 9

    Stream 10

    Q1

    11.36

    15.67

    16.95

    14.69

    14.55

    13.22

    14.0

    15.42

    13.13

    14.17

    15.06

    Q2

    4.11

    6.44

    7.09

    6.86

    7.2

    6.75

    6.81

    6.17

    6.92

    7.08

    7.16

    Q3

    14.8

    24.78

    21.77

    19.69

    21.39

    20.8

    21.42

    19.94

    20.36

    22.61

    22.27

    Q4

    14.47

    17.94

    19.86

    18.92

    20.41

    21.19

    37.02

    19.61

    19.33

    20.56

    19.25

    Q5

    15.92

    23.97

    20.14

    25.61

    25.14

    20.69

    21.44

    21.97

    25.45

    22.27

    17.33

    Q6

    9.02

    13.47

    13.8

    14.58

    12.47

    13.28

    14.45

    12.27

    13.14

    12.94

    13.58

    Q7

    15.74

    24.48

    22.8

    24.97

    30.13

    24.69

    24.92

    23.78

    33.33

    24.48

    25.36

    Q8

    21.67

    35.56

    45.75

    38.03

    34.23

    35.39

    37.88

    36.56

    36.11

    36.92

    34.56

    Q9

    40.2

    60.25

    70.58

    63.16

    75.92

    63.27

    70.83

    56.36

    64.73

    59.17

    56.25

    Q10

    21.58

    29.98

    31.61

    30.03

    28.61

    28.27

    29.92

    29.73

    30.41

    29.41

    30.86

    Q11

    13.2

    17.09

    15.58

    15.97

    15.47

    15.55

    16.45

    15.52

    16.06

    16.25

    15.66

    Q12

    19.78

    26.19

    24.3

    28.75

    24.55

    27.53

    25.5

    26.8

    26.31

    25.89

    26.2

    Q13

    28.45

    39.61

    41.61

    42.08

    42.23

    38.83

    44.02

    39.84

    38.74

    42.23

    41.42

    Q14

    9.94

    14.66

    16.42

    14.67

    16.45

    16.33

    14.8

    13.06

    15.47

    12.64

    13.55

    Q15

    9.98

    14.41

    14.09

    11.83

    14.42

    17.58

    14.75

    14.94

    13.66

    12.84

    14.95

    Q16

    20.47

    29.64

    28.58

    28.2

    27.56

    27.78

    27.14

    28.83

    29.78

    27.28

    28.27

    Q17

    18.27

    29.63

    25.63

    30.27

    27.3

    28.38

    25.83

    30.16

    29.23

    30.19

    32.67

    Q18

    32.03

    45.88

    37.92

    38.55

    37.66

    42.28

    36.52

    42.56

    36.97

    37.2

    38.64

    Q19

    17.44

    25.67

    25.63

    25.66

    25.8

    27.19

    25.36

    24.63

    24.42

    24.61

    22.97

    Q20

    13.13

    20.89

    17.86

    18.58

    14.89

    18.58

    20.59

    24.09

    18.47

    21.59

    19.03

    Q21

    57.19

    79.23

    90.3

    77.09

    81.2

    82.0

    83.86

    81.26

    77.53

    97.01

    94.97

    Q22

    4.47

    7.19

    6.28

    7.69

    7.39

    6.84

    6.94

    6.86

    6.92

    6.83

    25.51

    RF1

    8.07

    8.00

    7.89

    7.86

    8.05

    8.09

    8.19

    7.95

    8.08

    8.00

    8.11

    RF2

    11.00

    11.04

    11.00

    10.95

    10.97

    11.07

    11.27

    10.95

    11.15

    11.03

    11.11

    (4)查询和更新操作响应时间曲线图:

    a4c26d1e5885305701be709a3d33442f.png

    图 1

    TPC-H查询和更新操作响应时间

    (5)此时过程中数据库服务器资源监控

    a4c26d1e5885305701be709a3d33442f.pnga4c26d1e5885305701be709a3d33442f.png

     a4c26d1e5885305701be709a3d33442f.png

    4、结果分析

    在本次测试过程中,共有10个线程进行数据操作,其中Q1查询语句的平均响应时间为15.822秒,Q2查询语句平均响应时间为7.259秒,Q3查询语句平均响应时间为22.983秒,Q4查询语句平均响应时间为22.856秒,Q5查询语句平均响应时间为23.993秒,Q6查询语句平均响应时间14.300秒,Q7查询语句平均响应时间为27.468秒,Q8查询语句平均响应时间为39.266秒,Q9查询语句平均响应时间68.072秒,Q10查询语句的平均响应时间为32.041秒,Q11查询语句的平均响应时间为17.280秒,Q12查询语句平均响应时间为28.180秒,Q13查询语句的平均响应时间为43.906秒,Q14查询语句的平均响应时间为15.345秒,Q16查询语句平均响应时间为30.353秒,Q17查询语句平均响应时间为30.756秒,Q18查询语句平均响应时间为42.621秒,Q19查询语句平均响应时间为26.938秒,Q20查询语句平均响应时间为20.77秒,Q21查询语句平均响应时间为90.164秒,Q22查询语句平均响应时间为9.292秒,RF1更新语句平均响应时间为8.829秒,RF2更新语句平均响应时间为12.154秒。

    通过上述平均响应时间可以看出,被测数据库对于简单查询(简单查询所指对单个表的查询、多个表的简单属性查询、单一函数三种情况中的一种的查询语句)的平均响应时间较小,对于复杂查询(复杂查询所指对单个表的查询、多个表的简单属性查询、单一函数三种查询情况的两种及其以上的查询语句)的平均响应时间较大,而两条更新语句平均响应时间都较小,因此被测数据库在负载查询的处理方面仍存在很大的优化提升空间。通过TPC-H基准测试可以有效评估数据库系统的性能处理能力,也可以通过横向对比测试评价不同数据库管理系统的联机分析处理能力的差异,促进数据库系统的联机事务处理能力发展。

    展开全文
  • 查询语句没有从语法上限制返回多少条元组,但是TPC-H标准规定,查询结果只返回前100行(通常依赖于应用程序实现)。 二、 Oracle执行 Oracle编写的查询SQL语句如下: select * from ( select /*+ ...

    一、     查询要求

     

    Q21语句查询获得不能及时交货的供货商。

    Q21语句的特点是:带有分组、排序、聚集、EXISTS子查询、NOT EXISTS子查询操作并存的四表连接操作。查询语句没有从语法上限制返回多少条元组,但是TPC-H标准规定,查询结果只返回前100行(通常依赖于应用程序实现)。

     

     

    二、     Oracle执行

     

    Oracle编写的查询SQL语句如下:

    select * from (

             select  /*+ parallel(n) */

                       s_name,

                       count(*) as numwait

             from

                       supplier,lineitem l1,orders,nation

             where

                       s_suppkey = l1.l_suppkey

                       and o_orderkey = l1.l_orderkey

                       and o_orderstatus = 'F'

                       and l1.l_receiptdate > l1.l_commitdate

                       and exists (

                                select

                                         *

                                from

                                         lineitem l2

                                where

                                         l2.l_orderkey = l1.l_orderkey

                                         and l2.l_suppkey <> l1.l_suppkey

                       )

                       and not exists (

                                select

                                         *

                                from

                                         lineitem l3

                                where

                                         l3.l_orderkey = l1.l_orderkey

                                         and l3.l_suppkey <> l1.l_suppkey

                                         and l3.l_receiptdate > l3.l_commitdate

                       )

                       and s_nationkey = n_nationkey

                       and n_name = 'CHINA'

             group by

                       s_name

             order by

                       numwait desc,

                       s_name

    ) where rownum<=100;

    其中/*+ parallel(n) */ 是Oracle的并行查询语法,n是并行数。

    脚本执行时间,单位:秒

    并行数 1 2 4 8 12
    Oracle 978 634 463 363 326

     

     

    三、     SPL优化

     

    本问题的主查询比较简单,就是前面介绍过的主子表和外键表的连接。这里麻烦的主要是两个有exists的子查询。仔细研究这两个子查询可以发现,它们都是针对同一个l_orderkey下的lineitem记录的一些运算。

    我们知道,lineitem已经按l_orderkey排序,而且子表记录可以看作是主表的集合字段,如果我们将orders和lineitem的连接结果集按orderkey做有序分组(但先不聚合),可以得到一个个由相同l_orderkey值的lineitem记录的小集合,再在这个小集合中去计算上述那两个exists条件就会比较简单一些。

    SQL没有显式的集合数据类型,没办法描述这种运算过程。而SPL提供有这种数据类型,就可以实现这个思路了。

     

    SPL脚本如下:

      A
    1 =1
    2 =now()
    3 >name="CHINA"
    4 =file(path+"orders.ctx").create().cursor@m(O_ORDERKEY;O_ORDERSTATUS   == "F";A1)
    5 =file(path+"lineitem.ctx").create().news(A4,L_ORDERKEY,L_SUPPKEY,L_COMMITDATE,L_RECEIPTDATE)
    6 =A5.group(L_ORDERKEY)
    7 =A6.conj(  if( (t=~.select(~.L_RECEIPTDATE > ~.L_COMMITDATE)) &&   (s=t.m(1).L_SUPPKEY)&& !t.select@1(~.L_SUPPKEY!=s) && ~.select@1(~.L_SUPPKEY!=s),   t, null ) )
    8 =file(path+"nation.ctx").create().cursor(N_NATIONKEY;N_NAME   == name).fetch().keys@i(N_NATIONKEY)
    9 =file(path+"supplier.ctx").create().cursor@m(S_SUPPKEY,S_NAME;A8.find(S_NATIONKEY);A1)
    10 =A9.fetch()
    11 =A7.switch@i(L_SUPPKEY,A10:S_SUPPKEY)
    12 =A11.groups@u(L_SUPPKEY.S_NAME:s_name;count(1):numwait)
    13 =A12.top(100;[-numwait,s_name])
    14 =now()
    15 =interval@s(A2,A14)

    A5中对orders和lineitem做连接,A6再对其做有序分组,分成由相同l_orderkey值的lineitem记录集合,A7中对这些小集合实现exists判断,过滤掉不满足条件的。后面的代码把其它外键表关联上再做常规分组运算即可。

     

    脚本执行时间,单位:秒

    并行数 1 2 4 8 12
    Oracle 978 634 463 363 326
    SPL组表 259 163 83 40 27

     

    展开全文
  • 一、 查询要求 ...查询语句没有从语法上限制返回多少条元组,但是TPC-H标准规定,查询结果只返回前10行(通常依赖于应用程序实现)。 二、 Oracle执行 Oracle编写的查询SQL语句如下: sele...

    一、     查询要求

     

    Q10语句是查询每个国家在某时刻起的三个月内货运存在问题的客户和造成的损失。

    Q10语句的特点是:带有分组、排序、聚集操作并存的多表连接查询操作。查询语句没有从语法上限制返回多少条元组,但是TPC-H标准规定,查询结果只返回前10行(通常依赖于应用程序实现)。

     

     

    二、     Oracle执行

     

    Oracle编写的查询SQL语句如下:

    select * from (

             select  /*+ parallel(n) */

                       c_custkey,c_name,

                       sum(l_extendedprice * (1 - l_discount)) as revenue,

                       c_acctbal,n_name,c_address,c_phone,c_comment

             from

                       customer,orders,lineitem,nation

             where

                       c_custkey = o_custkey

                       and l_orderkey = o_orderkey

                       and o_orderdate >= date '1993-05-01'

                       and o_orderdate < date '1993-05-01' + interval '3' month

                       and l_returnflag = 'R'

                       and c_nationkey = n_nationkey

             group by

                       c_custkey,

                       c_name,

                       c_acctbal,

                       c_phone,

                       n_name,

                       c_address,

                       c_comment

             order by

                       revenue desc

    ) where rownum <=10;

    其中/*+ parallel(n) */ 是Oracle的并行查询语法,n是并行数。

    脚本执行时间,单位:秒

    并行数 1 2 4 8 12
    Oracle 591 399 313 237 215

     

     

    三、     SPL优化

     

    这里的orders与lineitem主子表关联优化原理与Q3中类似。

     

    SPL脚本如下:

      A
    1 =1
    2 =now()
    3 >date=date("1993-05-01")
    4 =elapse@m(date,3)
    5 =file(path+"orders.ctx").create().cursor@m(O_ORDERKEY,O_CUSTKEY,O_ORDERDATE;O_ORDERDATE>=date   && O_ORDERDATE<A4;A1)
    6 =file(path+"lineitem.ctx").create().news(A5,L_ORDERKEY,L_EXTENDEDPRICE,L_DISCOUNT,L_RETURNFLAG,O_CUSTKEY,O_ORDERDATE;L_RETURNFLAG=="R")
    7 =A6.groups@u(O_CUSTKEY:c_custkey;sum(L_EXTENDEDPRICE*(1-L_DISCOUNT)):revenue)
    8 =A7.sort(revenue:-1).to(10).derive@o().keys@i(c_custkey)
    9 =file(path+"nation.ctx").create().cursor(N_NATIONKEY,N_NAME).fetch().keys@i(N_NATIONKEY)
    10 =file(path+"customer.ctx").create()
    11 =A8.joinx@q(c_custkey,A10:C_CUSTKEY,C_NAME,C_ADDRESS,C_NATIONKEY,C_PHONE,C_ACCTBAL,C_COMMENT).fetch()
    12 =A11.switch(C_NATIONKEY,A9:N_NATIONKEY)
    13 =A12.new(c_custkey:C_CUSTKEY,C_NAME,revenue,C_ACCTBAL,C_NATIONKEY.N_NAME:N_NAME,C_ADDRESS,C_PHONE,C_COMMENT)
    14 =A13.sort(revenue:-1)
    15 =now()
    16 =interval@s(A2,A15)

    先把orders和lineitem表的连接结果集上的分组汇总运算做完,然后再基于这个结果集继续做外部相关的外键表关联运算。因为最终结果只要取10条记录,可以只针对这10条记录再做剩下的关联计算,所以不必在分组前做,否则计算量会增大。

    A8中也可以使用top函数取出前10名,比sort全排序会更快,不过此时数据量已经不大,差别不太明显了。

    A8算出来之后,因为customer表对C_CUSTKEY有序,用A8.cursor().joinx@q从customer表中有序匹配快速地把相关记录取出来,再去做其它join,无须遍历customer表,减少数据读取量。

     

    脚本执行时间,单位:秒

    并行数 1 2 4 8 12
    Oracle 591 399 313 237 215
    SPL组表 108 61 36 23 21

     

    展开全文
  • 一、 查询要求 Q2语句查询获得最小代价的供货商。得到给定的区域内,对于指定的...查询语句没有从语法上限制返回多少条元组,TPC-H标准规定,查询结果只返回前100行即可(通常依赖于应用程序实现)。 二、 O...

    一、     查询要求

     

    Q2语句查询获得最小代价的供货商。得到给定的区域内,对于指定的零件(某一类型和大小的零件),哪个供应商能以最低的价格供应它,就可以选择哪个供应商来订货。

    Q2语句的特点是:带有排序、聚集操作、子查询并存的多表查询操作。查询语句没有从语法上限制返回多少条元组,TPC-H标准规定,查询结果只返回前100行即可(通常依赖于应用程序实现)。

     

     

    二、     Oracle执行

     

    Oracle编写的查询SQL语句如下:

    select * from (

             select   /*+ parallel(n) */

                       s_acctbal,s_name,n_name,p_partkey,p_mfgr,s_address,s_phone,s_comment

             from part,supplier,partsupp,nation,region

             where

                       p_partkey = ps_partkey

                       and s_suppkey = ps_suppkey

                       and p_size = 25

                       and p_type like '%COPPER'

                       and s_nationkey = n_nationkey

                       and n_regionkey = r_regionkey

                       and r_name = 'ASIA'

                       and ps_supplycost = (

                                select

                                         min(ps_supplycost)

                                from

                                         partsupp,

                                         supplier,

                                         nation,

                                         region

                                where

                                         p_partkey = ps_partkey

                                         and s_suppkey = ps_suppkey

                                         and s_nationkey = n_nationkey

                                         and n_regionkey = r_regionkey

                                         and r_name = 'ASIA'

                       )

             order by

                       s_acctbal desc,n_name,s_name,p_partkey

    )

    where rownum <= 100;

    其中/*+ parallel(n) */ 是Oracle的并行查询语法,n是并行数。

    脚本执行时间,单位:秒

    并行数 1 2 4 8 12
    Oracle 56 35 23 16 27

     

     

    三、     SPL优化

     

    仔细分析这句SQL,如果把子查询

                                select

                                         *

                                from

                                         part,

                                         partsupp,

                                         supplier,

                                         nation,

                                         region

                                where

                                         p_partkey = ps_partkey

                                         and s_suppkey = ps_suppkey

                                         and s_nationkey = n_nationkey

                                         and n_regionkey = r_regionkey

                                         and r_name = 'ASIA'

                                         and p_size = 25

                                          and p_type like '%COPPER'

    看成是某个视图V,原来查询主体可以改写成:

             select   /*+ parallel(n) */

                       s_acctbal,s_name,n_name,p_partkey,p_mfgr,s_address,s_phone,s_comment

             from V

             where

                       ps_supplycost = (

                                select

                                         min(ps_supplycost)

                                from

                                         V V1

                                where

                                         V.p_partkey = V1.p_partkey

                       )

    这样将原查询变成一个单表查询,相当于找出V中这样一些记录,使得这些记录的ps_supplycost值在所有与该记录的partkey值相同的记录中取值最小。这个运算的本质是对V按partkey分组后对每组聚合,计算出每组中ps_supplycost最小的那条记录。但是,SQL不支持这种聚合运算,于是只能写成子查询的情况(即使转换成单表运算后)。

    如果数据库优化引擎不好,严格按这个子查询描述的方法去遍历计算,就会导致N*N的复杂度(N是V的记录数);即使数据库优化引擎较好,也需要先对V按partkey分组求ps_supplycost的最小值后做形成中间结果集再做索引,然后再次遍历V,计算量也不少。

     

    解决这个问题更好的办法就是支持这种返回记录本身的聚合计算,一次分组聚合即可完成运算。SPL有集合和引用数据类型,也支持聚合出最小值所在记录的聚合运算,可以实现这个想法,整体复杂度就会低很多。

    SPL脚本如下:

      A
    1 =1
    2 >size=25
    3 >type="*COPPER"
    4 >name="ASIA"
    5 =now()
    6 =file(path+"region.ctx").create().cursor().select(R_NAME==name).fetch()
    7 =file(path+"nation.ctx").create().cursor().switch@i(N_REGIONKEY,   A6:R_REGIONKEY).fetch().keys@i(N_NATIONKEY)
    8 =file(path+"part.ctx").create().cursor@m(P_PARTKEY,P_MFGR;P_SIZE==size   && like(P_TYPE,type);A1).fetch().keys@i(P_PARTKEY)
    9 =file(path+"supplier.ctx").create().cursor@m(S_SUPPKEY,S_NAME,S_ADDRESS,S_NATIONKEY,S_PHONE,S_ACCTBAL,S_COMMENT;S_NATIONKEY:A7;A1)
    10 =A9.fetch().keys@i(S_SUPPKEY)
    11 =file(path+"partsupp.ctx").create().cursor@m(PS_PARTKEY,PS_SUPPKEY,PS_SUPPLYCOST;PS_PARTKEY:A8,PS_SUPPKEY:A10;A1)
    12 =A11.groups(PS_PARTKEY;top(1;PS_SUPPLYCOST):rs).conj(rs)
    13 =A12.new(PS_SUPPKEY.S_ACCTBAL,PS_SUPPKEY.S_NAME,PS_SUPPKEY.S_NATIONKEY.N_NAME,PS_PARTKEY.P_PARTKEY,PS_PARTKEY.P_MFGR,PS_SUPPKEY.S_ADDRESS,PS_SUPPKEY.S_PHONE,PS_SUPPKEY.S_COMMENT)
    14 =A13.sort(S_ACCTBAL:-1,N_NAME,S_NAME,P_PARTKEY).to(100)
    15 =now()
    16 =interval@s(A5,A15)

    需要解释的是,SPL相对于SQL更底层一些,SPL不象SQL有元数据概念,也没有系统级的表概念,数据访问直接从文件开始读取数据,这时前面准备数据的代码就显得稍微冗长一点。实际应用中可以通过使用SPL预定义全程变量或虚表语法来简化,达到类似SQL直接使用数据表的效果。但这不是本篇的重点,而且为了让读者更方便地看出数据的原始流向,这里就采用了直接文件访问的语法。

     

    代码中A6-A11用于定义上述视图V的游标,A12中用groups内的top函数实现分组的同时聚合出最小值所在记录(而不是最小值本身)。

    A7中的switch@i函数将把外键不能匹配的记录过滤掉,同时将能匹配的关联字段转换成外键表记录的指针,这样在后面可以直接用.的形式访问外键表的字段。SPL看待JOIN运算的思路和SQL不一样,如果数据能事先加载进内存,SPL以利用预关联提高运算性能。不过,本系列例子均假定从外存取数计算,本问题中SPL和SQL在JOIN运算性能也没有算法上的区别,只是写法不同。详细解释可参考SPL教案中关于JOIN的部分。

    另外,在A8中也使用了Q1中提到的在游标建立时使用过滤条件的技巧。A9和A11中将这个技巧与前面的switch@i方法结合起来(第2组参数),在游标建立时做外键匹配,不能匹配者直接过滤掉,不再读取其它字段且不再生成该记录,能匹配时则将关联字段转换成指针。

     

    脚本执行时间,单位:秒

    并行数 1 2 4 8 12
    Oracle 56 35 23 16 27
    SPL组表 20 14 8 5 4

    这个问题的数据量不大,几次执行后,操作系统可以把数据都缓存进内存,列存在这里不是重点,带来的访问量优势可以忽略,性能优势主要是算法优化带来的。

    从表中还能看出,这种分组聚合的并行效果也较好。

    展开全文
  • 一、 查询要求 Q18语句查询获得比指定供货量大的供货商信息...查询语句没有从语法上限制返回多少条元组,但是TPC-H标准规定,查询结果只返回前100行(通常依赖于应用程序实现)。 二、 Oracle执行 Oracle...
  • TPCH

    千次阅读 2013-03-25 16:28:17
    TPC简介 事务处理性能委员会( Transaction Processing ...TPC的成员主要是计算机软硬件厂家,而非计算机用户,它的功能是制定商务应用基准程序(Benchmark)的标准规范、性能和价格度量,并管理测试结果的发布。
  • 早先已经做过一次OLTP性能对比测试:SAS vs SSD各种模式下MySQL TPCC OLTP对比测试结果,这次做OLAP对比测试。 对比测试结果见下: SSD设备相应的性能提升比例: 测试环境: 本文转自叶金荣51CTO博客,原文链接:...
  • TPC的成员主要是计算机软硬件厂家,而非计算机用户,它的功能是制定商务应用基准程序(Benchmark)的标准规范、性能和价格度量,并管理测试结果的发布。 “TPCH”就是用来进行数据库测试的一个基准(benchmark)...
  • 背景 PostgreSQL 11 发布在即,以下是tpcc与tpch测试结果: 《PostgreSQL 11 tpcc 测试(103万tpmC on ECS) - use sysbench-tpcc...
  • 数据库压力测试工具

    2013-12-16 23:24:00
    这是本人写的一个数据库压力测试的工具,该工具内置了22条sql语句(基于TPCH测试),可以对数据库类型,数据库、密码进行设置 可以设置压力测试的连接数。可以自定义测试的sql语句。 并将测试结果保持在csv格式的...
  • 标签 PostgreSQL , tpcb , pgbench , 100...PostgreSQL 11 发布在即,以下是tpcc与tpch测试结果: 《PostgreSQL 11 tpcc 测试(103万tpmC on ECS) - use sysbench-tpcc by Percona-Lab》 《(TPC-H测试 SF=10,SF=20...
  • 数据来源使用TPCH生成的数据,选用其中的part表来做测试,数据记录为2000万行,9个字段。它生成的原始文本文件名为part.tbl,文件大小为2.4G。测试时先将文本读入内存形成内存对象,然后再写入,文本读入的时间不计...
  • 试用Vitesse

    2016-06-08 15:08:30
    VitesseDB是基于PG Enhance过的数据库产品。 根据官网,有Standard和Enterprise两个版本,Enterprise支持CPU的并行加速,也...用TPCH实际测试结果来看,不那么有序。 PG:9.6beta1 VitesseDB Standard:基于PG9....
  • java 从hadoop hdfs读取文件 进行groupby并显示...有兴趣使用的,请点源代码与数据下载链接1 读取数据1.1准备数据此数据为TPCH基准测试集中lineitem.tdl文件中前25行 示例:第一行如下 1|1552|93|1|17|24710.35|0.04|0

空空如也

空空如也

1 2
收藏数 23
精华内容 9
关键字:

tpch测试结果