无法设法使 Star-Schema DBMS 基准数据生成器正确 运行
Can't manage to get the Star-Schema DBMS benchmark data generator to run properly
一种常用的 (?) DBMS 基准测试称为 SSB,即 Star-Schema Benchmark。要 运行 它,您需要生成您的架构,即您的 table 中包含数据。好吧,您可以在各种地方找到一个生成器程序(github):
- https://github.com/rxin/ssb-dbgen
- https://code.google.com/p/gpudb/source/checkout(然后在tests/ssb/dbgen下什么的)
- https://github.com/electrum/ssb-dbgen/
可能还有其他地方。我不确定它们都有完全相同的代码,但我似乎遇到了同样的问题。我正在使用 Linux 64 位系统(如果有帮助,则为 Kubuntu 14.04);并且正在尝试从该包构建和 运行 `dbgen' 程序。
构建时,我收到 type/size-related 警告:
me@myhost:~/src/ssb-dbgen$ make
... etc. etc. ...
gcc -O -DDBNAME=\"dss\" -DLINUX -DDB2 -DSSBM -c -o varsub.o varsub.c
rnd.c: In function גrow_stopג:
rnd.c:60:6: warning: format ג%dג expects argument of type גintג, but argument 4 has type גlong intג [-Wformat=]
i, Seed[i].usage);
^
driver.c: In function גpartialג:
driver.c:606:4: warning: format ג%dג expects argument of type גintג, but argument 4 has type גlong intג [-Wformat=]
... etc. etc. ...
然后,我确保所有正确的文件都已到位,尝试生成我的 tables,但只得到其中两个!我尝试显式生成 LINEORDER table,但出现奇怪的失败:
eyal@vivaldi:~/src/ssb-dbgen$ ls
bcd2.c build.c driver.c HISTORY makefile_win print.c rnd.c speed_seed.o varsub.c
bcd2.h build.o driver.o history.html mkf.macos print.o rnd.h ssb-dbgen-master varsub.o
bcd2.o CHANGES dss.ddl load_stub.c permute.c qgen rnd.o text.c
bm_utils.c config.h dss.h load_stub.o permute.h qgen.c rxin-ssb-dbgen-master.zip text.o
bm_utils.o dbgen dss.ri Makefile permute.o qgen.o shared.h tpcd.h
BUGS dists.dss dsstypes.h makefile.suite PORTING.NOTES README speed_seed.c TPCH_README
me@myhost:~/src/ssb-dbgen$ ./dbgen -vfF -s 1
SSBM (Star Schema Benchmark) Population Generator (Version 1.0.0)
Copyright Transaction Processing Performance Council 1994 - 2000
Generating data for suppliers table [pid: 32303]done.
Generating data for customers table [pid: 32303]done.
Generating data for (null) [pid: 32303]done.
Generating data for (null) [pid: 32303]done.
Generating data for (null) [pid: 32303]done.
Generating data for (null) [pid: 32303]done.
me@myhost:~/src/ssb-dbgen$ ls *.tbl
customer.tbl supplier.tbl
me@myhost:~/src/ssb-dbgen$ ./dbgen -vfF -s 1 -T l
SSBM (Star Schema Benchmark) Population Generator (Version 1.0.0)
Copyright Transaction Processing Performance Council 1994 - 2000
Generating data for lineorder table [pid: 32305]*** buffer overflow detected ***: ./dbgen terminated
======= Backtrace: =========
... etc. etc. ...
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7fcea1b79ec5]
./dbgen[0x401219]
======= Memory map: ========
... etc. etc. ...
现在,如果我切换到 32 位 Linux 系统,我不会收到任何这些警告(尽管有两个关于指针到非指针转换的警告);但是 运行ning 生成再次只产生两个 tables。现在,可以生成其他单独的 tables - 但它们根本不对应,我认为...
有没有人遇到过类似的问题?难道我做错了什么?我是不是用错了来源?
(这几乎是一个骗局
SSB dbgen Linux - Segmentation Fault
... 但我不能 "take over" 别人的问题,因为他们可能遇到了我以外的其他问题。另外,那个没有答案...)
我找到了解决方法,但您需要 Windows 系统。
下载并解压这个包:
https://github.com/LucidDB/thirdparty/blob/master/ssb.tar.bz2
在 bin 目录中是 dbgen.exe。 运行 它来自 windows 控制台,如 f.g.:
...\bin\dbgen.exe -s 1 -T a
之后只需将创建的文件复制到您的 Linux 系统。不是最好的方法,但有效:)
如果有人仍然鼓励这个问题,我在这里找到了解决方案:https://github.com/electrum/ssb-dbgen/pull/1
具体来说就是要修改shared.h
和config.h
这两个文件
此致。
编辑:更改:
#ifdef SSBM
#define MAXAGG_LEN 10 /* max component length for a agg str */
至:
#ifdef SSBM
#define MAXAGG_LEN 20 /* max component length for a agg str */
所以,最终,我在 GitHub 上调查了 all 个版本的 ssb-dbgen,并创建了一个 unified存储库:
https://github.com/eyalroz/ssb-dbgen/
此存储库:
- 包含 fixes for all bugs fixed in any of those versions, and a few others. In particular, the format mismatch due to different
int
sizes on Linux and Windows for 64-bit machines is resolved.
- 将构建切换为使用 CMake,而不是需要手动编辑
Makefile
s。具体来说,支持在 Windows 和 MacOS 上构建。理论上支持在更奇特的系统上构建。
- 已 CI 构建提交测试以确保至少构建不会损坏。
一种常用的 (?) DBMS 基准测试称为 SSB,即 Star-Schema Benchmark。要 运行 它,您需要生成您的架构,即您的 table 中包含数据。好吧,您可以在各种地方找到一个生成器程序(github):
- https://github.com/rxin/ssb-dbgen
- https://code.google.com/p/gpudb/source/checkout(然后在tests/ssb/dbgen下什么的)
- https://github.com/electrum/ssb-dbgen/
可能还有其他地方。我不确定它们都有完全相同的代码,但我似乎遇到了同样的问题。我正在使用 Linux 64 位系统(如果有帮助,则为 Kubuntu 14.04);并且正在尝试从该包构建和 运行 `dbgen' 程序。
构建时,我收到 type/size-related 警告:
me@myhost:~/src/ssb-dbgen$ make
... etc. etc. ...
gcc -O -DDBNAME=\"dss\" -DLINUX -DDB2 -DSSBM -c -o varsub.o varsub.c
rnd.c: In function גrow_stopג:
rnd.c:60:6: warning: format ג%dג expects argument of type גintג, but argument 4 has type גlong intג [-Wformat=]
i, Seed[i].usage);
^
driver.c: In function גpartialג:
driver.c:606:4: warning: format ג%dג expects argument of type גintג, but argument 4 has type גlong intג [-Wformat=]
... etc. etc. ...
然后,我确保所有正确的文件都已到位,尝试生成我的 tables,但只得到其中两个!我尝试显式生成 LINEORDER table,但出现奇怪的失败:
eyal@vivaldi:~/src/ssb-dbgen$ ls
bcd2.c build.c driver.c HISTORY makefile_win print.c rnd.c speed_seed.o varsub.c
bcd2.h build.o driver.o history.html mkf.macos print.o rnd.h ssb-dbgen-master varsub.o
bcd2.o CHANGES dss.ddl load_stub.c permute.c qgen rnd.o text.c
bm_utils.c config.h dss.h load_stub.o permute.h qgen.c rxin-ssb-dbgen-master.zip text.o
bm_utils.o dbgen dss.ri Makefile permute.o qgen.o shared.h tpcd.h
BUGS dists.dss dsstypes.h makefile.suite PORTING.NOTES README speed_seed.c TPCH_README
me@myhost:~/src/ssb-dbgen$ ./dbgen -vfF -s 1
SSBM (Star Schema Benchmark) Population Generator (Version 1.0.0)
Copyright Transaction Processing Performance Council 1994 - 2000
Generating data for suppliers table [pid: 32303]done.
Generating data for customers table [pid: 32303]done.
Generating data for (null) [pid: 32303]done.
Generating data for (null) [pid: 32303]done.
Generating data for (null) [pid: 32303]done.
Generating data for (null) [pid: 32303]done.
me@myhost:~/src/ssb-dbgen$ ls *.tbl
customer.tbl supplier.tbl
me@myhost:~/src/ssb-dbgen$ ./dbgen -vfF -s 1 -T l
SSBM (Star Schema Benchmark) Population Generator (Version 1.0.0)
Copyright Transaction Processing Performance Council 1994 - 2000
Generating data for lineorder table [pid: 32305]*** buffer overflow detected ***: ./dbgen terminated
======= Backtrace: =========
... etc. etc. ...
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7fcea1b79ec5]
./dbgen[0x401219]
======= Memory map: ========
... etc. etc. ...
现在,如果我切换到 32 位 Linux 系统,我不会收到任何这些警告(尽管有两个关于指针到非指针转换的警告);但是 运行ning 生成再次只产生两个 tables。现在,可以生成其他单独的 tables - 但它们根本不对应,我认为...
有没有人遇到过类似的问题?难道我做错了什么?我是不是用错了来源?
(这几乎是一个骗局 SSB dbgen Linux - Segmentation Fault ... 但我不能 "take over" 别人的问题,因为他们可能遇到了我以外的其他问题。另外,那个没有答案...)
我找到了解决方法,但您需要 Windows 系统。
下载并解压这个包: https://github.com/LucidDB/thirdparty/blob/master/ssb.tar.bz2
在 bin 目录中是 dbgen.exe。 运行 它来自 windows 控制台,如 f.g.:
...\bin\dbgen.exe -s 1 -T a
之后只需将创建的文件复制到您的 Linux 系统。不是最好的方法,但有效:)
如果有人仍然鼓励这个问题,我在这里找到了解决方案:https://github.com/electrum/ssb-dbgen/pull/1
具体来说就是要修改shared.h
和config.h
此致。
编辑:更改:
#ifdef SSBM
#define MAXAGG_LEN 10 /* max component length for a agg str */
至:
#ifdef SSBM
#define MAXAGG_LEN 20 /* max component length for a agg str */
所以,最终,我在 GitHub 上调查了 all 个版本的 ssb-dbgen,并创建了一个 unified存储库:
https://github.com/eyalroz/ssb-dbgen/
此存储库:
- 包含 fixes for all bugs fixed in any of those versions, and a few others. In particular, the format mismatch due to different
int
sizes on Linux and Windows for 64-bit machines is resolved. - 将构建切换为使用 CMake,而不是需要手动编辑
Makefile
s。具体来说,支持在 Windows 和 MacOS 上构建。理论上支持在更奇特的系统上构建。 - 已 CI 构建提交测试以确保至少构建不会损坏。