Greenplum SQL问题重现利器之Minirepo
引言
大家在使用Greenplum的过程中可能会遇到跑了某种SQL而导致数据库PANIC问题,或者数据库的执行计划并没有那么合理而导致SQL性能过慢的问题。
Greenplum SQL 问题重现利器Minirepo可以帮我们断定问题是执行计划上出来问题,还是数据层面出了问题。
什么是minirepro?
Minirepro 工具是一个比gpsd轻量级的工具。它会收集对应SQL的命名空间信息和统计信息,从而可以在另外一套集群上重现问题。gpsd工具相比Minirepro工具会收集整个数据库的元数据和统计信息。因为Minirepro比GPSD轻量级的优势(只收集对应SQL的信息,而非全库),让它成为数据库管理员和Pivotal售后支持优先使用的优化器排错工具。
简单的使用用例如下,我们通过–version查看版本信息和–help即可查看命令的使用方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | [gpadmin@mdw ~]$ minirepro --version minirepro 1.13 [gpadmin@mdw ~]$ which minirepro /usr/local/greenplum-db-6.23.1/bin/minirepro [gpadmin@mdw ~]$ [gpadmin@mdw ~]$ minirepro --help Usage: minirepro <database> [options] Options: --version show program's version number and exit -?, --help Show this help message and exit -h HOST, --host=HOST Specify a remote host -p PORT, --port=PORT Specify a port other than 5432 -U USER, --user=USER Connect as someone other than current user -q QUERY_FILE file name that contains the query -f OUTPUT_FILE minirepro output file name -l, --hll Include HLL stats WARNING: This tool collects statistics about your data, including most common values, which requires some data elements to be included in the output file. Please review output file to ensure it is within corporate policy to transport the output file. [gpadmin@mdw ~]$ |
示例
1 | Example: minirepro database-name -q sql-file-name -f /tmp/output-file-name -U gpadmin |
一个更详细的例子如下:比如说prod_db是一个生产库,我们在跑query.sql中的的语句的时候出现了数据库PANIC或者SQL运行速度过慢的问题。我们可以使用如下语句来收集mini-repro:
1 2 3 4 5 6 7 8 9 10 11 12 13 | gpadmin@mdw]$ minirepro prod_db -q query.sql -f /data/oufile_msq -U gpadmin Connecting to database: host=mdw, port=5432, user=gpadmin, db=prod_db … Extracting metadata from query file query.sql … Invoking pg_dump to dump DDL … pg_dump -h mdw -p 5432 -U gpadmin -sxO prod_db -t 'ravedw.v_f_dtd_modular_scenario_fdsf|fdsf_scenario_map|mt_position|mt_scenario_surf_dim_msr|mt_modular_scenario' -f /tmp/20160419101152/ravedw.dp.sql pg_dump -h mdw -p 5432 -U gpadmin -sxO prod_db -t 'dwuser.u_modular_scenarios_fdsf' -f /tmp/20160419101152/dwuser.dp.sql Writing schema DDLs … Writing table & view DDLs … Writing table statistics … Writing column statistics … Attaching raw query text … --- MiniRepro completed! --- |
其中,/data/oufile_msq 是mini-repro产生的文件。
我们可以利用这个文件在另外一个Greenplum数据库集群中使用psql -f /data/oufile_msq 即可实现元数据和统计信息的导入,并且重现优化器上面的问题。
问题
问题1:
Minirepro 是否会收集表中的数据?
答:不会,minirepro只会收集表的DDL和统计信息,不会收集表中数据,可以完全放心的把收集结果交给Greenplum的技术支持人员
问题2:
Minirepro是否会可以在有其他作业的情况下跑:
答:可以的,minirepro不会调用排他锁,可以跟没有排他锁的作业一起跑
问题3: