SSB基准测试
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基准测试的更多相关文章
- MatrixOne从入门到实践08——SSB性能测试
		MatrixOne从入门到实践--SSB性能测试 SSB 星型模式基准测试是 OLAP 数据库性能测试的常用场景,通过本篇教程,您可以了解到如何在 MatrixOne 中实现 SSB 测试. 测试环境 ... 
- 一篇文章看懂TPCx-BB(大数据基准测试工具)源码
		TPCx-BB是大数据基准测试工具,它通过模拟零售商的30个应用场景,执行30个查询来衡量基于Hadoop的大数据系统的包括硬件和软件的性能.其中一些场景还用到了机器学习算法(聚类.线性回归等).为了 ... 
- JavaScript的基准测试-不服跑个分?
		原文:Bulletproof JavaScript benchmarks 做JavaScript的基准测试并没有想的那么简单.即使不考虑浏览器差异所带来的影响,也有很多难点-或者说陷阱需要面对. 这是 ... 
- mysql benchmark基准测试
		git项目地址: https://github.com/akopytov/sysbench 利用sysbench很容易对mysql做性能基准测试(当然这个工具很强大,除了测试主流数据库性能,还能测试其 ... 
- 掌握 Linux PC 性能之基准测试
		导读 基准测试是一项测试或一系列测试,用来确定某个计算机硬件运行起来的状况有多好:在许多情况下,“基准测试”实际上等同于“压力测试”,通过测试硬件的极限,然后可以将测得的结果与其他硬件测得的结果作一番 ... 
- mysql基准测试
		1. 及注册时有两种主要的策略:①正对整个系统的整体测试(集成式full-stack) ②单独测试mysql(但组件式基准测试single-component) 2.获取系统性能和状态(需要记录的数据 ... 
- [译]使用JMH进行微基准测试:不要猜,要测试!
		英文原文:Micro Benchmarking with JMH: Measure, don't guess!翻译地址:使用JMH进行微基准测试:不要猜,要测试!原文作者:Antonio翻译作者:Ho ... 
- Java监控工具介绍,VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,Java微基准测试
		本文是本人前一段时间做一个简单Java监控工具调研总结,主要包括VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,以及对Java微基准测试的简单介绍, ... 
- Hadoop 基准测试与example
		#pi值示例 hadoop jar /app/cdh23502/share/hadoop/mapreduce2/hadoop-mapreduce-examples--cdh5. #生成数据 第一个参数 ... 
随机推荐
- yii2 adminlte后台搭建
			加载第三方扩展, composer require dmstr/yii2-adminlte-asset "2.*" composer require mdmsoft/yii2-ad ... 
- python学习:数据类型
			python有两种索引方式.一种从左至右,下标从0开始:一种从右至左,下标从-1开始. python有六种数据类型: 不可变数据(四个):Number(数字).String(字符串).Tuple(元组 ... 
- 前端页面调用Spring boot接口发生的跨域问题
			最近要重构一个基于spring boot的后端API服务,需要再本地测试.在本地测试时,运行在本地的前端页面发送一个ajax请求访问后端API,然后浏览器报错blocked CORS policy. ... 
- mongoengine 分页 切片与 skip + limit 的区别
			首先要了解切片与 skip 的原理 切片原理是将 index(索引) 或 cursor(游标)移动到 start 位置再 进行切分: skip原理是跳过start条数据后再获取 1. 单纯的普通分页用 ... 
- 从Excel、CSV文件获取数据
			#region 从Excel获取数据 /// <summary> /// 从Excel获取数据 /// </summary> /// <param name=" ... 
- [lightoj P1151] Snakes and Ladders
			1151 - Snakes and Ladders Time Limit: 2 second(s) Memory Limit: 32 MB 'Snakes and Ladders' or 'Sh ... 
- 20175227张雪莹 2018-2019-2 《Java程序设计》第六周学习总结
			20175227张雪莹 2018-2019-2 <Java程序设计>第六周学习总结 教材学习内容总结 第七章 内部类与异常类 内部类:在一个类中定义另一个类:包含内部类的类为外嵌类 内部类 ... 
- IDEA的十大快捷键
			Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一些有趣的讨论.每个人都有自己的最爱,想排出个理想的榜单还真是困难.以前也整理过Intellij的快捷键,这次就按 ... 
- swift3笔记
			备注:这里只是个人的观点,有的地方也是copy,多多指教,个人笔记,有侵犯你们版权的地方还望海涵!!! 个人觉得swift和OC最大的区别就是增加了许多现代化的东西,java里面的闭包,private ... 
- python接口自动化测试(一)-request模块
			urllib.request模块是python3针对处理url的. 1. 首先导入: from urllib import request 2. 构造url,构造url的headers信息和传参[re ... 
 
			
		