无法使星型模式 DBMS 基准数据生成器正常运行

ein*_*ica 1 linux benchmarking rdbms compiler-warnings

常用(?)的 DBMS 基准之一称为 SSB,星型模式基准)。要运行它,您需要生成模式,即包含数据的表。嗯,你可以在各种地方找到一个生成器程序(在 github 上):

\n\n\n\n

也可能在其他地方。我不确定它们都有完全相同的代码,但我似乎遇到了同样的问题。我正在使用 Linux 64 位系统(Kubuntu 14.04,如果有帮助的话);并尝试从该包构建并运行“dbgen\”程序。

\n\n

构建时,我收到与类型/大小相关的警告:

\n\n
me@myhost:~/src/ssb-dbgen$ make\n... etc. etc. ...\ngcc -O -DDBNAME=\\"dss\\" -DLINUX -DDB2 -DSSBM   -c -o varsub.o varsub.c\nrnd.c: In function \xd7\x92row_stop\xd7\x92:\nrnd.c:60:6: warning: format \xd7\x92%d\xd7\x92 expects argument of type \xd7\x92int\xd7\x92, but argument 4 has type \xd7\x92long int\xd7\x92 [-Wformat=]\n      i, Seed[i].usage);\n      ^\ndriver.c: In function \xd7\x92partial\xd7\x92:\ndriver.c:606:4: warning: format \xd7\x92%d\xd7\x92 expects argument of type \xd7\x92int\xd7\x92, but argument 4 has type \xd7\x92long int\xd7\x92 [-Wformat=]\n... etc. etc. ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,我确保所有正确的文件都已就位,尝试生成我的表,但只得到其中两个!我尝试显式生成 LINEORDER 表,但出现了奇怪的失败:

\n\n
eyal@vivaldi:~/src/ssb-dbgen$ ls\nbcd2.c      build.c    driver.c    HISTORY         makefile_win   print.c  rnd.c                      speed_seed.o      varsub.c\nbcd2.h      build.o    driver.o    history.html    mkf.macos      print.o  rnd.h                      ssb-dbgen-master  varsub.o\nbcd2.o      CHANGES    dss.ddl     load_stub.c     permute.c      qgen     rnd.o                      text.c\nbm_utils.c  config.h   dss.h       load_stub.o     permute.h      qgen.c   rxin-ssb-dbgen-master.zip  text.o\nbm_utils.o  dbgen      dss.ri      Makefile        permute.o      qgen.o   shared.h                   tpcd.h\nBUGS        dists.dss  dsstypes.h  makefile.suite  PORTING.NOTES  README   speed_seed.c               TPCH_README\nme@myhost:~/src/ssb-dbgen$ ./dbgen -vfF -s 1\nSSBM (Star Schema Benchmark) Population Generator (Version 1.0.0)\nCopyright Transaction Processing Performance Council 1994 - 2000\nGenerating data for suppliers table [pid: 32303]done.\nGenerating data for customers table [pid: 32303]done.\nGenerating data for (null) [pid: 32303]done.\nGenerating data for (null) [pid: 32303]done.\nGenerating data for (null) [pid: 32303]done.\nGenerating data for (null) [pid: 32303]done.\nme@myhost:~/src/ssb-dbgen$ ls *.tbl\ncustomer.tbl  supplier.tbl\nme@myhost:~/src/ssb-dbgen$ ./dbgen -vfF -s 1 -T l\nSSBM (Star Schema Benchmark) Population Generator (Version 1.0.0)\nCopyright Transaction Processing Performance Council 1994 - 2000\nGenerating data for lineorder table [pid: 32305]*** buffer overflow detected ***: ./dbgen terminated\n======= Backtrace: =========\n... etc. etc. ...\n/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7fcea1b79ec5]\n./dbgen[0x401219]\n======= Memory map: ========\n... etc. etc. ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,如果我切换到 32 位 Linux 系统,我不会收到任何这些警告(尽管有两个关于指针到非指针转换的警告);但再次运行生成只产生两个表。现在,可以生成其他单独的表格 - 但我认为它们根本不相互对应......

\n\n

有人遇到过类似的问题吗?难道我做错了什么?我是否使用了错误的来源?

\n\n

(这几乎是SSB dbgen Linux - Segmentation Failure的一个骗局...但是当其他人可能遇到了我以外的问题时,我无法“接管”他们的问题。另外,那个问题没有答案...)

\n

Ami*_*ukh 5

如果有人仍然鼓励这个问题,我在这里找到了一个解决方案: https: //github.com/electrum/ssb-dbgen/pull/1 具体来说,你必须修改这两个文件shared.hconfig.h

问候。

编辑: 更改:

#ifdef SSBM
#define  MAXAGG_LEN    10    /* max component length for a agg str */
Run Code Online (Sandbox Code Playgroud)

到:

#ifdef SSBM
#define  MAXAGG_LEN    20    /* max component length for a agg str */
Run Code Online (Sandbox Code Playgroud)

  • 外部链接有一天可能会失效。请把主要内容(如何修改两个文件)复制到这里。 (2认同)