• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

统计对象大小信息的函数和子查询的Bug

mysql 搞代码 4年前 (2022-01-09) 17次浏览 已收录 0个评论

I hava below two statement sql: 0. not in subquery select a.schemaname, pg_size_pretty(pg_total_relation_size(a.schemaname||’.’||a.tablename)) from pg_tables a where a.tablename not in (select b.tablename from t b); 1. in subquery select a.

I hava below two statement sql:
0. not in subquery
select a.schemaname, pg_size_pretty(pg_total_relation_size(a.schemaname||’.’||a.tablename)) from pg_tables a where a.tablename not in (select b.tablename from t b);
1. in subquery
select a.schemaname, pg_size_pretty(pg_total_relation_size(a.schemaname||’.’||a.tablename)) from pg_tables a where a.tablename in (select b.tablename from t b);

The [0. not in subquery] can’t work well, it’s occur error:
ERROR: query plan with multiple segworker groups is not supported (cdbdisp.c:500)
HINT: likely caused by a function that reads or modifies data in a distributed table
CONTEXT: SQL statement “select sum(pg_total_relation_size(‘information_schema.sql_languages’))::int8 from gp_dist_random(‘gp_id’);”

The [1. in subquery] work well.

Detailed below test:

gtlions=# select version();version------------------------------------------------------------------------------------------------------------------------------------------------------PostgreSQL 8.2.15 (Greenplum Database 4.2.7.3 build 1) on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.4.2 compiled on May 7 2014 14:31:08(1 row)gtlions=# select a.schemaname, pg_size_pretty(pg_total_relation_size(a.schemaname||'.'||a.tablename)) from pg_tables a where a.tablename not in (select b.tablename from t b);ERROR: query plan with multiple segworker groups is not supported (cdbdisp.c:500)HINT: likely caused by a function that reads or modifies data in a distributed tableCONTEXT: SQL statement "select sum(pg_total_relation_size('information_schema.sql_languages'))::int8 from gp_dist_random('gp_id');"gtlions=# explain select a.schemaname, pg_size_pretty(pg_total_relation_size(a.schemaname||'.'||a.tablename)) from pg_tables a where a.tablename not in (select b.tablename from t b);QUERY PLAN-----------------------------------------------------------------------------------------------Hash Left Anti Semi Join (cost=568.98..235912.69 rows=676396 width=128)Hash Cond: c.relname = "NotIn_SUBQUERY".tablename::name-> Hash Left Join (cost=395.97..223194.68 rows=676419 width=128)Hash Cond: c.relnamespace = n.oid-> Hash Left Join (cost=2.62..112777.67 rows=676419 width=68)Hash Cond: c.reltablespace = t.oid-> Seq Scan on pg_class c (cost=0.00..2751.39 rows=676419 width=72)Filter: relkind = 'r'::"char" AND relname IS NOT NULL-> Hash (cost=1.02..1.02 rows=2 width=4)-> Seq Scan on pg_tablespace t (cost=0.00..1.02 rows=128 width=4)-> Hash (cost=365.35..365.35 rows=35 width=68)-> Seq Scan on pg_namespace n (cost=0.00..365.35 rows=2240 width=68)-> Hash (cost=106.61..106.61 rows=83 width=274)-> Gather Motion 64:1 (slice1; segments: 64) (cost=0.00..106.61 rows=83 width=274)-> Subquery Scan "NotIn_SUBQUERY" (cost=0.00..52.66 rows=2 width=274)-> Seq Scan on t b (cost=0.00..51.83 rows=2 width=24)(16 rows)gtlions=# select a.schemaname, pg_size_pretty(pg_total_relation_size(a.schemaname||'.'||a.tablename)) from pg_tables a where a.tablename in (select b.tablename from t b);schemaname | size-1-------------+---------public | 32 kBpublic | 32 kB............public | 96 kBgtlions=# explain select a.schemaname, pg_size_pretty(pg_total_relation_size(a.schemaname||'.'||a.tablename)) from pg_tables a where a.tablename in (select b.tablename from t b);QUERY PLAN---------------------------------------------------------------------------------------------------------------------------------Gather Motion 64:1 (slice7; segments: 64) (cost=445.41..10096.03 rows=1 width=128)-> Hash Left Join (cost=445.41..10096.03 rows=1 width=128)Hash Cond: c.reltablespace = t.oid-> Redistribute Motion 64:64 (slice5; segments: 64) (cost=443.06..10092.81 rows=1 width=132)Hash Key: c.reltablespace-> Hash Left Join (cost=443.06..10092.22 rows=1 width=132)Hash Cond: c.relnamespace = n.oid-> Redistribute Motion 64:64 (slice3; segments: 64) (cost=54.53..9703.24 rows=1 width=72)Hash Key: c.relnamespace-> Hash EXISTS Join (cost=54.53..9702.65 rows=1 width=72)Hash Cond: c.relname = b.tablename::name-> Redistribute Motion 1:64 (slice1) (cost=0.00..9621.26 rows=10570 width=72)Hash Key: c.relname-> Seq Scan on pg_class c (cost=0.00..2751.39 rows=676419 width=72)Filter: relkind = 'r'::"char"-> Hash (cost=53.49..53.49 rows=2 width=24)-> Redistribute Motion 64:64 (slice2; segments: 64) (cost=0.00..53.49 rows=2 width=24)Hash Key: b.tablename::name-> Seq Scan on t b (cost=0.00..51.83 rows=2 width=24)-> Hash (cost=388.10..388.10 rows=1 width=68)-> Redistribute Motion 1:64 (slice4) (cost=0.00..388.10 rows=35 width=68)Hash Key: n.oid-> Seq Scan on pg_namespace n (cost=0.00..365.35 rows=2240 width=68)-> Hash (cost=2.32..2.32 rows=1 width=4)-> Redistribute Motion 1:64 (slice6) (cost=0.00..2.32 rows=2 width=4)Hash Key: t.oid-> Seq Scan on pg_tablespace t (cost=0.00..1.0<mark>来源gaodaimacom搞#^代%!码网</mark>2 rows=128 width=4)(27 rows) 

该问题应该是个Bug,等待TSE给出Fix或者没有Fix而只能等到下个版本升级了.
-EOF-


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:统计对象大小信息的函数和子查询的Bug
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址