SSB(Star Schema Benchmark)是麻省州立大学波士顿校区的研究人员定义的基于现实商业应用的数据模型,业界公认用来模拟决策支持类应用,比较公正和中立。
学术界和工业界普遍采用它来评价决策支持技术方面应用的性能。
全方位评测系统的整体商业计算综合能力,对厂商的要求更高。
在银行信贷分析和信用卡分析、电信运营分析、税收分析、烟草行业决策分析中都有广泛的应用。

SSB基准测试包括:
 1个事实表:lineorder
 4个维度表:customer,part,dwdate,supplier
 13条标准SQL查询测试语句:统计查询、多表关联、sum、复杂条件、group by、order by等组合方式。

SSB数据生成器


SSB数据自动生成器下载地址:点击这里

实验证明,在Linux上操作比较方便,步骤如下:

  • 将下载的文件上传至Linux主机上的目录
  • 执行如下命令,生成dbgen文件:make
  • 查看 dbgen 命令帮助: ./dbgen -h
  • 生成数据文件,命令如下:
  • (customer.tbl)
    dbgen -s 1 -T c (part.tbl)
    dbgen -s 1 -T p (supplier.tbl)
    dbgen -s 1 -T s (date.tbl)
    dbgen -s 1 -T d (fact table lineorder.tbl)
    dbgen -s 1 -T l (for all SSBM tables)
    dbgen -s 1 -T a
  • 生成文件如下: ll *tbl -l
  • 连接mysql数据库,创建数据库,数据表
  • 创建数据库: create database ssb;
  • 创建数据库表:
  • CREATE TABLE CUSTOMER ( C_CUSTKEY     INTEGER,
    C_NAME VARCHAR(25) NOT NULL,
    C_ADDRESS VARCHAR(40) NOT NULL,
    C_CITY VARCHAR(10) NOT NULL,
    C_NATION VARCHAR(15) NOT NULL,
    C_REGION VARCHAR(12) NOT NULL,
    C_PHONE VARCHAR(15) NOT NULL,
    C_MKTSEGMENT VARCHAR(10) NOT NULL); CREATE TABLE DATES ( D_DATEKEY INTEGER,
    D_DATE VARCHAR(18) NOT NULL,
    D_DAYOFWEEK VARCHAR(18) NOT NULL,
    D_MONTH VARCHAR(9) NOT NULL,
    D_YEAR INTEGER NOT NULL,
    D_YEARMONTHNUM INTEGER,
    D_YEARMONTH VARCHAR(7) NOT NULL,
    D_DAYNUMINWEEK INTEGER,
    D_DAYNUMINMONTH INTEGER,
    D_DAYNUMINYEAR INTEGER,
    D_MONTHNUMINYEAR INTEGER,
    D_WEEKNUMINYEAR INTEGER,
    D_SELLINGSEASON VARCHAR(12) NOT NULL,
    D_LASTDAYINWEEKFL INTEGER,
    D_LASTDAYINMONTHFL INTEGER,
    D_HOLIDAYFL INTEGER,
    D_WEEKDAYFL INTEGER); CREATE TABLE PART ( P_PARTKEY INTEGER,
    P_NAME VARCHAR(22) NOT NULL,
    P_MFGR VARCHAR(6) NOT NULL,
    P_CATEGORY VARCHAR(7) NOT NULL,
    P_BRAND VARCHAR(9) NOT NULL,
    P_COLOR VARCHAR(11) NOT NULL,
    P_TYPE VARCHAR(25) NOT NULL,
    P_SIZE INTEGER NOT NULL,
    P_CONTAINER VARCHAR(10) NOT NULL); CREATE TABLE SUPPLIER ( S_SUPPKEY INTEGER,
    S_NAME VARCHAR(25) NOT NULL,
    S_ADDRESS VARCHAR(25) NOT NULL,
    S_CITY VARCHAR(10) NOT NULL,
    S_NATION VARCHAR(15) NOT NULL,
    S_REGION VARCHAR(12) NOT NULL,
    S_PHONE VARCHAR(15) NOT NULL); CREATE TABLE LINEORDER ( LO_ORDERKEY BIGINT,
    LO_LINENUMBER BIGINT,
    LO_CUSTKEY INTEGER NOT NULL,
    LO_PARTKEY INTEGER NOT NULL,
    LO_SUPPKEY INTEGER NOT NULL,
    LO_ORDERDATE INTEGER NOT NULL,
    LO_ORDERPRIOTITY VARCHAR(15) NOT NULL,
    LO_SHIPPRIOTITY INTEGER,
    LO_QUANTITY BIGINT,
    LO_EXTENDEDPRICE BIGINT,
    LO_ORDTOTALPRICE BIGINT,
    LO_DISCOUNT BIGINT,
    LO_REVENUE BIGINT,
    LO_SUPPLYCOST BIGINT,
    LO_TAX BIGINT,
    LO_COMMITDATE INTEGER NOT NULL,
    LO_SHIPMODE VARCHAR(10) NOT NULL);
  • 执行完成后,结果如下:
  • 执行如下SQL、导入数据
  • set autocommit=off;
    load data infile '/dbgen/lineorder.tbl' into table LINEORDER fields terminated by '|' lines terminated by '|\n';
    commit; load data infile '/dbgen/supplier.tbl' into table SUPPLIER fields terminated by '|' lines terminated by '|\n';
    commit; load data infile '/dbgen/customer.tbl' into table CUSTOMER fields terminated by '|' lines terminated by '|\n';
    commit; load data infile '/dbgen/part.tbl' into table PART fields terminated by '|' lines terminated by '|\n';
    commit; load data infile '/dbgen/date.tbl' into table DATES fields terminated by '|' lines terminated by '|\n';
    commit;
  • 查看数据是否正确

