更新时间:2026-10-21 GMT+08:00
分享

管理实时会话

操作场景

在数据库中,会话是用户与数据库之间的交互过程,本节描述如何通过会话管理功能诊断并优化数据库性能。

会话管理模块提供会话概览、会话统计(按状态、用户、访问来源、数据库统计)、会话分析(按TOP SQL统计、按TOP等待事件统计)、会话详情(查询实时会话)和会话查杀(查杀指定会话、查杀所有空闲会话、查杀超指定时长会话、自动查杀事务)功能。详细介绍如下:

  • 会话概览:支持查看实例实时的活跃会话数/总数、锁等会话数、慢SQL数量、CPU使用率和内存使用率。
  • 会话统计:支持查看实例组件粒度实时的总会话数、活跃会话数、最长执行时间、最长事务时间和基于状态、用户、访问来源、数据库不同维度的统计信息。
  • 会话分析:支持查看基于TOP SQL、TOP等待事件维度的统计信息,并能对TOP SQL会话做查杀、SQL限流、SQL PATCH、SQL分析操作。方便处理执行高频的会话。
  • 会话详情:可以全面地展示会话的详细信息,为用户查询会话提供方便。会话查询可以帮助用户:
    • 监控数据库性能:通过查询会话,可以了解当前数据库中正在运行的会话数量、会话的执行状态、会话的执行时间等信息,从而监控数据库的性能状况,及时发现并解决性能问题。
    • 诊断数据库问题:通过查询会话,可以了解当前数据库中正在运行的会话的执行情况,包括执行的SQL语句、等待事件、执行时间等信息,从而帮助诊断数据库问题,定位问题原因。
    • 防止未授权的访问和操作:通过查询会话,可以了解当前数据库中正在运行的会话的来源、用户名、访问来源等信息,从而维护数据库的安全性。
  • 会话查杀:可以查杀一个正在运行的会话。会话查杀操作可以帮助用户:
    • 释放资源:当一个会话长时间运行或者占用了过多的资源,可能会导致数据库性能下降,甚至崩溃。通过查杀指定会话可以及时释放这些资源,保证数据库的正常运行。
    • 解决死锁:当多个会话同时请求同一个资源,可能会出现死锁的情况。通过查杀指定会话可以终止其中一个会话,解决死锁问题。
    • 防止数据库权限滥用:有时候,用户可能会滥用数据库权限,通过查杀指定会话可以及时终止这些滥用行为,保证数据库的安全。
  • 会话详情列表:支持选择多个会话后单击“创建SQL限流任务”,批量创建SQL ID限流;在列表中单击单个会话右侧“SQL限流”按钮,可创建针对这个会话创建SQL ID限流和关键词限流。

综上所述,会话管理在数据库运维中具有重要的意义,可以帮助管理员诊断和优化数据库性能,维护数据库安全。

