使用 psql 和 centos7 进行任何搜索或插入操作时,greenplum 永远挂起

Posted

技术标签:

【中文标题】使用 psql 和 centos7 进行任何搜索或插入操作时,greenplum 永远挂起【英文标题】:greenplum hang forever when doing any search or insert actions with psql and centos7 【发布时间】:2018-01-02 12:35:16 【问题描述】:

greenplum 版本是 5.3.0 centos 7

作为标题, 以下是 gplogfilter 的结果

SELECT pg_catalog.quote_ident(n.nspname) || '.' FROM pg_catalog.pg_namespace n WHERE substring(pg_catalog.quote_ident(n.nspname) || '.',1,7)='test_vb' AND (SELECT pg_catalog.count(*) FROM pg_catalog.pg_namespace WHERE substring(pg_catalog.quote_ident(nspname) || '.',1,7) = substring('test_vb',1,pg_catalog.length(pg_catalog.quote_ident(nspname))+1)) > 1
UNION
SELECT pg_catalog.quote_ident(n.nspname) || '.' || pg_catalog.quote_ident(c.relname) FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n WHERE c.relnamespace = n.oid AND c.relkind IN ('r', 'S', 'v' , 'x') AND substring(pg_catalog.quote_ident(n.nspname) || '.' || pg_catalog.quote_ident(c.relname),1,7)='test_vb' AND substring(pg_catalog.quote_ident(n.nspname) || '.',1,7) = substring('test_vb',1,pg_catalog.length(pg_catalog.quote_ident(n.nspname))+1) AND (SELECT pg_catalog.count(*) FROM pg_catalog.pg_namespace WHERE substring(pg_catalog.quote_ident(nspname) || '.',1,7) = substring('test_vb',1,pg_catalog.length(pg_catalog.quote_ident(nspname))+1)) = 1
LIMIT 1000|0||postgres.c|1629|
2018-01-02 12:21:20.685964 UTC|||p20871|th-636074112||||0|||seg-1|||||LOG: |00000|3rd party error log:
Unexpected exception reached top of execution stack: major=200 minor=14 file=CTranslatorUtils.cpp line=162||||||||SysLoggerMain|syslogger.c|633|
2018-01-02 12:21:20.686005 UTC|gpadmin|testdb|p21604|th-636074112|[local]||2018-01-02 12:13:41 UTC|0|con8|cmd4|seg-1||dx22||sx1|LOG: |00000|Planner produced plan :0||||||SELECT pg_catalog.quote_ident(c.relname) FROM pg_catalog.pg_class c WHERE c.relkind IN ('r', 'S', 'v' , 'x') AND substring(pg_catalog.quote_ident(c.relname),1,7)='test_vb' AND pg_catalog.pg_table_is_visible(c.oid) AND c.relnamespace <> (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = 'pg_catalog')
UNION
SELECT pg_catalog.quote_ident(n.nspname) || '.' FROM pg_catalog.pg_namespace n WHERE substring(pg_catalog.quote_ident(n.nspname) || '.',1,7)='test_vb' AND (SELECT pg_catalog.count(*) FROM pg_catalog.pg_namespace WHERE substring(pg_catalog.quote_ident(nspname) || '.',1,7) = substring('test_vb',1,pg_catalog.length(pg_catalog.quote_ident(nspname))+1)) > 1
UNION
SELECT pg_catalog.quote_ident(n.nspname) || '.' || pg_catalog.quote_ident(c.relname) FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n WHERE c.relnamespace = n.oid AND c.relkind IN ('r', 'S', 'v' , 'x') AND substring(pg_catalog.quote_ident(n.nspname) || '.' || pg_catalog.quote_ident(c.relname),1,7)='test_vb' AND substring(pg_catalog.quote_ident(n.nspname) || '.',1,7) = substring('test_vb',1,pg_catalog.length(pg_catalog.quote_ident(n.nspname))+1) AND (SELECT pg_catalog.count(*) FROM pg_catalog.pg_namespace WHERE substring(pg_catalog.quote_ident(nspname) || '.',1,7) = substring('test_vb',1,pg_catalog.length(pg_catalog.quote_ident(nspname))+1)) = 1
LIMIT 1000|0||orca.c|60|
2018-01-02 12:21:22.351554 UTC|gpadmin|testdb|p21604|th-636074112|[local]||2018-01-02 12:13:41 UTC|0|con8|cmd6|seg-1||dx23||sx1|LOG: |00000|statement: SELECT * FROM test_vb;||||||SELECT * FROM test_vb;|0||postgres.c|1629|
       in:      77 lines; timestamps from 2018-01-02 11:31:19.698317 to 2018-01-02 12:21:22.351554
      out:      77 lines; timestamps from 2018-01-02 11:31:19.698317 to 2018-01-02 12:21:22.351554
----------  /data/master/gpseg-1/pg_log/gp_era ----------
# Greenplum Database era.
# Do not change the contents of this file.
era = 27c9a01176c70c2c_180102113109
       in:       3 lines; no timestamps found
      out:       3 lines

【问题讨论】:

如果这是开源的,您可能应该添加。描述节点、每个主机的段、其他活动等。您分析过目录了吗?还是在目录上运行重新索引? 【参考方案1】:

您使用的是哪个版本的 CentOS 7? RHEL/CentOS 7.0-7.2 存在已知问题(请参阅 Greenplum 发行说明)。您应该使用 7.3 或 7.4 - 操作系统的早期版本 7 中存在内核问题,已在 7.3/4 中修复。

吉姆·麦肯 关键

【讨论】:

CentOS Linux release 7.4.1708 (Core) Linux tp-gpdb-ku02.novalocal 3.10.0-693.11.1.el7.x86_64 附注我没有防火墙,没有备用主机,也没有设置镜像。 即使我重新安装greenplum,它也有同样的问题 1主3段4CPU/8G/100G 我找到了原因:数据包意外丢失。我设置了gp_interconnect_type tcp,可以,但是不知道为什么丢包。【参考方案2】:

Greenplum 在启动活动数据库时使用 TCP 连接,并告诉 Segments Master 的地址以及对数据库的其他操作都是使用 UDP 连接,并且 master 地址是从先前的 TCP 连接中获取的。问题是如果master使用NAT方法,segment只获取master的修改地址,并尝试向修改的地址发送消息。那么解决方法之一就是通过修改源码中proc->listenerAddr的值来告诉master发送查询时的segment地址。

【讨论】:

【参考方案3】:

我在选择和插入时也遇到了同样的问题,但 Teddy 的最后一条评论对我有用,即为所有主机(主机和网段)启用 UDP 协议。 所以对于greenplum,很少有协议需要启用TCP、UDP、SSH、ICMP。

【讨论】:

以上是关于使用 psql 和 centos7 进行任何搜索或插入操作时,greenplum 永远挂起的主要内容,如果未能解决你的问题,请参考以下文章

可以在 phpPgAdmin 中查看表,但不能在 psql(或任何其他方法)中查看表

psql:尽管存在关系,但没有找到关系

优化在文本搜索中使用正则表达式的 psql 查询

PostgreSQL 基础知识:psql 提示和技巧

`psql` 是不是有类似于 `bash` 中的 `$PATH` 的东西来搜索 SQL 脚本?

PostgreSQL 函数中的 psql 变量是不是有任何转义语法?