标准SQL查询测试语句


  • PROMPT Q1.1
    SELECT SUM(LO_EXTENDEDPRICE*LO_DISCOUNT) AS
    REVENUE
    FROM LINEORDER, DATES
    WHERE LO_ORDERDATE = D_DATEKEY
    AND D_YEAR = 1993
    AND LO_DISCOUNT BETWEEN 1 AND 3
    AND LO_QUANTITY < 25; PROMPT Q1.2
    SELECT SUM(LO_EXTENDEDPRICE*LO_DISCOUNT) AS
    REVENUE
    FROM LINEORDER, DATES
    WHERE LO_ORDERDATE = D_DATEKEY
    AND D_YEARMONTH = 'Jan1994'
    AND LO_DISCOUNT BETWEEN 4 AND 6
    AND LO_QUANTITY BETWEEN 26 AND 35; PROMPT Q1.3
    SELECT SUM(LO_EXTENDEDPRICE*LO_DISCOUNT) AS
    REVENUE
    FROM LINEORDER, DATES
    WHERE LO_ORDERDATE = D_DATEKEY
    AND D_WEEKNUMINYEAR = 6
    AND D_YEAR = 1994
    AND LO_DISCOUNT BETWEEN 5 AND 7
    AND LO_QUANTITY BETWEEN 26 AND 35; PROMPT Q2.1
    SELECT SUM(LO_REVENUE), D_YEAR, P_BRAND
    FROM LINEORDER, DATES, PART, SUPPLIER
    WHERE LO_ORDERDATE = D_DATEKEY
    AND LO_PARTKEY = P_PARTKEY
    AND LO_SUPPKEY = S_SUPPKEY
    AND P_CATEGORY = 'MFGR#12'
    AND S_REGION = 'AMERICA'
    GROUP BY D_YEAR, P_BRAND
    ORDER BY D_YEAR, P_BRAND; PROMPT Q2.2
    SELECT SUM(LO_REVENUE), D_YEAR, P_BRAND
    FROM LINEORDER, DATES, PART, SUPPLIER
    WHERE LO_ORDERDATE = D_DATEKEY
    AND LO_PARTKEY = P_PARTKEY
    AND LO_SUPPKEY = S_SUPPKEY
    AND P_BRAND BETWEEN 'MFGR#2221'
    AND 'MFGR#2228'
    AND S_REGION = 'ASIA'
    GROUP BY D_YEAR, P_BRAND
    ORDER BY D_YEAR, P_BRAND; PROMPT Q2.3
    SELECT SUM(LO_REVENUE), D_YEAR, P_BRAND
    FROM LINEORDER, DATES, PART, SUPPLIER
    WHERE LO_ORDERDATE = D_DATEKEY
    AND LO_PARTKEY = P_PARTKEY
    AND LO_SUPPKEY = S_SUPPKEY
    AND P_BRAND= 'MFGR#2239'
    AND S_REGION = 'EUROPE'
    GROUP BY D_YEAR, P_BRAND
    ORDER BY D_YEAR, P_BRAND; PROMPT Q3.1
    SELECT C_NATION, S_NATION, D_YEAR,
    SUM(LO_REVENUE) AS REVENUE
    FROM CUSTOMER, LINEORDER, SUPPLIER, DATES
    WHERE LO_CUSTKEY = C_CUSTKEY
    AND LO_SUPPKEY = S_SUPPKEY
    AND LO_ORDERDATE = D_DATEKEY
    AND C_REGION = 'ASIA'
    AND S_REGION = 'ASIA'
    AND D_YEAR >= 1992 AND D_YEAR <= 1997
    GROUP BY C_NATION, S_NATION, D_YEAR
    ORDER BY D_YEAR ASC, REVENUE DESC; PROMPT Q3.2
    SELECT C_CITY, S_CITY, D_YEAR, SUM(LO_REVENUE)
    AS REVENUE
    FROM CUSTOMER, LINEORDER, SUPPLIER, DATES
    WHERE LO_CUSTKEY = C_CUSTKEY
    AND LO_SUPPKEY = S_SUPPKEY
    AND LO_ORDERDATE = D_DATEKEY
    AND C_NATION = 'UNITED STATES'
    AND S_NATION = 'UNITED STATES'
    AND D_YEAR >= 1992 AND D_YEAR <= 1997
    GROUP BY C_CITY, S_CITY, D_YEAR
    ORDER BY D_YEAR ASC, REVENUE DESC; PROMPT Q3.3
    SELECT C_CITY, S_CITY, D_YEAR, SUM(LO_REVENUE)
    AS REVENUE
    FROM CUSTOMER, LINEORDER, SUPPLIER, DATES
    WHERE LO_CUSTKEY = C_CUSTKEY
    AND LO_SUPPKEY = S_SUPPKEY
    AND LO_ORDERDATE = D_DATEKEY
    AND (C_CITY='UNITED KI1'
    OR C_CITY='UNITED KI5')
    AND (S_CITY='UNITED KI1'
    OR S_CITY='UNITED KI5')
    AND D_YEAR >= 1992 AND D_YEAR <= 1997
    GROUP BY C_CITY, S_CITY, D_YEAR
    ORDER BY D_YEAR ASC, REVENUE DESC; PROMPT Q3.4
    SELECT C_CITY, S_CITY, D_YEAR, SUM(LO_REVENUE)
    AS REVENUE
    FROM CUSTOMER, LINEORDER, SUPPLIER, DATES
    WHERE LO_CUSTKEY = C_CUSTKEY
    AND LO_SUPPKEY = S_SUPPKEY
    AND LO_ORDERDATE = D_DATEKEY
    AND (C_CITY='UNITED KI1'
    OR C_CITY='UNITED KI5')
    AND (S_CITY='UNITED KI1'
    OR S_CITY='UNITED KI5')
    AND D_YEARMONTH = 'Dec1997'
    GROUP BY C_CITY, S_CITY, D_YEAR
    ORDER BY D_YEAR ASC, REVENUE DESC; PROMPT Q4.1
    SELECT D_YEAR, C_NATION,
    SUM(LO_REVENUE - LO_SUPPLYCOST) AS PROFIT
    FROM DATES, CUSTOMER, SUPPLIER, PART, LINEORDER
    WHERE LO_CUSTKEY = C_CUSTKEY
    AND LO_SUPPKEY = S_SUPPKEY
    AND LO_PARTKEY = P_PARTKEY
    AND LO_ORDERDATE = D_DATEKEY
    AND C_REGION = 'AMERICA'
    AND S_REGION = 'AMERICA'
    AND (P_MFGR = 'MFGR#1'
    OR P_MFGR = 'MFGR#2')
    GROUP BY D_YEAR, C_NATION
    ORDER BY D_YEAR, C_NATION; PROMPT Q4.2
    SELECT D_YEAR, S_NATION, P_CATEGORY,
    SUM(LO_REVENUE - LO_SUPPLYCOST) AS PROFIT
    FROM DATES, CUSTOMER, SUPPLIER, PART, LINEORDER
    WHERE LO_CUSTKEY = C_CUSTKEY
    AND LO_SUPPKEY = S_SUPPKEY
    AND LO_PARTKEY = P_PARTKEY
    AND LO_ORDERDATE = D_DATEKEY
    AND C_REGION = 'AMERICA'
    AND S_REGION = 'AMERICA'
    AND (D_YEAR = 1997 OR D_YEAR = 1998)
    AND (P_MFGR = 'MFGR#1'
    OR P_MFGR = 'MFGR#2')
    GROUP BY D_YEAR, S_NATION, P_CATEGORY
    ORDER BY D_YEAR, S_NATION, P_CATEGORY; PROMPT Q4.3
    SELECT D_YEAR, S_CITY, P_BRAND,
    SUM(LO_REVENUE - LO_SUPPLYCOST) AS PROFIT
    FROM DATES, CUSTOMER, SUPPLIER, PART, LINEORDER
    WHERE LO_CUSTKEY = C_CUSTKEY
    AND LO_SUPPKEY = S_SUPPKEY
    AND LO_PARTKEY = P_PARTKEY
    AND LO_ORDERDATE = D_DATEKEY
    AND S_NATION = 'UNITED STATES'
    AND (D_YEAR = 1997 OR D_YEAR = 1998)
    AND P_CATEGORY = 'MFGR#14'
    GROUP BY D_YEAR, S_CITY, P_BRAND
    ORDER BY D_YEAR, S_CITY, P_BRAND;
  • nfobright 342 on linux 64