约束限制

  • 数据库引擎版本大于等于V2.0-3.100,内核版本大于等于503.0的实例支持实时会话功能。版本号查询方法请参见查看云数据库GaussDB数据库和内核引擎版本。
  • 数据库引擎版本大于等于V2.0-2.1.0,内核版本大于等于V500R002C10的实例支持创建SQL PATCH功能。
  • 数据库引擎版本大于等于V2.0-3.208.0,内核版本大于等于503.1.0.SPC1200的实例支持查询表定义。
  • 数据库引擎版本V2.0-1.4及之前版本的实例不支持查询归一化SQL ID,故归一化SQL ID列为空。
  • 分布式版实例,需保证第一个节点组中存在一个含有CN组件且状态正常的非日志节点。集中式版实例,需保证存在一个状态正常且为非日志节点的主节点。
  • 对于分布式版实例,只有查看单个CN或者DN组件的会话才会返回会话的内存信息,查询“全部CN”、“全部会话状态”和CN下钻会话不支持查看会话内存。
  • 对于分布式版实例,不支持对DN组件的会话执行SQL PATCH相关操作。
  • 会话统计、会话分析功能的统计信息,会过滤掉系统内置用户(rdsAdmin,rdsMetric, rdsBackup, rdsRepl,dbmind_monitor_agent,dbmind_monitor)。
  • 由于用户的会话数量是不断动态变化的,会话统计和会话分析的分页情况可能随会话数量的变化而改变。
  • 当前会话统计、会话分析、会话详情(查询会话列表)、查杀会话、SQL限流、SQL分析、SQL PATCH都支持紧急通道功能。紧急通道的资源有限,仅在普通通道资源不足无法请求的时候使用紧急通道,运维操作完成后必须关闭紧急通道选项。
  • 查询实时会话列表最多返回200条数据,以防止会话数量太多而造成请求超时。
  • 会话详情列表仅支持选择包含有CN或DN(主、备)组件的节点。
  • 会话详情功能默认只能监控到有IP地址连接的会话,即用户连接数据库时需通过-h hostname参数指明客户端IP地址。

    如:gsql -d postgres -h 127.*.*.1 -p 8000 -U username -W password。

    打开显示本地会话开关,才能看到无IP地址连接的会话。

  • 空闲会话是指状态为“idle”的会话,“idle in transactions”和“active”状态的会话不会被当做空闲会话删除。
  • 归一化SQL ID为0或者用户名称是系统用户时不支持创建SQL限流。
  • GaussDB默认线程池模式下,pid与线程绑定,线程存活期间pid不会变。SQL分析中线程堆栈、执行计划通过上次查询到的pid查询,建议适时刷新实时会话更新pid信息,以保证SQL分析查询正常。
  • 查杀超指定时长会话属于异步操作,下发查杀后,可通过重新刷新实时会话列表来判断会话查杀的效果。当配合紧急通道使用时,实时会话列表查询较慢。
  • 查杀会话可能导致未完成事务回滚,请确认目标会话后再操作。

