在Redshift中,一个查询需要3个小时来执行,同时分析其查询计划,似乎网络一直在使用。如何排除和解决这个问题。

下面是我的查询执行计划:
查询计划:(to_date(Productrequestdate)::text,‘YYYY DD’::text) <= '2022-01-31'::date)和(to_date(Productrequestdate)::text,‘YYYY DD’::text) >=‘2020-01’::date)和((Mstrclientid):text=‘GSKUS’::>= 0)
查询计划:-> XN扫描on brsit_sample_transparency (cost=0.00..0.30 rows=1 width=4980)
查询计划:(to_date(Productrequestdate)::text,‘YYYY DD’::text) <= '2022-01-31'::date)和(to_date(Productrequestdate)::text,‘YYYY DD’::text) >=‘2020-01’::date)和((Mstrclientid):text=‘GSKUS’::>= 0)
查询计划:-> XN扫描on verri_sample_transparency (cost=0.00..0.30 rows=1 width=4980)
查询计划:(to_date(Productrequestdate)::text,‘YYYY DD’::text) <=‘2022-01-31’:date)和(to_date(Productrequestdate)::text,‘YYYY DD’::>=‘2020-01’:date)和(quantityrequested >= 0)和(Mstrclientid):text=‘GSKUS’::text)
查询计划:-> XN扫描on gskus_sample_transparency (cost=0.00..33348.33 rows=5558 width=993)
查询计划:-> XN多扫描(cost=0.00..33404.53 rows=5560 width=4980)
查询计划:-> XN子查询扫描bi_sample_transparency_view (cost=0.00..33460.13 rows=5560 width=1488)
查询计划:排序键: productndc10
查询计划:-> XN排序(cost=1000000033805.99..1000000033819.89 rows=5560 width=1488)
查询计划:发送给领导
查询计划:-> XN网络(cost=1000000033805.99..1000000033819.89 rows=5560 width=1488)
查询计划:合并键: productndc10
查询计划:XN合并(cost=1000000033805.99..1000000033819.89 rows=5560 width=1488)
发布于 2022-02-22 14:55:29
正如您所说,这是计划中的一个有问题的步骤(在排序之前进行网络传输,这实际上不是一个计划步骤,而是一个需要执行的活动)。由于只报告了5560行,这似乎不应该是大量的数据,但是您的列计数很高,而且我不知道这些列的大小。可能会有很多数据在移动,即使是在这有限的行数下。或者,所报告的行数并不表示可能发生的网络活动中移动的行数,但这将是一个巨大的差异。您可以查看这个查询的stl_dist,查看移动了多少数据(字节)。
这里的另一个可能是,您的查询是受害者,而不是罪魁祸首。您可以看到Redshift是一个集群,集群通过网络连接,这些网络是集群上运行的所有查询的公共基础设施。如果在此窗口中运行了一个非常糟糕的查询,导致节点间网络(带宽占优势)出现浏览,那么您的查询就会陷入这种交通阻塞。您的查询大部分时间都正常运行,但这次运行得很慢吗?当时的集群活动是什么样子的?其他查询是否受到影响?我已经调试了很多“缓慢”的查询,这些问题都是受害者。尽管如此,在像Redshift这样的集群数据库中,由于其群集特性,不需要在网络上传输过多的数据,这总是很好的。
如果您想进一步调试此查询(这是罪魁祸首),那么查询文本、stl_dist信息和解释计划可能会给情况带来更多的启示。
https://stackoverflow.com/questions/71219995
复制相似问题