GreenPlum连接数

一、查看连接数

master节点的

[gpadmin@P1DW01 ~]$ gpconfig --show max_connections
Values on all segments are consistent
GUC          : max_connections
Master  value: 700
Segment value: 2500

二、限制并发数

为了限制对GPDB系统的并发访问,可以通过配置Server参数max_connections来实现。这是一个本地化参数,就是说,需要把Master,Standby以及所有的Instance都修改该参数。通常建议Instance的值是Master的5-10倍,不过这个规律并非总是如此,在max_connections比较大的时候通常没有这么高的倍数,2-3倍也是允许的,但无论如何Instance的值不能小于Master。在设置max_connections时,其依赖的参数max_prepared_transactions参数也需要修改,该参数的值至少要和Master上的max_connections值一样大,另外Instance上的值需与Master相同。

[gpadmin@P1W01 ~]$ gpconfig --show max_prepared_transactions
Values on all segments are consistent
GUC          : max_prepared_transactions
Master  value: 600
Segment value: 600
 

三、资源队列管理

  • 活动语句数量。并行执行的最大语句数量。
  • 活动语句内存使用量。所有提交的语句使用的总内存不能超过该限制。
  • 活动语句优先级。该值设定了该资源队列相对于其他资源队列在CPU资源使用上的优先级,这里说的优先是相对的。

 资源队列创建好之后,ROLE(User)可被分配到合适的资源队列。一个资源队列可以分配多个ROLE,但每个ROLE只能被分配到一个资源队列。

资源队列如何工作

在运行时,用户提交一个查询,该查询会被针对其资源队列的限制进行评估。如果评估认为该查询不会超过资源限制,该查询将被立即执行。如果评估认为该查询超过了资源限制(比如最大活动语句数的查询正在执行),该查询需要等到有足够的资源时才能得到执行。查询按照先进先出的方式排队。在查询优先级启用的情况下,系统会定期的重新分配计算资源。

SUPERUSER是不受资源队列限制的。超级用户的查询语句总是被立即执行,不管其所在的资源队列如何限制

内存限制如何工作

在资源队列上设置的内存限制使得每个Instance上该资源队列能够使用的内存总和不能超过设定的最大值。每个查询语句分配的内存大小是资源队列的内存限制除以最大活动语句数量(GP建议与活动语句数限制结合使用,而不是与成本限制结合使用)。比如,资源队列的内存限制为2000MB,活动语句数限制为10,那么每条执行语句可以分配到200MB的内存。缺省的内存分配可以针对每条语句通过设置statement_mem参数来复写(最大可以达到资源队列限制的值)。一旦一条语句开始执行,其分配的内存一直到执行结束才会释放(即便其实际使用的内存小于分配的内存)。

[gpadmin@P1MDW01 ~]$ psql
psql (8.2.15)
Type "help" for help.

qmsprd=# show statement_mem;
 statement_mem 
---------------
 125MB
(1 row)
 

-- TODO 关于资源队列中内存限制的详细信息以及内存使用控制,可参考”创建内存限制的资源队列”。

执行优先级如何工作

资源限制是针对活动语句来说的,内存和成本的限制属于是否许可类型,其决定查询语句是允许进入查询状态还是保持排队状态。在语句处于活动状态时,其需要分享CPU资源,这部分的资源由资源队列的优先级控制。当一个更高优先级的语句进入运行状态时,其要求获得更多的CPU资源,相应的需要减少其他运行中语句的CPU资源。

语句的规模和复杂程度不会影响到CPU资源的分配。比如一个简单低成本的查询与一个庞大复杂的查询同时执行却有着相同的优先级,他们将分配到相同的CPU资源。当一个新的语句开始后,CPU资源分配的比重需要被重新计算,不过,相同优先级的语句之间获得的CPU资源仍然是相同的。

发布了150 篇原创文章 · 获赞 46 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/MyySophia/article/details/104008103