一、 目标
TPCH是由TPC(Transaction Processing Performance Council)事务处理性能委员会公布的一套针对数据库决策支持能力的测试基准,通过模拟数据库中与业务相关的复杂查询考察数据库的综合处理能力,获取数据库操作的响应时间。
TPCH基准模型中定义了一个数据库模型,容量可以在1GB~10000GB的8个级别中进行选择。数据库模型包括CUSTOMER、LINEITEM、NATION、ORDERS、PART、PARTSUPP、REGION和SUPPLIER 共8张数据表,以及22条SQL查询语句,涉及内容广泛丰富,可以较完整地测试数据库的运算性能。
TPCH的SQL中不乏一些多层嵌套的复杂查询,执行性能较差。对于这些查询,如果能采用更合理的存储方案,设计低复杂度算法并配合并行等手段,将获得更优的性能。但遗憾的是,由于理论体系的限制,很多想法无法用SQL实现,而SQL程序员也因此不关注这些性能优化方法,经常只能忍受数据库的低速运算。
本系列文章将通过这8张表及22条SQL讨论数据运算时的性能优化技巧,仔细分析每一条语句,发现其运算和数据特征,设计更合理的算法加以实现。由于SQL难以实现这些算法和存储结构,我们将使用集算器组表来存储数据,并用SPL实现这些算法,同时与Oracle上的SQL对比性能。希望读者能够通过这些内容学会各种情况下适用的高性能计算技术。
二、 环境
CPU:2颗Intel3014,主频1.7G,每个CPU内核数6个。
硬盘(SSD):1T 561MB/s(读) 523MB/s(写) 接口:SATA 6.0Gb/s
内存:64G。
操作系统:Linux CentOS 7
三、 数据准备
为了回避硬盘读取数据能力的差异,我们将Oracle数据表的数据和SPL组表文件均存储在同一块SSD固态硬盘上。
1. TPCH原始数据生成
利用TPCH官方工具生成8张表的原始数据,数据量总规模100G,各文件大小见后表。
2. 数据导入Oracle
数据导入Oracle比较简单,在Oracle数据库中创建一个数据库名为tpch,运行TPCH工具生成的dss.ddl和dss.ri文件来创建8张数据表以及表的主键、外键关系。然后运行ctl文件将原始数据分别导入各表中。例如导入lineitem表数据的ctl文件如下:
LOAD DATA INFILE '/home/tpch_2_17_0/tbls/lineitem.tbl'
INTO TABLE LINEITEM
(L_ORDERKEY terminated by '|',
L_PARTKEY terminated by '|',
L_SUPPKEY terminated by '|',
L_LINENUMBER terminated by '|&