TPC-H Refresh Function 规范分析

当数据库达到一定的成熟度,向大客户推广时,必定会被要求跑 TPC-H,特别是当你标称为 HTAP 数据库时。

跑 TPC-H 就需要对 TPC-H 的一些基本要求有一个大致了解,最核心的两组概念是:

  • Query:Power Run, ThroughPut Run
  • Modify: RF1, RF2

本文基于 TPC-H 规范文档,并结合 dbgen 实验结果来介绍 RF1、RF2 的核心知识点。

基本概念

query 以及 refresh function 的概念定义如下:
5.1.2

power test、throughput test 的概念如下:
在这里插入图片描述

刷新比例

2.5.1
每一轮 Refresh Function,需要更新 ORDERS、LINEITEM 表 0.1% 的行。也就是说,对于 SF=100 的情况需要更新 600,000,000/1000 = 60w 行(SF与行数关系参考我的这篇文章

事务要求

2.5.2
每一轮 Refresh Function 中涉及到的事务个数不作任何限制,也就是说,可以所有数据在一个事务里里更新完,也可以每一组数据对应一个小事务。总体原则是:
要满足业务层的一致性。从 ORDER 表里删除一个订单时, LINEITEM 中对应的数据也要在一个事务里删掉。

所以,这就对我们提出了一个挑战:通过外部工具直接更新 LINEITEM、ORDER 表,就要求外部工具满足这个事务特性。像 LOAD DATA 这种工具就无法完成这个任务,它无法保证事务性。

Refresh Function 实现

2.5.3
可以使用任何语言,包括 SQL,Python 脚本等等。

Refresh Function 1

在这里插入图片描述在这里插入图片描述
Refresh Function 1 实现的功能是向系统中新增订单。每个订单向 ORDERS 表中插入一行,同时向 LINEITEM 表插入 1 到 7 行,表示每个订单包含 1 到 7 种商品。

但是 RF1 并不要求用户真的实现这样一个 LOOP。一次性把要插入的数据准备好后一次性 LOAD 到系统中,也是允许的。这里的例子只是说明插入的数据需要遵循什么样的数据规范。

Refresh Function 2

2.7
Refresh Function 负责模拟删除订单。从 dbgen 的生成结果看,它只生成了 delete.1 这个文件,这个文件里的每一行会用于删除 ORDERS 表和 LINEITEMS 表。所以一般要求在 L_ORDERKEY 上建立索引,不然性能惨不忍睹。

DBGen

要插入的数据必须通过 dbgen 来生成,举个例子:

./dbgen -s 100 -U 1 -S 1

输出如下:

[raywill@>/tpch/gen_data/test]
$ll
total 93008
-rwxr-xr-x 1 raywill users   111862 May  6 16:22 dbgen
-rwxr-xr-x 1 raywill users    11815 May  6 12:01 dists.dss
-rw-r--r-- 1 raywill users 77773330 May  6 16:22 lineitem.tbl.u1
-rw-r--r-- 1 raywill users 17334921 May  6 16:22 orders.tbl.u1

[raywill@>/tpch/gen_data/test]
$./dbgen -s 100 -U 1 -v
TPC-H Population Generator (Version 2.17.0)
Copyright Transaction Processing Performance Council 1994 - 2010
Generating update pair #1 for orders/lineitem tables/
Preloading text ... 100%
done.

[raywill@>/tpch/gen_data/test]
$ll
total 94156
-rwxr-xr-x 1 raywill users   111862 May  6 16:22 dbgen
-rw-r--r-- 1 raywill users  1172209 May  6 16:23 delete.1
-rwxr-xr-x 1 raywill users    11815 May  6 12:01 dists.dss
-rw-r--r-- 1 raywill users 77773330 May  6 16:23 lineitem.tbl.u1
-rw-r--r-- 1 raywill users 17334921 May  6 16:23 orders.tbl.u1

[raywill@>/tpch/gen_data/test]
$wc -l delete.1 orders.tbl.u1 lineitem.tbl.u1 
  150000 delete.1
  150000 orders.tbl.u1
  599976 lineitem.tbl.u1
  899976 total

如果希望生成多个文件,修改 -U 参数即可,例如:

[raywill@>/tpch/gen_data/test]
$./dbgen -s 100 -U 3 -v
TPC-H Population Generator (Version 2.17.0)
Copyright Transaction Processing Performance Council 1994 - 2010
Generating update pair #1 for orders/lineitem tables/
Preloading text ... 100%
done.
Generating update pair #2 for orders/lineitem tablesdone.
Generating update pair #3 for orders/lineitem tablesdone.

[raywill@>/tpch/gen_data/test]
$ll
total 283752
-rwxr-xr-x 1 raywill users   111862 May  6 16:22 dbgen
-rw-r--r-- 1 raywill users  1172209 May  6 16:32 delete.1
-rw-r--r-- 1 raywill users  1250001 May  6 16:32 delete.2
-rw-r--r-- 1 raywill users  1350000 May  6 16:32 delete.3
-rwxr-xr-x 1 raywill users    11815 May  6 12:01 dists.dss
-rw-r--r-- 1 raywill users 77773330 May  6 16:32 lineitem.tbl.u1
-rw-r--r-- 1 raywill users 78038149 May  6 16:32 lineitem.tbl.u2
-rw-r--r-- 1 raywill users 78567787 May  6 16:32 lineitem.tbl.u3
-rw-r--r-- 1 raywill users 17334921 May  6 16:32 orders.tbl.u1
-rw-r--r-- 1 raywill users 17410558 May  6 16:32 orders.tbl.u2
-rw-r--r-- 1 raywill users 17517475 May  6 16:32 orders.tbl.u3

[raywill@>/tpch/gen_data/test]
$wc -l delete.* lineitem.* lineitem.*
   150000 delete.1
   150000 delete.2
   150000 delete.3
   599976 lineitem.tbl.u1
   599805 lineitem.tbl.u2
   600680 lineitem.tbl.u3
   599976 lineitem.tbl.u1
   599805 lineitem.tbl.u2
   600680 lineitem.tbl.u3

Power Test 规范

在这里插入图片描述
一轮 power test 首先要执行一次 RF 1 新增订单,然后做查询,然后执行一次 RF2 删除一批订单。

总结

关于 Refresh Function,了解到这么多,基本就有一个大体概念。总结一下,要点包括:

  • 更新的表
  • 更新的行数
  • 事务要求
  • 更新的模式,即 RF1负责新增,RF2负责删除

附录

规范文档

http://www.tpc.org/tpc_documents_current_versions/pdf/tpc-h_v2.17.1.pdf

缩写

system under test (SUT)
scale factor (SF)

contact

如果你对这部分内容感兴趣,欢迎微信联系:hustos

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章