TPC-H是针对决策支持的基准测试,但官方尚不支持PG,本短文主要讲如何修改代码增加支持。
1、测试过程
网上可以搜到很多如何向PostgreSQL中导入测试数据的帖子,一般都是选Oracle作为数据目标,然后加工数据,手动调整SQL,最后完成测试。因为此类资料甚多,就不在这里啰嗦。
2、数据问题
默认生成的数据末尾带有分隔符(默认 |),PG是不支持的,无法直接导入,因此普遍做法是使用强大的 *nix 工具处理,也有人自己写代码处理。
tpc-h代码挺简单,有兴趣自己读一读,需要帮助的话可以联系我。
#ifdef EOL_HANDLING
if (sep)
#endif /* EOL_HANDLING */
fprintf(target, "%c", SEPARATOR);
当打开预处理符“EOL_HANDLING”时,不会在行尾输出分割符。粗暴点把这里两行 "#" 全部去掉也是可以的,至少目的达到了。
在 config.h 的注释中有关于预处理符的说明,包括:EOL_HANDLING。
3、PG支持
在 makefile.suite 中
CFLAGS= ... -D$(MACHINE) -D$(DATABASE) -D$(WORKLOAD) ...
也会清晰看到在编译过程中根据设置出现的日志:
... -DLINUX -DORACLE -DTPCH ...
既然我们选择用Oracle生成数据,也就可以在代码中参考生成PG的设置代码:
#ifdef POSTGRESQL
#define GEN_QUERY_PLAN ""
#define START_TRAN ""
#define END_TRAN ""
#define SET_OUTPUT ""
#define SET_ROWCOUNT "-- LIMIT %d;\n"
#define SET_DBASE ""
#endif
就是在 tpch.h 中复制一份,几乎什么都不需要设置。SET_ROWCOUNT影响语句的生成,暂时这样修改跳过。
在 config.h 中开启 EOL_HANDLING:
#ifdef POSTGRESQL
#define EOL_HANDLING
#endif /* POSTGRESQL */
这是一个很简单的工具,修改代码也很简单,想完整支持并且使用更加方便,还需要继续改下去。
代码提交在:
https://gitee.com/duguanshan/tpc-h
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




