tpc ds mysql_TPC-DS 数据仓库查询性能测试
最近,需要导入大量的测试数据来评估下某个产品复杂查询SQL性能是否能满足需要,然后,领导大致提了下TPC,找到了TPC-DS工具,创造数据,利用SQL查询模板查询.
一、安装TPC-DS工具
1、下载工具
下载地址:http://www.tpc.org/tpc_documents_current_versions/download_programs/tools-download-request.asp?bm_type=TPC-DS&bm_vers=2..0&mode=CURRENT-ONLY
注意:必须输入邮箱,他会发下载地址到邮箱中,点击下载地址即可下载。
2、解压编译工具
1)解压
执行命令:unzip tpc-ds-tool.zip
2)进入tools目录编译
执行命令:make
以上TPC-DS测试环境就在准备好了
二、创建TPC-DS测试需要用到的表
1、准备好创建表语句
TPC-DS已经提前准备好了创建表相关的SQL文件
文件位于:tools目录下,具体文件如下:
tpcds.sql 创建25张表的sql语句
tpcds_ri.sql 创建表与表之间关系的sql语句
tpcds_source.sql
2、创建相应的数据库和表,运行sql脚本
SQL> conn marvin/marvin;
Connected.
SQL> @tpcds.sql
dv_create_time time ,
*
ERROR at line 5:
ORA-00902: invalid datatype
修改表dbgen_version字段dv_create_time 类型为timestamp,再次手动创建
SQL> create table dbgen_version
2 (
3 dv_version varchar(16) ,
dv_create_date date ,
4 5 dv_create_time timestamp ,
6 dv_cmdline_args varchar(200)
7 );
Table created.
SQL>tpcds_ri.sql
SQL>tpcds_source.sql
三、生成数据并将数据导入到相应的表中https://www.cndba.cn/Marvinn/article/2733https://www.cndba.cn/Marvinn/article/2733
1、数据工具
dsdgen 生成数据
-dir 生成数据存放目录
-scale 生成数据大小
dsqgen 生成查询语句
-output_dir 输出文件目录
-input 输入文件
-scale 生成数据大小
-dialect 数据库类型
-directory 查询语句模板文件
创建数据存放目录
oracle@rac2:/u01/tpc/v2.8.0rc4>mkdir data
oracle@rac2:/u01/tpc/v2.8.0rc4>pwd
/u01/tpc/v2.8.0rc4
1)命令1:./dsdgen -DIR /u01/tpc/v2.8.0rc4/data/ -SCALE 1 (scale表示产生1G测试数据)
或者
2)命令2:./dsdgen -DIR /u01/tpc/v2.8.0rc4/data/ -SCALE 10 -parallel 4 -child 1 (并行产生1g数据)
2、对生成的数据进行处理(不处理无法导入到表中)因为每一行最后多了一个“|”,需要进一步处理
在/u01/tpc/v2.8.0rc4/data/目录下创建目录handled
命令:mkdir handled
在/u01/tpc/v2.8.0rc4/data/目录下执行如下命令:
处理“|”问题:
for i in `ls *.dat`
do
name="handled/$i"
echo $name
`touch $name`
`chmod 777 $name`
sed 's/|$//' $i >> $name;
done
3、导入处理过后的数据到数据表中(handle目录下的数据)
Oracel用sqlldr工具导入,由于sqlldr工具数据类型是CHAR类型,不能直接写NUMBER之类的,所以需要进行转换,CHAR跟VARCHAR2不转都字符型,但是写VARCHAR2会报错(如下所示:只写一个表示例,
TO_NUMBER内不可以指定格式TO_NUMBER(:CC_CALL_CENTER_SK,'999,999,999'),否则会报错
Record 45: Rejected - Error on table MARVIN.CATALOG_RETURNS, column CR_RETURNED_DATE_SK.
ORA-01722: invalid number
)
load data
infile 'call_center_1_2.dat' --访问的导入文件
into table marvin.call_center --这里可以指定scheme 如marvin.call_center 否则导入就只能用表所属用户导入,指定schema后可用system用户
FIELDS TERMINATED BY '|' --字段分隔符
trailing nullcols --表示支持导入空值
(
CC_CALL_CENTER_SK CHAR "TO_NUMBER(:CC_CALL_CENTER_SK)",
CC_CALL_CENTER_ID CHAR ,
CC_REC_START_DATE DATE "YYYY-MM-DD HH24:MI:SS",
CC_REC_END_DATE DATE "YYYY-MM-DD HH24:MI:SS",
CC_CLOSED_DATE_SK CHAR "TO_NUMBER(:CC_CLOSED_DATE_SK)",
CC_OPEN_DATE_SK CHAR "TO_NUMBER(:CC_OPEN_DATE_SK)",
CC_NAME CHAR,
CC_CLASS CHAR ,
CC_EMPLOYEES CHAR "TO_NUMBER(:CC_EMPLOYEES)",
CC_SQ_FT CHAR "TO_NUMBER(:CC_SQ_FT)" ,
CC_HOURS CHAR,
CC_MANAGER CHAR,
CC_MKT_ID CHAR "TO_NUMBER(:CC_MKT_ID)" ,
CC_MKT_CLASS CHAR,
CC_MKT_DESC CHAR,
CC_MARKET_MANAGER CHAR,
CC_DIVISION CHAR "TO_NUMBER(:CC_DIVISION)",
CC_DIVISION_NAME CHAR,
CC_COMPANY CHAR "TO_NUMBER(:CC_COMPANY)",
CC_COMPANY_NAME CHAR,
CC_STREET_NUMBER CHAR,
CC_STREET_NAME CHAR,
CC_STREET_TYPE CHAR,
CC_SUITE_NUMBER CHAR,
CC_CITY CHAR,
CC_COUNTY CHAR,
CC_STATE CHAR,
CC_ZIP CHAR,
CC_COUNTRY CHAR,
CC_GMT_OFFSET CHAR "TO_NUMBER(:CC_GMT_OFFSET)",
CC_TAX_PERCENTAGE CHAR "TO_NUMBER(:CC_GMT_OFFSET)"
)
执行导入:
oracle@rac2:/u01/tpc/v2.8.0rc4/data/handled>sqlldr system/yunq111@orcl control=result.ctl log=/u01/tpc/v2.8.0rc4/data/handled/result.log
对比数据文件中得数据行数,查看导入日志,导入行数
6 Rows successfully loaded.
0 Rows not loaded due to data errors.
0 Rows not loaded because all WHEN clauses were failed.
0 Rows not loaded because all fields were null.
验证数据导入:
SQL>SELECT COUNT(*) FROM MARVIN.CALL_CENTER;
COUNT(*)
----------
6
切换到query_templates目录下
oracle@rac2:/u01/tpc/v2.8.0rc4/query_templates>pwd
/u01/tpc/v2.8.0rc4/query_templates
新增编辑update_query.sh脚本,修改query_template下query1-99模板,在行尾加define _END = "",否则执行生成命令会出错;
vi update_query.sh
for i in `ls /u01/tpc/v2.8.0rc4/query_templates/query*`;
do
echo "define _END= /"/";" >> $i
done
oracle@rac2:/u01/tpc/v2.8.0rc4/query_templates>sh update_query.sh
切换到tools目录下执行
oracle@rac2:/u01/tpc/v2.8.0rc4/query_templates>mkdir -p /u01/tpc/v2.8.0rc4/sql
oracle@rac2:/u01/tpc/v2.8.0rc4/tools>./dsqgen -output_dir /u01/tpc/v2.8.0rc4/sql -input /u01/tpc/v2.8.0rc4/query_templates/templates.lst -scale 1 -dialect netezza -directory /u01/tpc/v2.8.0rc4/query_templates
验证查看SQL目录是否生成QUERY 脚本
oracle@rac2:/u01/tpc/v2.8.0rc4/sql>ls
query_0.sql
使用vi 打开query0.sql 里面有99个用于SQL查询的脚本,但是这是需要注意的是,生成的SQL查询脚本中有一个 limit 参数,这个对 于MYSQL数据库可以使用,但是ORACLE数据库无法使用,需要手动替换成 rownum 参数 或者直接把 limit 参数去掉
vi 模式下发现 都多limit 100,
可直接:1,$s/limit 100//g 删除limit 100,其他不变动即可
最后,可以通过复制SQL语句,用于SQL查询.......
另外...生成查询语句(放到了/u01/tpc/v2.8.0rc4/sql下,可以自己指定输出目录)
最后附上,生成数据的其他处理:
处理空值问题:(将控制替换成NULL)--当前ORACLE未执行该项,可忽略
for i in ls *.dat
do
name="sql/$i"
sed 's/^//NULL|/g;s/|||/|/NULL|/NULL|/g;s/||/|/NULL|/g;s/||/|/NULL|/g;s/||/|/NULL|/g;' i > name;
done
版权声明:本文为博主原创文章,未经博主允许不得转载。
tpc ds mysql_TPC-DS 数据仓库查询性能测试相关推荐
- Exadata上的分页查询性能测试
Exadata上的分页查询性能测试,Exadata上的SMART SCAN STORAGE FULL FIRST ROWS对于没有索引情况下的分页查询可以而节约大量处理时间: SQL> cr ...
- [论文笔记]使用GPU处理数据仓库查询之“阴”和“阳”
The Yin and Yang of Processing Data Warehousing Queries on GPU Devices 研究背景 在数据库领域,使用GPU进行查询加速已经被人 ...
- php中的DS,PHP Ds\Set reverse()用法及代码示例
PHP中Ds \ Set类的Ds \ Set::reverse()函数是一个内置函数,用于反转Set实例中存在的元素的顺序.此功能使原位设置反向.也就是说,它不使用任何额外的空间,并使用相反的值更新原 ...
- mysql查询性能测试工具_性能测试之数据库监控分析工具PMM
PMM(Percona Monitoring and Management) 是一个用于管理和监控数据库性能的开源平台. . 它能提供全面的基于时间和各类监控指标.计数器的分析. 性能测试中,是做数据 ...
- mysql查询性能测试工具_MySQL性能测试工具MySQLslap使用实例详解
原标题:MySQL性能测试工具MySQLslap使用实例详解 MySQLslap是MySQL(了解干货请戳:干货!超过500行的Mysql学习笔记)自带的基准测试工具,优点:查询数据,语法简单,灵活容 ...
- MongoDB与MySQL的插入、查询性能测试
转载自:http://blog.csdn.net/clh604/article/details/19608869 1.1 MongoDB的简单介绍 在当今的数据库市场上,MySQL无疑是占有一席之地 ...
- mysql json数据格式的查询性能测试
环境准备 数据库环境:mysql 5.7.20 数据准备: 1 . test_json表,存储10万行数据,每行数据的json列值为10个元素的json数组 test_varchar_index表,存 ...
- mysql批量一次查询和多次查询性能测试对比
1.假设表 test_a 商品表 有1000个商品 CREATE TABLE `test_a` (`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT CO ...
- mongodb 百万_1亿条记录的MongoDB数据库随机查询性能测试
mongdb性能压力测试,随机查询,数据量1亿条记录 操作系统centos6.4x64位 从测试结果看,当mongodb将数据全部载入到内存后,查询速度根据文档的大小,性能瓶颈通常会是在网络流量和CP ...
最新文章
- Source Insight 基本使用(1)-使用Source Insight查看Android Framework 源码
- 设计模式 -结构型模式_ 装饰者模式Decorator Pattern 在开源软件中的应用
- 面试题整理19 矩阵Z字形扫描
- Python 安装 uWSGI并运行一个入门示例
- MySQL 中 delete 语句的子查询限制
- html5画电池状态,HTML5的一个显示电池状态的API简介
- JavaScript面向对象--继承 (超简单易懂,小白专属)...
- 设备上的介质簇的结构不正确_环保设备选型参考系列——生化系统之潜水搅拌机【价格】...
- HDU 5976 2016ICPC大连 F: Detachment(找规律)
- poj 2777 Count Color 基础线段树,带给的初学者噩梦!!!
- 王道计算机网络学习笔记
- 漫威 DC 英雄综合实力排位,这人秒杀灭霸
- 欣欣向荣的Ruby家族
- 一个月刷完机器学习笔试题300题(10)
- python求和函数详解_python的sum求和函数详解
- 详解border-radius属性
- 打印爱心(C语言vs2012)
- Android中使用x5内核加载网页的实现
- 倒梁法matlab,柱下条形基础等基础工程.ppt
- 第十七章 使用系统监视器 - 使用 ^%SYSMONMGR 实用程序
热门文章
- AirFlow的Scheduling的start_date解释
- Android截取人物头像,Android 图片截取人物头像(仿逗拍)
- 【css滤镜】高级属性filter
- H5首屏图片加载优化
- [4G5G专题-114]:部署 - LTE PRACH前导码格式、ZC序列的生成规则与规划
- 国家数据字典mysql_数据字典 · MySQL DBA · 看云
- 《数字图像处理》冈萨雷斯版 读书笔记(二)
- 【58沈剑架构系列】一分钟了解负载均衡的一切
- Error running 'XXX': Cannot start process, the working directory 'F:\JavaSe\JavaSe' does not exis
- windows下同一个显卡配置多个CUDA工具包以及它们之间的切换