暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

PostgreSQL配置TPC-H测试环境

原创 yBmZlQzJ 2022-12-25
1306

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论