GaussDB(DWS)运维 -- 资源管理SQL白名单语句

举报
譡里个檔 发表于 2024/11/18 10:06:27 2024/11/18
【摘要】 1. 现网场景某客户现网出现连接数不足的报错,查看语句执行状态视图pgxc_stat_activity,发现大量简单语句‘select 1’处在等待状态(waiting in ccn queue)状态2. 根因分析2.1  'select1'从哪里来    外部业务经常使用连接池连接数据库,连接池负责数据库连接管理,业务向连接池申请数据库连接。通常情况下连接池会管理足够多的空闲连接,然后连接...

1. 现网场景

某客户现网出现连接数不足的报错,查看语句执行状态视图pgxc_stat_activity,发现大量简单语句‘select 1’处在等待状态(waiting in ccn queue)状态

2. 根因分析

2.1  'select1'从哪里来

    外部业务经常使用连接池连接数据库,连接池负责数据库连接管理,业务向连接池申请数据库连接。通常情况下连接池会管理足够多的空闲连接,然后连接池会定期检测连接的可用性,检测的方式就是向数据发送一个简单语句(一般为'select 1'或者'SELECT 1'),如果执行OK,则说明此连接时有效的,如果执行失败则连接池会丢弃这个连接,并创建新的连接来代替。

2.2 为啥会阻塞

当集群因为内存资源或者并发数达到上限出现作业排队(waiting in global queue/waiting in respool queue/waiting in ccn queue中的任意状态)时,后续执行的SQL可能会出现在等待队列中。如果当前的处于执行状态的SQL语句时间比较长,那么等待队列中的SQL就会堆积的越来也多,甚至导致集群连接数撑爆,导致客户端报错。

针对连接池的场景,因为连接池可能缓存了大量连接,加上连接池的连接探活机制,可能导致大量的select1 查询,导致此问题更严重

3. 解决方案

针对这种场景,DWS的资源管理模块提供了SQL白名单机制,在白名单中的SQL语句不受资源管理监控,简单的说就是白名单中的语句可以不受队列限制的方式执行,一般用于一些业务前置的简单逻辑语句执行。

  • wlm_sql_allow_list中可指定一条或多条SQL白名单语句,指定多条时,通过";"进行分隔。
  • 系统通过前置匹配判断SQL语句是否受监控,不区分大小写,例如:wlm_sql_allow_list='SELECT',则所有select语句均不受资源管理监控。
  • 识别参数值白名单字符串头部的空格,例如:'SELECT'与' SELECT'的含义是不一致的,或者会过滤头部带空格的SELECT语句,前者不会。
  • 系统默认部分SQL语句为白名单语句,默认白名单语句不可修改;可以通过系统视图gs_wlm_sql_allow查询默认和已经通过GUC设置成功的SQL白名单语句
  • 通过wlm_sql_allow_list指定的SQL语句不可追加,只能通过覆盖的方式设置;若需追加SQL语句,需要先查出原先指定的GUC值,在原值后面加补上新增的语句,以";"分隔后重新设置

针对当前客户场景,修改配置参数wlm_sql_allow_list为'select 1'即可解决











【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。