【云小课】如何初步定位 GaussDB(for openGauss) 慢 SQL
数据库在日常使用的过程中会产生很多 SQL 语句,而如果有些 SQL 语句运行了很长时间还没有结束,这些语句会消耗很多的系统性能。
那么如何查询到有哪些 SQL 语句影响了系统的运行呢?
学了本节课程后,您就将会掌握初步定位 GaussDB(for openGauss)慢 SQL 的方法。
操作场景
数据库执行 SQL 语句长时间无响应。
数据库 CPU/内存压力一直很大。
操作步骤
使用 DAS 或者 gsql 连接实例。
查询系统中长时间运行的查询语句。
查询后会按执行时间从长到短顺序返回查询语句列表,第一条结果就是当前系统中执行时间最长的查询语句。返回结果中包含了系统调用的 SQL 语句和用户执行 SQL 语句,请根据实际找到用户执行时间长的语句。
若当前系统较为繁忙,可以通过限制 current_timestamp - query_start 大于某一阈值来查看执行时间超过此阈值的查询语句。
3. 设置参数 track_activities 为 on。
当此参数为 on 时,数据库系统才会收集当前活动查询的运行信息。
4. 从当前活动会话视图查找问题会话的线程 ID。
显示类似如下信息,其中 pid 的值即为该会话的线程 ID。
如果 state 字段显示为 idle,则表明此连接处于空闲,等待用户输入命令。
如果仅需要查看非空闲的查询语句,则使用如下命令查看:
5. 分析长时间运行的查询语句状态。
若查询语句处于正常状态,则等待其执行完毕。
如果是因为 SQL 执行效率低,建议参考官方文档优化 SQL 语句。
若查询语句不正常执行,则参考步骤 6 结束异常会话。
6. 根据线程 ID 结束会话。
显示类似如下信息,表示结束会话成功。
显示类似如下信息,表示用户正在尝试结束当前会话,此时仅会重连会话,而不是结束会话。
说明
gsql 客户端使用 pg_terminate_backend 函数终止本会话后台线程时,客户端不会退出而是自动重连。
版权声明: 本文为 InfoQ 作者【华为云数据库小助手】的原创文章。
原文链接:【http://xie.infoq.cn/article/af414427d880cc163e3e2f18e】。文章转载请联系作者。
评论