最近,需要导入大量的测试数据来评估下某个产品复杂查询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 数据仓库查询性能测试相关推荐

  1. Exadata上的分页查询性能测试

    Exadata上的分页查询性能测试,Exadata上的SMART SCAN STORAGE FULL FIRST ROWS对于没有索引情况下的分页查询可以而节约大量处理时间:   SQL> cr ...

  2. [论文笔记]使用GPU处理数据仓库查询之“阴”和“阳”

    The Yin and Yang of Processing Data Warehousing Queries on GPU Devices 研究背景   在数据库领域,使用GPU进行查询加速已经被人 ...

  3. php中的DS,PHP Ds\Set reverse()用法及代码示例

    PHP中Ds \ Set类的Ds \ Set::reverse()函数是一个内置函数,用于反转Set实例中存在的元素的顺序.此功能使原位设置反向.也就是说,它不使用任何额外的空间,并使用相反的值更新原 ...

  4. mysql查询性能测试工具_性能测试之数据库监控分析工具PMM

    PMM(Percona Monitoring and Management) 是一个用于管理和监控数据库性能的开源平台. . 它能提供全面的基于时间和各类监控指标.计数器的分析. 性能测试中,是做数据 ...

  5. mysql查询性能测试工具_MySQL性能测试工具MySQLslap使用实例详解

    原标题:MySQL性能测试工具MySQLslap使用实例详解 MySQLslap是MySQL(了解干货请戳:干货!超过500行的Mysql学习笔记)自带的基准测试工具,优点:查询数据,语法简单,灵活容 ...

  6. MongoDB与MySQL的插入、查询性能测试

    转载自:http://blog.csdn.net/clh604/article/details/19608869 1.1  MongoDB的简单介绍 在当今的数据库市场上,MySQL无疑是占有一席之地 ...

  7. mysql json数据格式的查询性能测试

    环境准备 数据库环境:mysql 5.7.20 数据准备: 1 . test_json表,存储10万行数据,每行数据的json列值为10个元素的json数组 test_varchar_index表,存 ...

  8. mysql批量一次查询和多次查询性能测试对比

    1.假设表 test_a 商品表 有1000个商品 CREATE TABLE `test_a` (`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT CO ...

  9. mongodb 百万_1亿条记录的MongoDB数据库随机查询性能测试

    mongdb性能压力测试,随机查询,数据量1亿条记录 操作系统centos6.4x64位 从测试结果看,当mongodb将数据全部载入到内存后,查询速度根据文档的大小,性能瓶颈通常会是在网络流量和CP ...

最新文章

  1. Source Insight 基本使用(1)-使用Source Insight查看Android Framework 源码
  2. 设计模式 -结构型模式_ 装饰者模式Decorator Pattern 在开源软件中的应用
  3. 面试题整理19 矩阵Z字形扫描
  4. Python 安装 uWSGI并运行一个入门示例
  5. MySQL 中 delete 语句的子查询限制
  6. html5画电池状态,HTML5的一个显示电池状态的API简介
  7. JavaScript面向对象--继承 (超简单易懂,小白专属)...
  8. 设备上的介质簇的结构不正确_环保设备选型参考系列——生化系统之潜水搅拌机【价格】...
  9. HDU 5976 2016ICPC大连 F: Detachment(找规律)
  10. poj 2777 Count Color 基础线段树,带给的初学者噩梦!!!
  11. 王道计算机网络学习笔记
  12. 漫威 DC 英雄综合实力排位,这人秒杀灭霸
  13. 欣欣向荣的Ruby家族
  14. 一个月刷完机器学习笔试题300题(10)
  15. python求和函数详解_python的sum求和函数详解
  16. 详解border-radius属性
  17. 打印爱心(C语言vs2012)
  18. Android中使用x5内核加载网页的实现
  19. 倒梁法matlab,柱下条形基础等基础工程.ppt
  20. 第十七章 使用系统监视器 - 使用 ^%SYSMONMGR 实用程序

热门文章

  1. AirFlow的Scheduling的start_date解释
  2. Android截取人物头像,Android 图片截取人物头像(仿逗拍)
  3. 【css滤镜】高级属性filter
  4. H5首屏图片加载优化
  5. [4G5G专题-114]:部署 - LTE PRACH前导码格式、ZC序列的生成规则与规划
  6. 国家数据字典mysql_数据字典 · MySQL DBA · 看云
  7. 《数字图像处理》冈萨雷斯版 读书笔记(二)
  8. 【58沈剑架构系列】一分钟了解负载均衡的一切
  9. Error running 'XXX': Cannot start process, the working directory 'F:\JavaSe\JavaSe' does not exis
  10. windows下同一个显卡配置多个CUDA工具包以及它们之间的切换