https://help.kingbase.com.cn/v8/perfor/performance-optimization/performance-optimization-6.html#sys-ksh

sys_stat_activity 里记录的等待事件是瞬时信息,没有对等待事件的时间进行累计,所以 KingbaseES 在 V8R6 中引入了明细会话历史(Kingbase Session History)和相应的报告工具。用户可以使用该工具进行会话历史的分析,并针对报告呈现的性能瓶颈进行优化。

sys_ksh 以每秒采样的方式进行会话和数据收集,并将采集数据放入内存的 Ringbuf 队列中,采集的数据主要包括:会话、应用、等待事件、命令类型、QueryId 等。其主要使用场景是:当前或历史某个时点,发生了什么样的异常,系统在执行/运行什么任务。

KSH 功能已经在 KWR 插件中实现,当KWR插件创建后就可以使用该功能。

3.3.6.1. SYS_KSH 的配置 

sys_ksh 的参数在 kingbase.conf 中设置,典型用法可能是:

#kingbase.conf
shared_preload_libraries = 'liboracle_parser, sys_stat_statements, sys_kwr'
sys_stat_statements.track = 'top' # default = 'none'
sys_kwr.collect_ksh = on # default = off

KSH 相关参数:

  • track_activities:跟踪活动会话的等待事件、执行SQL、状态等,默认:on

  • sys_stat_statements.max:设置 sys_stat_statement 跟踪的最大语句数,默认:5000

  • sys_kwr.collect_ksh:启用或禁用 sys_ksh 数据收集,默认:关闭

  • sys_kwr.ringbuf_size:设置 sys_ksh ringbuf 大小,在内存中可以存多少条数据,默认:100000

  • sys_kwr.history_days:设置最大的 sys_ksh 历史数据存储,在磁盘上存储的时间,默认:8天

  • sys_kwr.language:KSH 报告展示中文/英语信息,默认:中文

注:采集报告需要在开启:track_activities(默认已开启),并设定 sys_kwr.collect_ksh = on 才可以查看报告。开启该参数会有一定的性能损耗。

为了确保 KSH 能够采集到活动会话的信息,需要给数据库系统施加一些负载,比如用 TPCC、sysbench、loadrunner 等工具对其进行压测。

也可以通过以下语句给当前会话产生一个 TimeOut 等待事件,以便能够查看无负载情况下的 KSH 报告:

SELECT sys_sleep(2);
SELECT * FROM perf.ksh_report();

当 KSH 没有采集到数据会提示:

SELECT * FROM perf.ksh_report();

KSH 报告中的 queryid 依赖于 sys_stat_statements 表,当 sys_stat_statements 没有采集到数据会提示:

SELECT * FROM perf.ksh_report();

3.3.6.2. SYS_KSH 采集数据说明 

KSH 采集的数据主要包括以下信息:

字段

类型

描述

ts

ti mestamptz

采样时间

db_id

oid

数据库OID

db_name

va rchar(64)

数据库名称

pid

int

进程ID

user_id

oid

用户OID

user_name

va rchar(64)

用户名

app_name

va rchar(64)

应用名称

c lient_addr

inet

客户端IP地址

wait_class

text

等待事件类型

wait_event

text

等待事件

query_id

uint8

QueryId

ba ckend_type

text

后端类型,如:autovacuum, autovacuum worker等

type

text

语句类型,如:INSERT, SELECT, UPDATE, DELETE, UTILITY

phase

text

执行阶段,如:PARSE, PLAN, EXECUTION, UNKNOWN

state

text

状态,如:IDLE, IDLE IN TRANSACTION, RUNNING等

3.3.6.3. 使用 SYS_KSH 

创建 KWR 插件:

CREATE EXTENSION sys_kwr;

保存于内存 Ringbuf 的数据可以通过视图 perf.session_history 查看:

SELECT * FROM perf.session_history;

其中保存于数据库的历史数据可以通过视图 perf.ksh_history 查看:

SELECT * FROM perf.ksh_history;

可以通过 perf.ksh_report() 函数生成在线报告查看:

SELECT * FROM perf.ksh_report({start_ts}, {duration}, {slot_width}, {format});

参数说明:

  • start_ts: 报告开始时间,默认:当前时间-15分钟

  • duration: 报告时长,默认:15分钟,最大不超过60

  • slot_width: 报告最小区间,输入0时系统自动计算合适的宽度,默认:0

  • format: 报告生成格式,可选择 ’html’和’text’两种格式,默认 TEXT 格式