管理实时会话

  1. 登录云数据库GaussDB控制台。
  2. 在“实例管理”页面,选择指定的实例,单击实例的名称,进入实例详情页面。
  3. 在左侧导航栏中单击“会话管理”,显示“实时会话”页签。
  4. 在“会话概览”模块查看实时会话的活跃会话数/总数、锁等会话数、慢SQL数量、以及实例的CPU使用率和内存使用率信息。
  5. 在“会话统计”模块查看实时会话统计信息。

    会话统计是按照“节点_组件”的维度查询的,选择不同的“节点_组件”ID的组合,可以获取到当前“节点_组件”下的实时会话统计信息。

    图1 会话统计

    表1 会话统计参数说明

    参数名称

    说明

    总会话数

    实时会话总个数。

    活跃会话数

    状态为active的会话总个数。

    最长执行时间

    活跃会话中最长的语句执行时长,单位为秒。

    最长事务时间

    活跃会话中最长的事务执行时长,单位为秒。

    按状态统计

    实时会话按状态分组,统计对应活跃会话及总会话数,并按会话数个数排序。

    按用户统计

    实时会话按用户分组,统计对应活跃会话及总会话数,并按会话数个数排序。

    按访问来源统计

    实时会话按访问来源分组,统计对应活跃会话及总会话数,并按会话数个数排序。

    按数据库统计

    实时会话按数据库分组,统计对应活跃会话及总会话数,并按会话数个数排序。

  6. 在“会话分析”模块查看TOP SQL及TOP等待事件信息。

    会话分析是按照“节点_组件”的维度查询的,选择不同的“节点_组件”ID的组合,可以获取到当前“节点_组件”下的TOP SQL及TOP等待事件信息。

    图2 会话分析

    • 按TOP SQL统计:基于归一化SQL ID分组,按会话数倒序排列。支持查杀会话,快速设置SQL限流、创建SQL PATCH,按需执行SQL分析。紧急通道打开后,SQL PATCH的所有操作也会下发到紧急通道,保证资源满的情况下可以快速执行SQL PATCH操作。紧急通道的资源有限,仅在普通通道资源不足无法请求的时候使用紧急通道,运维操作完成后必须关闭紧急通道选项。
    • 按TOP等待事件统计:基于等待事件与等待状态分组,按会话数倒序排列。分布式实例CN和DN上的等待事件分开展示,选择CN节点,只展示该CN节点本身的等待事件信息;选择DN节点,才能查看相关DN上的等待事件。单击“查看SQL详情”,可以查看具体等待事件的TOP SQL分布。紧急通道打开后,查看SQL详情也会下发到紧急通道。紧急通道的资源有限,仅在普通通道资源不足无法请求的时候使用紧急通道,运维操作完成后必须关闭紧急通道选项。
      图3 查看SQL详情

  7. 在“会话详情”模块查看实时会话列表。

    会话列表是按照“节点_组件”的维度查询的,选择不同的“节点_组件”ID的组合,可以获取到当前“节点_组件”下的实时会话。

    图4 会话详情
    • 搜索框中选择“数据库”、“客户端IP”、“用户名”、“是否等待”、“归一化SQL ID”、“会话ID”、“状态”、“等待事件”、“会话建立时长(秒)>=”或“语句执行时长(秒)>=”等字段可进行过滤筛选。
    • 界面右上角的“会话状态信息统计”开关可以选择是否开启“会话内存”、“事务数”、“回滚次数”、“SQL数”字段的统计,默认关闭。查询会话内存会对会话加锁,有导致业务SQL性能劣化的风险,请谨慎使用。开关打开后,单击会话内存的数字可以查看会话内存上下文详情,查看会话详情的紧急通道按钮打开后,查看会话内存详情也会走紧急通道。紧急通道的资源有限,仅在普通通道资源不足无法请求的时候使用紧急通道,运维操作完成后必须关闭紧急通道选项。
    • 是否显示本地会话开关,默认关闭。打开后,支持查看访问来源为空的本地会话。
    • 支持查杀会话、创建SQL PATCH和执行SQL分析。
    • 对于分布式实例,单击节点下拉框,可以看到“全部CN”和“全部会话状态”选项。

      单击“全部CN”可以查看所有CN的会话;单击“全部会话状态”可以查看所有CN和DN的会话线程状态。

    • 当遇到数据库默认端口的资源不足无法连接内核查询实时会话列表时,单击右上角“紧急通道”开关,开启后会话查询、会话查杀和SQL限流操作会走紧急通道建立连接。紧急通道的资源有限,仅在普通通道资源不足无法请求的时候使用紧急通道,运维操作完成后必须关闭紧急通道选项。
    表2 会话详情参数说明

    参数名称

    说明

    应用名称

    连接到该后台的应用名。

    会话ID

    会话ID。

    归一化SQL ID

    语句的unique sql id。

    线程ID

    后台线程ID。

    状态

    该会话当前总体状态。可能值是:

    • active:后台正在执行一个查询。
    • idle:后台正在等待一个新的客户端命令。
    • idle in transaction:后台在事务中,但事务中没有语句在执行。
    • idle in transaction (aborted):后台在事务中,但事务中有任务执行失败。
    • fastpath function call:后台正在执行一个fast-path函数。
    • disabled:如果后台禁用track_activities,则报告这个状态。

    数据库

    用户会话在后台连接到的数据库名称。

    客户端IP

    连接到该后台的客户端的IP地址。

    用户名

    登录该后台的用户名。

    SQL文本

    该后台的最新查询。

    语句执行时长(秒)

    语句的执行时间(单位:秒)。

    是否等待

    如果后台当前正等待锁则为“true”,否则为“false”。

    等待事件

    当前线程正在等待的事件。

    阻塞会话ID

    阻塞当前线程获取锁的会话标识。

    内存(Byte)

    会话上下文内存总大小。

    会话建立时长(秒)

    会话建立时长(单位:秒)。

    会话开始时间

    该过程开始的时间,即当客户端连接服务器的时间。

    事务开始时间

    启动当前事务的时间。

    语句开始时间

    开始当前活跃查询的时间。

    TCP端口

    客户端用于与后台通讯的TCP端口号,如果使用Unix套接字,则为-1。

    唯一SQL ID

    查询语句的ID。

    事务执行时长(秒)

    事务执行花费的时间。

    Traceld

    驱动传入的trace id,与应用的一次请求相关联。

    全局会话ID

    全局会话ID。

    节点ID

    会话执行所在的节点的ID。

    组件名称

    会话执行所在的组件。

    等待状态

    当前线程等待状态的详细信息。

    轻量级线程号

    该会话的轻量级线程号。

    线程名称

    该会话所属线程的名称。

    锁模式

    当前线程正等待获取的锁模式。

    父会话ID

    该会话的父会话ID。

    并行线程ID

    并行线程的ID。

    等待锁

    当前线程正在等待锁的信息。

    事务数

    会话相关事务数统计信息,开启会话状态信息统计时才会展示。

    回滚次数

    会话上下文回滚次数统计信息,开启会话状态信息统计时才会展示。

    SQL数

    会话上下文SQL数统计信息,开启会话状态信息统计时才会展示。

    子会话全局会话ID

    该会话的子会话全局会话ID。

    子会话ID

    该会话的子会话ID。

    子会话线程ID

    该会话的子会话线程ID。

  8. 执行SQL分析。

    • 在会话详情模块右侧操作列或会话分析模块“按TOP SQL统计”列表操作列,单击“SQL分析”,可在“SQL文本详情”页签查看当前会话SQL明细、历史执行计划、实时执行计划信息。
      图5 SQL文本详情

    • 在会话详情模块右侧操作列或会话分析模块“按TOP SQL统计”列表操作列,单击“SQL分析”,可在“表结构”页签,输入想查看的库、schema、表名信息后,单击查询,查看对应表的定义及统计信息。可按需进行下发Analyse操作。
      图6 表结构

  9. 创建SQL PATCH。

    • 在会话详情模块右侧操作列或会话分析模块“按TOP SQL统计”列表操作列,单击“SQL PATCH”,显示“SQL PATCH详情”页面。

    • 支持创建HINT和ABORT类型的SQL PATCH。选择PATCH类型、输入PATCH名称、HINT类型的需要输入PATCH内容,单击“创建”,则可创建SQL PATCH。当查询会话详情的“紧急通道”按钮打开后,SQL PATCH的查询、创建、开启、关闭、删除的操作都会走紧急通道,在资源满的情况下可快速执行SQL PATCH操作。紧急通道的资源有限,仅在普通通道资源不足无法请求的时候使用紧急通道,运维操作完成后必须关闭紧急通道选项。
      • HINT: 用户通过其他运维视图或定位手段识别到业务语句存在计划不优导致的性能问题时,可以通过创建HINT SQL PATCH对业务语句进行基于hint的调优。
      • ABORT: 对于部分由特定语句触发系统内部问题导致系统可服务性受损的语句,在不对业务语句变更的情况下,也可以通过创建用于单点规避的ABORT SQL PATCH,对问题场景提前报错处理,避免更大的损失。
      图7 创建SQL PATCH

    • 如果已创建SQL PATCH,则显示SQL PATCH信息。
      图8 查看SQL PATCH

      • 单击,可开启或关闭SQL PATCH。关闭SQL PATCH,状态显示未生效,开启SQL PATCH,状态显示生效中。
      • 单击“删除”,则可删除SQL PATCH。

  10. 查杀会话。

    • 在会话详情模块右侧操作列或会话分析模块“按TOP SQL统计”列表操作列,单击“查杀会话”按钮,可以查杀指定会话。您也可以勾选会话详情列表左侧复选框,选中任意数量会话,单击会话列表上方的“查杀指定会话”,在弹框中单击“确定”,会终止选定的会话。
      图9 查杀会话

    • 单击会话详情列表上方的“查杀所有空闲会话”,在弹框中单击“确定”,会查杀当前所有“状态”为“idle”的空闲会话。
      图10 查杀所有空闲会话

    • 单击会话详情列表上方的“查杀超指定时长会话”,在弹框中输入执行时长(秒),单击“确定”,会查杀超过指定时长的会话。
      图11 查杀超指定时长会话

    • 单击会话详情列表上方的“自动查杀事务”按钮可以开启、关闭事务自动查杀和配置长事务和大事务自动查杀规则。
      图12 自动查杀事务

  11. 创建SQL限流。

    • 勾选会话详情列表左侧复选框,可以选中任意数量会话,单击会话列表上方的“创建SQL限流任务”按钮可以对选中会话的归一化SQL ID或指定关键词进行限流。或者单击会话分析模块“按TOP SQL统计”列表操作列的“SQL限流”按钮可以对指定会话的归一化SQL ID或指定关键词进行限流。以下用户: ‘root’,‘rdsAdmin’,‘rdsMetric’,‘rdsBackup’,‘rdsRepl’,‘dbmind_monitor’,‘hadr_disaster’,‘dbmind_monitor_agent’等sysadmin权限的用户都不支持限流操作。
    • 限流任务类型选择“SQL ID”,对选中会话的归一化SQL ID进行限流。
      图13 指定SQL ID进行SQL限流

    • 限流任务类型选择“关键词”,对选中会话的指定关键词进行限流。
      图14 指定关键词进行SQL限流

相关文档