SSB基准测试的更多相关文章

  1. MatrixOne从入门到实践08——SSB性能测试

    MatrixOne从入门到实践--SSB性能测试 SSB 星型模式基准测试是 OLAP 数据库性能测试的常用场景,通过本篇教程,您可以了解到如何在 MatrixOne 中实现 SSB 测试. 测试环境 ...

  2. 一篇文章看懂TPCx-BB(大数据基准测试工具)源码

    TPCx-BB是大数据基准测试工具,它通过模拟零售商的30个应用场景,执行30个查询来衡量基于Hadoop的大数据系统的包括硬件和软件的性能.其中一些场景还用到了机器学习算法(聚类.线性回归等).为了 ...

  3. JavaScript的基准测试-不服跑个分?

    原文:Bulletproof JavaScript benchmarks 做JavaScript的基准测试并没有想的那么简单.即使不考虑浏览器差异所带来的影响,也有很多难点-或者说陷阱需要面对. 这是 ...

  4. mysql benchmark基准测试

    git项目地址: https://github.com/akopytov/sysbench 利用sysbench很容易对mysql做性能基准测试(当然这个工具很强大,除了测试主流数据库性能,还能测试其 ...

  5. 掌握 Linux PC 性能之基准测试

    导读 基准测试是一项测试或一系列测试,用来确定某个计算机硬件运行起来的状况有多好:在许多情况下,“基准测试”实际上等同于“压力测试”,通过测试硬件的极限,然后可以将测得的结果与其他硬件测得的结果作一番 ...

  6. mysql基准测试

    1. 及注册时有两种主要的策略:①正对整个系统的整体测试(集成式full-stack) ②单独测试mysql(但组件式基准测试single-component) 2.获取系统性能和状态(需要记录的数据 ...

  7. [译]使用JMH进行微基准测试:不要猜,要测试!

    英文原文:Micro Benchmarking with JMH: Measure, don't guess!翻译地址:使用JMH进行微基准测试:不要猜,要测试!原文作者:Antonio翻译作者:Ho ...

  8. Java监控工具介绍,VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,Java微基准测试

    本文是本人前一段时间做一个简单Java监控工具调研总结,主要包括VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,以及对Java微基准测试的简单介绍, ...

  9. Hadoop 基准测试与example

    #pi值示例 hadoop jar /app/cdh23502/share/hadoop/mapreduce2/hadoop-mapreduce-examples--cdh5. #生成数据 第一个参数 ...

随机推荐

  1. postman(六):详解在Pre-request Script中如何执行请求

    上一篇借着如何在不同接口之间传递数据,简单说了下在postman编写脚本发送请求,这里再详细介绍一下如何在Pre-request Script和Tests标签中编写脚本.因为我目前研究的也不是很深,对 ...

  2. maven 项目编译失败

    tomcat 加载项目启动后 提示  找不到web-context配置 或者某一个类加载错误 发生在 从根目录新导入新的 未打开项目之后 install 失败  java 文件未编译成 class 解 ...

  3. Android Studio 使用本地gradle配置详解

    由于国内墙的原因,我们的Gradle无法使用 但是我们可以通过去下载我们想要的Gradle版本 然后再AndoidStudio内去配置本地的版本 进而去实现了Gradle的配置 注意一: so我们按照 ...

  4. simple shell

    NOW = $(data + "%Y-%m-%d-%H-%M-%S") DIR = /export/backup function exportData(){ exportCmd ...

  5. openLDAP环境搭建

    OpenLDAP搭建   PS:本次实验是基于centos7,OpenLDAP使用2.4.44版本. 一.初始化环境 1.初始化环境 命令如下: ntpdate -u ntp.api.bz & ...

  6. STL 小白学习(5) stack栈

    #include <iostream> #include <stack> //stack 不遍历 不支持随机访问 必须pop出去 才能进行访问 using namespace ...

  7. webassembly

    为什么需要 WebAssembly 自从 JavaScript 诞生起到现在已经变成最流行的编程语言,这背后正是 Web 的发展所推动的.Web 应用变得更多更复杂,但这也渐渐暴露出了 JavaScr ...

  8. 注册Activity

    <activity android:name=".类名"                               android:label="@string/ ...

  9. Centos7安装xenserver tools

    mount /dev/cdrom /mnt [root@192 ~]# mount /dev/cdrom /mntmount: /dev/sr0 写保护,将以只读方式挂载[root@192 ~]# c ...

  10. 2019-04-10-day029-粘包处理

    内容回顾 osi五层协议 不是真实存在的,只是抽象出来的模型 应用层 传输层 TCP/UDP TCP :全双工,可靠的,面向连接的,速度慢,对数据大小没有限制 建立连接 :三次握手 SYN ACK 断 ...