例:生成 TEXT 的 KSH 在线报告

select * from perf.ksh_report('2022-12-13 14:12:46',15,0,'text');

可以通过 perf.ksh_report_to_file() 函数生成报告文件:

SELECT * FROM perf.ksh_report_to_file({start_ts},{duration},{slot_width},{file_path},{format});

参数说明:

  • start_ts: 报告开始时间,默认:当前时间-15分钟

  • duration: 报告时长,默认:15分钟,最大不超过60

  • slot_width: 报告最小区间,输入0时系统自动计算合适的宽度,默认:0

  • file_path: 报告生成地址,示例:’/home/username/ksh_report.html’

  • format: 报告生成格式,可选择 ’html’和’text’两种格式,默认 TEXT 格式

例:生成 HTML 的 KSH 报告文件

select * from perf.ksh_report_to_file('2022-12-13 14:12:46',15,0,'/home/kingbase/ksh_report.html','html');

若想查看两个快照期间的 KSH 报告,可以通过 perf.ksh_report_by_snapshots() 函数生成在线报告:

SELECT * FROM perf.ksh_report_by_snapshots({start_snapid}, {end_snapid}, {slot_width}, {format});

参数说明:

  • start_snapid: 起始快照号

  • end_snapid: 结束快照号

  • slot_width: 报告最小区间,输入0时系统自动计算合适的宽度,默认:0

  • format: 报告生成格式,可选择 ’html’和’text’两种格式,默认 TEXT 格式

例:根据快照号生成 TEXT 的 KSH 在线报告

select * from perf.ksh_report_by_snapshots(1,2);

若想查看两个快照之间的 KSH 报告并保存到文件中,可以通过 perf.ksh_report_to_file_by_snapshots() 函数生成报告文件。

SELECT * FROM perf.ksh_report_to_file_by_snapshots({start_snapid}, {end_snapid}, {file_path}, {format}, {slot_width});

参数说明:

  • start_snapid: 起始快照号

  • end_snapid: 结束快照号

  • file_path: 报告生成地址,示例:’/home/username/ksh_report.html’

  • format: 报告生成格式,可选择 ’html’和’text’两种格式,默认 TEXT 格式

  • slot_width: 报告最小区间,输入0时系统自动计算合适的宽度,默认:0

例:根据快照号生成 HTML 的 KSH 报告文件

select * from perf.ksh_report_to_file_by_snapshots(1,2,'/home/kingbase/ksh_report.html','html');

3.3.6.4. 查看SYS_KSH报告 

KSH输出报告的内容章节包括:

  • 报告和实例信息

  • Top 用户事件

  • Top 后台事件

  • Top 数据库

  • Top PL/SQL 过程

  • Top 简单查询

  • 等待事件高的 Top SQL

  • Top 会话

  • Top 客户端

  • Top 并行 SQL 等待事件

  • Top 阻塞会话事件

  • Top 重量级锁等待事件

  • Top 轻量级锁等待事件

  • Top SQL 命令类型

  • Top 执行阶段

  • 分段时间等待事件统计

  • 完整 SQL 列表

KSH 网页版示例报告说明如下:

  1. 报告和实例信息

该报告显示KSH环境和总体信息:

统计字段说明:

  • HostName:主机名

  • Cpus:服务器cpu数

  • SGA Size:共享内存大小

  • Server Version:服务器版本

  • Listen Address:数据库服务器的监听地址

  • Report Begin Time:KSH报告开始时间

  • Report End Time:KSH报告结束时间

  • Sample Count:报告时间范围内采样次数

  • Second Count:总共采样到的秒数(各客户端会话进程累加起来)

  • Avg Act Ses:平均每秒的活跃会话数

  • Data Source:KSH报告数据的来源(包括:内存、KSH表、混合三种)

  1. TOP用户事件

该报告展示排名靠前的客户端会话等待事件,通过该报告可以知道数据库系统里哪些等待事件发生的比较多:

字段说明:

  • 事件类型:等待事件所属的分类,其中OnCpu是指非等待事件

  • 事件名称:等待事件的名称

  • 采样数:报告期间采样到的等待事件数量

  • 事件占比:报告期间采样到的等待事件数量占全部等待事件的百分比

  • 平均会话数:平均每秒等待事件出现的会话数量

  1. TOP后台事件

该报告展示排名靠前的后台进程的等待事件,通过该报告可以知道数据库系统里哪些等待事件发生的比较多:

字段说明:

  • 事件类型:等待事件所属的分类,其中OnCpu是指非等待事件

  • 事件名称:等待事件的名称

  • 采样数:报告期间采样到的等待事件数量

  • 活动占比:报告期间采样到的等待事件数量占全部等待事件的百分比

  • 平均会话数:平均每秒等待事件出现的会话数量

  1. TOP数据库

该报告展示访问次数排名靠前的数据库:

字段说明:

  • 数据库名:数据库名称

  • 访问次数:报告期间访问数据库的次数

  • 活动占比:报告期间采样到的访问次数占全部访问次数的百分比

  • 平均会话数:平均每秒访问出现的会话数量

  1. Top PL/SQL 过程

该报告展示采样到的PL/SQL函数执行情况:

字段说明:

  • 名称:PL/SQL函数名称

  • 数据库名:执行该PL/SQL函数的数据库名称

  • 活动占比:该函PL/SQL数执行占全部PL/SQL函数执行的百分比

  • 平均会话数:平均每秒PL/SQL出现的会话数量

  1. Top 简单查询

该报告主要展示使用简单报文(Simple Query)的SQL语句,即没有使用绑定变量的SQL语句统计:

字段说明:

  • Query ID:执行简单报文的SQL语句的ID,可以通过点击链接看详细SQL语句

  • 活动占比:SQL语句占简单报文SQL语句的百分比

  • 平均会话数:该SQL语句每秒平均会话数

  • 采样数:KSH报告期间采样到的该SQL语句次数

  • SQL语句:SQL语句字符串,超长则截断

  1. 等待事件高的 TOP SQL

该报告统计等待时间最多的SQL语句:

字段说明:

  • Query ID:执行简单报文的SQL语句的ID,可以通过点击链接看详细SQL语句

  • 采样数:KSH报告期间采样到的该SQL语句次数

  • 活动占比:SQL语句占简单报文SQL语句的百分比

  • 事件名称:等待事件的名称

  • 事件次数:等待时间发生的次数

  • 事件占比:该SQL语句当前等待事件占其全部等待事件的比例

  • SQL语句:SQL语句字符串,超长则截断

  1. 完整的 SQL 文本列表

该报告展示KSH报告中出现的Query ID对应完整SQL语句:

字段说明:

  • Query Id:SQL语句的query

  • 采样数:该SQL语句的采样数

  • SQL语句:SQL语句的完整字符串

  1. TOP会话

该报告展示TOP活跃会话的基本信息:

字段说明:

  • 会话ID:活跃会话对应的进程ID

  • 会话占比:该活跃会话出现的占比

  • 事件名称:采样到的等待事件或者CPU的名称

  • 事件占比:该事件占该会话全部事件的占比

  • 客户程序:该会话的客户端名称

  • 用户名:该会话的用户名

  1. TOP客户端

该报告按客户端连接来统计活跃会话情况:

字段说明:

  • 用户名:该客户端类型的用户名称

  • 客户程序:该客户端应用名称

  • 活动占比:统计到该客户端的活动占全部活动的比例

  • 平均会话数:统计到该客户端的平均会话数

  1. TOP 并行 SQL 等待事件

该报告主要展示客户端会话中的并行查询进程的SQL统计信息:

字段说明:

  • 会话ID:统计到的并行进程的PID

  • 活动占比:统计到该客户端的活动占全部活动的比例

  • 事件名称:并行进程的等待事件或者CPU活动

  • 事件占比:并行进程的等待事件或者CPU活动的占比

  • 平均会话数:并行进程的平均活跃会话数

  • 用户:并行进程的用户

  • 客户程序:并行进程的客户端程序名称

  • Query Id:并行进程执行的SQL语句

  1. Top 阻塞会话事件

该报告按进程展示阻塞类的会话事件,即Lock类等待事件的统计:

字段说明:

  • 会话ID:发生阻塞等待事件的进程的PID

  • 活动占比:该会话阻塞事件占全部事件的占比

  • 平均会话数:进程的平均活跃会话数

  • 事件名称:并行进程的等待事件或者CPU活动

  • 事件占比:并行进程的等待事件或者CPU活动的占比

  • 用户:并行进程的用户

  • 客户程序:并行进程的客户端程序名称

  1. Top 重量级锁等待事件

该报告展示客户端会话进程的重量级锁等待事件统计:

字段说明:

  • 锁名称:统计的锁的名称

  • 锁次数:统计的锁的次数

  • 锁占比:统计的锁占全部锁的占比

  • 活动占比:统计到该等待事件重量级锁的次数占全部活动的比例

  • 平均会话数:该锁出现的平均会话数

  1. Top 轻量级锁等待事件

该报告展示客户端会话进程的轻量级锁等待事件统计:

字段说明:

  • 锁名称:统计的锁的名称

  • 锁次数:统计的锁的次数

  • 锁占比:统计的锁占全部锁的占比

  • 活动占比:统计到该等待事件轻量级锁的次数占全部活动的比例

  • 平均会话数:该锁出现的平均会话数

  1. Top SQL 命令类型

该报告展示客户端会话进程的SQL语句类型:

字段说明:

  • 命令类型:SQL语句类型

  • 差异Query ID:该类型下SQL语句数量

  • 命令占比:该SQL语句类型的占比

  • 平均会话数:该SQL语句的平均会话数

  1. Top 执行阶段

该报告展示客户端会话进程的SQL语句执行阶段:

字段说明:

  • 执行阶段:SQL语句的执行阶段,主要包括解析(Parse)、计划(Plan)、绑定(Bind)、执行(Execute)、同步(Sync)等

  • 阶段占比:该执行阶段占全部执行阶段采样数的比例

  • 活动占比:该执行阶段采样数占全部采样数量的比例

  • 平均会话数:该执行阶段的平均会话数

  1. 分段时间等待事件统计

该报告展示按时段(比如5分钟)统计的等待事件:

字段说明:

  • 启动:统计时段开始时间

  • 结束:统计时段结束时间

  • 区间采样数:统计时段内等待事件采样数

  • 事件类型:统计到的等待事件类型

  • 事件次数:该等待事件类型下等待事件的数量

  • 事件占比:该等待事件占全部等待事件的比例

通过该输出,可以发现报告区间发生的最多的等待事件、查询和客户端的信息,基于这些信息可以帮助使用者快速定位当前系统的瓶颈点。

KSH报告说明:

  • KSH仅支持管理员在主服务器运行(备机无法运行)

  • KSH功能仅能在kingbase库上使用

  • 历史数据的采样周期为10秒,实时数据的采样周期为1秒

  • 报告的采集要求开启:track_activities 和 sys_stat_statements 并设置 sys_kwr.collect_ksh = on

3.3.6.5. KWR和KSH比较 

 

sys_kwr

sys_ksh

定位

周期时间累积差异,查询特定时间段的累积变化

识别系统短暂(transient)变化, 秒级时刻的实时值

原理

以累积式计数反馈系统在一定周期内的整体负载和瓶颈

基于定时的采样方式进行会话和数据收集

场景

本次系统升级后有哪些整体改进, 当前时段与基线相比指标如何变化。

当前或历史某个时点,发生了什么样的异 常,系统在执行/运行什么任务

数据 留存

默认1小时采集,快照保留8天,超过8天后自动删除

默认1秒,实时数据保留1小时, 过后以1/10的比例存入历史数据

