1.1 问题描述
客户端可以连接数据库,但是耗时长。(可能连接个别CN出现此现象)
1.2 原理分析
已知的问题是GaussDB提供GUC参数log_hostname,此参数默认开启。当客户端来连接数据库时,会根据log_hostname来选择调用操作系统函数getnameinfo()时是否进行DNS解析域名,即根据客户端ip获取主机名。由于DNS的配置问题,解析可能耗时较长甚至失败,因此对于客户端来说,连接数据库很慢。
1.3 定位方法
- show log_hostname;
登录连接慢的CN,查看log_hostname的值,若为on,可根据线程号打印堆栈;
- select application_name, lwtid from pg_stat_activity a, pg_thread_wait_status b where a.pid = b.tid and client_addr = ‘xxxx’ and datname = ‘xxxx’ and usename = ‘xxxx’ and backend_start between ‘xxxx’ and ‘xxxx’;
- gstack lwtid
图5. getnameinfo()堆栈信息
若堆栈中存在明显的getnameinfo(),则关闭此参数即可;没有打印堆栈的工具也可尝试关闭。
- log_hostname = on?
若log_hostname为on,可使用ping命令排查网络时延等问题;如果网络正常,那么还是根据线程号打堆栈进一步分析。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/bigdata/316474.html