TPCH dbgen数据生成工具在Linux环境下的配置与实战
1. 环境准备从零搭建TPCH测试环境第一次接触TPCH dbgen工具时我花了整整两天时间才搞明白所有依赖关系。这个工具虽然功能强大但官方文档确实不够友好。下面把我踩过的坑都总结出来让你能快速上手。系统要求方面我推荐使用Ubuntu 20.04 LTS或CentOS 7这两个系统我都实测过兼容性最好。内存建议至少4GB因为生成1GB数据时内存占用会飙升到3GB左右。硬盘空间要预留生成数据大小的5倍比如要生成10GB数据最好有50GB空闲空间。安装基础依赖其实有个小技巧——不要一个个装用这个组合命令sudo apt update sudo apt install -y gcc make unzip libmysqlclient-dev libpq-dev如果是CentOS系统把apt换成yum就行。这里特别提醒下libmysqlclient-dev和libpq-dev这两个包容易被忽略但后面编译时会用到。2. 编译调整解决99%的报错问题下载源码包后解压时可能会遇到权限问题。我习惯先建个专门的工作目录mkdir ~/tpch_workspace cd ~/tpch_workspace unzip -o ~/Downloads/tpc-h-tool.zip关键修改点在makefile.suite里建议用nano或vim打开nano dbgen/makefile.suite找到这三个关键变量修改CC gcc DATABASE ORACLE MACHINE LINUX WORKLOAD TPCH这里有个坑DATABASE参数如果要用MySQL得先改成SQLSERVER再手动改源码直接改MySQL会报错。编译时如果遇到undefined reference错误试试这个万能命令make -f makefile.suite CCgcc DATABASEORACLE MACHINELINUX WORKLOADTPCH我遇到过最头疼的报错是segment fault最后发现是gcc版本太高换成gcc-9就解决了。3. 数据生成高效产出测试数据生成数据前建议先做两件事创建独立数据目录避免污染源码备份dists.dss文件这个配置文件超级重要完整操作流程mkdir -p ~/tpch_data cd ~/tpch_data cp ~/tpch_workspace/dbgen/dbgen . cp ~/tpch_workspace/dbgen/dists.dss .生成1GB测试数据的命令很简单./dbgen -s 1 -v但有几个实用参数你可能不知道-T L只生成lineitem表-U 10生成10个分片适合分布式测试-C 4用4个线程加速生成我常用这个组合命令生成分片数据for i in {1..10}; do ./dbgen -s 100 -C 10 -S $i -U 10; done这会在10个线程下生成总共100GB的分片数据。4. 性能优化提速50%的实战技巧经过多次测试我发现这几个优化点最有效内存分配优化 编辑tpch.h文件调整#define MAX_ROWS 2000000 - 改为8000000这样可以减少小数据量时的内存碎片。并行生成技巧numactl --cpunodebind0 --membind0 ./dbgen -s 100这个命令可以绑定NUMA节点在我的双路服务器上速度提升30%。SSD优化 如果用的是NVMe SSD建议设置echo 1024 /sys/block/nvme0n1/queue/nr_requests还有个隐藏功能可以通过修改dists.dss文件中的概率分布生成更适合你业务场景的数据。比如把lineitem表的L_QUANTITY分布调得更集中模拟电商大促场景。5. 常见问题排查手册问题1生成的数据文件缺失 解决方法检查dists.dss权限必须和dbgen同一目录且可读问题2生成的日期格式不对 修改方法编辑tpcd.h中的DATE_FORMAT定义问题3生成10GB以上数据时报错 解决方案编译时加上-DLARGE_DATA_FLAG最坑的是字符集问题如果看到乱码试试LC_ALLC ./dbgen -s 1有次我遇到生成的数据全是NULL最后发现是dists.dss文件被Windows换行符污染了用dos2unix转换下就好。6. 进阶应用自动化测试集成在实际项目中我通常用这个shell脚本自动完成全流程#!/bin/bash set -e # 参数检查 [ -z $1 ] { echo Usage: $0 scale; exit 1; } # 编译阶段 make clean make -f makefile.suite CCgcc DATABASEORACLE MACHINELINUX WORKLOADTPCH # 数据生成 mkdir -p data_$1GB ./dbgen -s $1 -f -v # 数据校验 if [ $(ls -1 *.tbl | wc -l) -ne 8 ]; then echo 生成文件数量异常 exit 1 fi对于持续集成环境建议加上md5sum校验md5sum *.tbl data.md5如果需要每天自动生成测试数据可以用crontab设置定时任务0 2 * * * /path/to/dbgen -s 10 -q
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2472238.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!