[转帖]3.3.6. 活跃会话历史报告SYS_KSH的更多相关文章

  1. [翻译]HTML5 - 会话历史和导航

            原文为:https://w3c.github.io/html/browsers.html#session-history-and-navigation 一.浏览上下文的会话历史记录 浏 ...

  2. Oracle活动会话历史(ASH)及报告解读

    对于数据库运行期间的各种状态的实时监控以及相关性能数据捕获对于解决性能问题,提高整体业务系统运行效率是至关重要的.在Oracle数据库中,实时捕获相关性能数据是通过ASH工具来实现的.ASH通过每秒钟 ...

  3. 深入学习 History 对象管理浏览器会话历史

    History对象允许我们操作浏览器会话历史,即加载当前页面的标签页窗口或frame窗口的访问历史.之前有同学咨询我如何实现拦截用户跳转页面并强制用户返回首页后重新请求页面,于是有了本篇博客的主题,本 ...

  4. 一键生成属于自己的QQ历史报告,看看你对自己的QQ了解程度有多深?

    目录 一键生成属于自己的QQ历史报告,看看你对自己的QQ了解程度有多深? 简介 功能截图 如何运行 编写思路 main.py模块 qq_bot模块 tkinter_gui模块 static_data模 ...

  5. Pytest 系列(26)- 清空 allure 历史报告记录

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 背景 pytest 运行 测试用例 ...

  6. oracle数据结构

    数据类型: 1 字符数据:CHAR VARCHAR NCHAR NVARCHAR2 LONG CLOB NCLOB  2 数字数据类型:NUMBER 唯一用来存储数字型的类型 3 日期数据类型: 4 ...

  7. Oracle中查询和定位数据库问题的SQL语句

    --1)查询和定位数据库问题的SQL语句--Oracle常用性能监控SQL语句.sql --1查询锁表信息 select vp.SPID, vs.P1, vs.P1RAW, vs.P2, vs.EVE ...

  8. oracle ash性能报告的使用方法

    活动会话历史报告活动会话历史v$active_session_history视图提供了在实例级别抽取会话活动信息.活动会话每分钟会被抽样一次且被存储在sga中的循环缓冲区中.任何被连接到数据库且正等待 ...

  9. 数据库会话数量过多,定期清理inactive会话

    1.1现象 存在一套11.2.0.4 RAC 2节点,数据库存在5000个会话数量,其中active正在执行的会话500个,其余均为非活跃会话. 大量inactive会话过多给Oracle数据库带来什 ...

  10. Session会话保持机制的原理与Tomcat Session共享的几种实现方式(Session Cluster、memcached+MSM)

    一.Session的定义 在计算机科学中,特别是在网络中,session是两个或更多个通信设备之间或计算机和用户之间的临时和交互式信息交换.session在某个时间点建立,然后在之后的某一时间点拆除. ...

随机推荐

  1. Mybatis 源码2——SqlSession,执行器和一级缓存

    一丶 SqlSessionFactoryBuilder,SqlSessionFactory,sqlSession mybatis 获取sqlSession是通过SqlSessionFactory获取的 ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (18)-- 算法导论4.1 5题

    五.使用如下思想为最大子数组问题设计一个非递归的.线性时间的算法.从数组的左边界开始,由左至右处理,记录到目前为止已经处理过的最大子数组.若已知 A[1..j]门的最大子数组,基于如下性质将解扩展为 ...

  3. HDU 2709 Sumset DP 二进制

    原题链接 题意 给我们一个整数k,要求我们将k分成若干个二的整数幂(1, 2, 4, 8...)的加和形式,问我们所有的分法中,本质不同(即某个2的幂的数量不同)的形式有多少种,k最多为1000000 ...

  4. JavaScript异步编程2——结合XMLHttpRequest使用Promise

    目录 1. 概述 2. 详论 3. 参考 1. 概述 在上一篇文章<JavaScript异步编程1--Promise的初步使用>,简单介绍了一下Promise的初步使用.复习一下,Prom ...

  5. 让gorm代码飞起来,gorm+gmodeltool生成entity,让实体类代码更轻松。

    背景 不卷!php经历多年的不衰败的原因只有一个,哪就是不卷,但是由于并发和缺乏编译严谨度降低,使得长青树不得己走向了衰败. 但!叱咤风云多年,大企百度.腾讯.新浪.搜狐的首先语言的流行在于,其语言的 ...

  6. Volcano:带你体验容器与批量计算的碰撞的火花

    摘要:今年(2020)7月初,Volcano 发布了1.0版本.1.0做为里程碑版本,在Volcano整个规划中起到了承上启下的作用.此次发布的1.0版本支持了GPU共享,作业动态扩缩容,批任务抢占等 ...

  7. 鸿蒙轻内核M核源码分析:数据结构之任务排序链表

    摘要:鸿蒙轻内核的任务排序链表,用于任务延迟到期/超时唤醒等业务场景,是一个非常重要.非常基础的数据结构. 本文会继续给读者介绍鸿蒙轻内核源码中重要的数据结构:任务排序链表TaskSortLinkAt ...

  8. appuploader 常规使用登录方法

      转载:登录appuploader 登录appuploader   常规使用登录方法 双击appuploader.exe 启动appuploader 点击底部的未登录,弹出登录框 在登录框内输入ap ...

  9. SpringBoot 配置 Swagger

    Profile Config 多环境不同配置 1.添加 Pom 文件 <dependency> <groupId>io.springfox</groupId> &l ...

  10. 精细化边缘安全防护:如何防止CDN域名被恶意刷量?

    越是数字化时代,越要做好基建"安全"的顶层设计 随着消费及产业互联网的不断发展,数字化将实现全场景覆盖,人类的生活和生产方式也随之不断改变. 内容分发网络CDN(Content D ...