[转帖]3.3.6. 活跃会话历史报告SYS_KSH
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 网页版示例报告说明如下:
报告和实例信息
该报告显示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表、混合三种)
TOP用户事件
该报告展示排名靠前的客户端会话等待事件,通过该报告可以知道数据库系统里哪些等待事件发生的比较多:

字段说明:
事件类型:等待事件所属的分类,其中OnCpu是指非等待事件
事件名称:等待事件的名称
采样数:报告期间采样到的等待事件数量
事件占比:报告期间采样到的等待事件数量占全部等待事件的百分比
平均会话数:平均每秒等待事件出现的会话数量
TOP后台事件
该报告展示排名靠前的后台进程的等待事件,通过该报告可以知道数据库系统里哪些等待事件发生的比较多:

字段说明:
事件类型:等待事件所属的分类,其中OnCpu是指非等待事件
事件名称:等待事件的名称
采样数:报告期间采样到的等待事件数量
活动占比:报告期间采样到的等待事件数量占全部等待事件的百分比
平均会话数:平均每秒等待事件出现的会话数量
TOP数据库
该报告展示访问次数排名靠前的数据库:

字段说明:
数据库名:数据库名称
访问次数:报告期间访问数据库的次数
活动占比:报告期间采样到的访问次数占全部访问次数的百分比
平均会话数:平均每秒访问出现的会话数量
Top PL/SQL 过程
该报告展示采样到的PL/SQL函数执行情况:

字段说明:
名称:PL/SQL函数名称
数据库名:执行该PL/SQL函数的数据库名称
活动占比:该函PL/SQL数执行占全部PL/SQL函数执行的百分比
平均会话数:平均每秒PL/SQL出现的会话数量
Top 简单查询
该报告主要展示使用简单报文(Simple Query)的SQL语句,即没有使用绑定变量的SQL语句统计:

字段说明:
Query ID:执行简单报文的SQL语句的ID,可以通过点击链接看详细SQL语句
活动占比:SQL语句占简单报文SQL语句的百分比
平均会话数:该SQL语句每秒平均会话数
采样数:KSH报告期间采样到的该SQL语句次数
SQL语句:SQL语句字符串,超长则截断
等待事件高的 TOP SQL
该报告统计等待时间最多的SQL语句:

字段说明:
Query ID:执行简单报文的SQL语句的ID,可以通过点击链接看详细SQL语句
采样数:KSH报告期间采样到的该SQL语句次数
活动占比:SQL语句占简单报文SQL语句的百分比
事件名称:等待事件的名称
事件次数:等待时间发生的次数
事件占比:该SQL语句当前等待事件占其全部等待事件的比例
SQL语句:SQL语句字符串,超长则截断
完整的 SQL 文本列表
该报告展示KSH报告中出现的Query ID对应完整SQL语句:

字段说明:
Query Id:SQL语句的query
采样数:该SQL语句的采样数
SQL语句:SQL语句的完整字符串
TOP会话
该报告展示TOP活跃会话的基本信息:

字段说明:
会话ID:活跃会话对应的进程ID
会话占比:该活跃会话出现的占比
事件名称:采样到的等待事件或者CPU的名称
事件占比:该事件占该会话全部事件的占比
客户程序:该会话的客户端名称
用户名:该会话的用户名
TOP客户端
该报告按客户端连接来统计活跃会话情况:

字段说明:
用户名:该客户端类型的用户名称
客户程序:该客户端应用名称
活动占比:统计到该客户端的活动占全部活动的比例
平均会话数:统计到该客户端的平均会话数
TOP 并行 SQL 等待事件
该报告主要展示客户端会话中的并行查询进程的SQL统计信息:

字段说明:
会话ID:统计到的并行进程的PID
活动占比:统计到该客户端的活动占全部活动的比例
事件名称:并行进程的等待事件或者CPU活动
事件占比:并行进程的等待事件或者CPU活动的占比
平均会话数:并行进程的平均活跃会话数
用户:并行进程的用户
客户程序:并行进程的客户端程序名称
Query Id:并行进程执行的SQL语句
Top 阻塞会话事件
该报告按进程展示阻塞类的会话事件,即Lock类等待事件的统计:

字段说明:
会话ID:发生阻塞等待事件的进程的PID
活动占比:该会话阻塞事件占全部事件的占比
平均会话数:进程的平均活跃会话数
事件名称:并行进程的等待事件或者CPU活动
事件占比:并行进程的等待事件或者CPU活动的占比
用户:并行进程的用户
客户程序:并行进程的客户端程序名称
Top 重量级锁等待事件
该报告展示客户端会话进程的重量级锁等待事件统计:

字段说明:
锁名称:统计的锁的名称
锁次数:统计的锁的次数
锁占比:统计的锁占全部锁的占比
活动占比:统计到该等待事件重量级锁的次数占全部活动的比例
平均会话数:该锁出现的平均会话数
Top 轻量级锁等待事件
该报告展示客户端会话进程的轻量级锁等待事件统计:

字段说明:
锁名称:统计的锁的名称
锁次数:统计的锁的次数
锁占比:统计的锁占全部锁的占比
活动占比:统计到该等待事件轻量级锁的次数占全部活动的比例
平均会话数:该锁出现的平均会话数
Top SQL 命令类型
该报告展示客户端会话进程的SQL语句类型:

字段说明:
命令类型:SQL语句类型
差异Query ID:该类型下SQL语句数量
命令占比:该SQL语句类型的占比
平均会话数:该SQL语句的平均会话数
Top 执行阶段
该报告展示客户端会话进程的SQL语句执行阶段:

字段说明:
执行阶段:SQL语句的执行阶段,主要包括解析(Parse)、计划(Plan)、绑定(Bind)、执行(Execute)、同步(Sync)等
阶段占比:该执行阶段占全部执行阶段采样数的比例
活动占比:该执行阶段采样数占全部采样数量的比例
平均会话数:该执行阶段的平均会话数
分段时间等待事件统计
该报告展示按时段(比如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的更多相关文章
- [翻译]HTML5 - 会话历史和导航
原文为:https://w3c.github.io/html/browsers.html#session-history-and-navigation 一.浏览上下文的会话历史记录 浏 ...
- Oracle活动会话历史(ASH)及报告解读
对于数据库运行期间的各种状态的实时监控以及相关性能数据捕获对于解决性能问题,提高整体业务系统运行效率是至关重要的.在Oracle数据库中,实时捕获相关性能数据是通过ASH工具来实现的.ASH通过每秒钟 ...
- 深入学习 History 对象管理浏览器会话历史
History对象允许我们操作浏览器会话历史,即加载当前页面的标签页窗口或frame窗口的访问历史.之前有同学咨询我如何实现拦截用户跳转页面并强制用户返回首页后重新请求页面,于是有了本篇博客的主题,本 ...
- 一键生成属于自己的QQ历史报告,看看你对自己的QQ了解程度有多深?
目录 一键生成属于自己的QQ历史报告,看看你对自己的QQ了解程度有多深? 简介 功能截图 如何运行 编写思路 main.py模块 qq_bot模块 tkinter_gui模块 static_data模 ...
- Pytest 系列(26)- 清空 allure 历史报告记录
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 背景 pytest 运行 测试用例 ...
- oracle数据结构
数据类型: 1 字符数据:CHAR VARCHAR NCHAR NVARCHAR2 LONG CLOB NCLOB 2 数字数据类型:NUMBER 唯一用来存储数字型的类型 3 日期数据类型: 4 ...
- Oracle中查询和定位数据库问题的SQL语句
--1)查询和定位数据库问题的SQL语句--Oracle常用性能监控SQL语句.sql --1查询锁表信息 select vp.SPID, vs.P1, vs.P1RAW, vs.P2, vs.EVE ...
- oracle ash性能报告的使用方法
活动会话历史报告活动会话历史v$active_session_history视图提供了在实例级别抽取会话活动信息.活动会话每分钟会被抽样一次且被存储在sga中的循环缓冲区中.任何被连接到数据库且正等待 ...
- 数据库会话数量过多,定期清理inactive会话
1.1现象 存在一套11.2.0.4 RAC 2节点,数据库存在5000个会话数量,其中active正在执行的会话500个,其余均为非活跃会话. 大量inactive会话过多给Oracle数据库带来什 ...
- Session会话保持机制的原理与Tomcat Session共享的几种实现方式(Session Cluster、memcached+MSM)
一.Session的定义 在计算机科学中,特别是在网络中,session是两个或更多个通信设备之间或计算机和用户之间的临时和交互式信息交换.session在某个时间点建立,然后在之后的某一时间点拆除. ...
随机推荐
- Python 潮流周刊第 35 期(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- Java中递归的简单应用
递归是一种非常常见的编程技巧,它可以将一个复杂的问题分解成更小的问题,然后递归地解决这些小问题,最终得到整个问题的解.递归的本质就是函数调用自身. 我们来看一个简单的例子:计算阶乘.阶乘是指将一个数和 ...
- [Python急救站]百钱买百鸡
百钱买百鸡:一人用100元买了100只鸡,其中公鸡5元一只,母鸡3元一只,小鸡1元一只.问:公鸡.母鸡.小鸡各多少只? 程序采用穷举法. for x in range(1, 21): for y in ...
- 2023-08-26:请用go语言编写。开心一下的智力题: 有一个村庄,一共250人, 每一个村民要么一定说谎,要么只说真话, 村里有A、B、C、D四个球队,且每个村民只会喜欢其中的一支球队, 但是说
2023-08-26:请用go语言编写.开心一下的智力题: 有一个村庄,一共250人, 每一个村民要么一定说谎,要么只说真话, 村里有A.B.C.D四个球队,且每个村民只会喜欢其中的一支球队, 但是说 ...
- MySQL思维导图:MySQL的架构介绍
MySQL的架构介绍(思维导图形式) MySQL简介 概述 MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性. ...
- “绝影”机器狗如何利用ModelArts强化学习算法更改导航轨迹
摘要:利用ModelArts平台云端协同进行强化学习AI能力部署,导航机器狗绕开火焰关闭可燃气体开关灭火. 在刚刚结束的HC Keynote中,为大家演示了基于华为ModelArts和Atlas 20 ...
- 带你了解TensorFlow pb模型常用处理方法
摘要:TensorFlow 模型训练完成后,通常会通过frozen过程保存一个最终的pb模型. 本文分享自华为云社区<TensorFlow pb模型修改和优化>,作者:luchangli. ...
- linux 实时刷新显示当前时间
同步阿里云时间 ntpdate ntp1.aliyun.com 使用watch命令:周期性的执行一个命令,并全屏显示. watch -n 1 date 即可:每1秒刷新date命令. # 格式 wat ...
- 基于Kresling折纸结构双稳态空间的无人机着陆系统新结构
摘要:本文利用动捕技术对无人机着陆系统模型进行动力学分析,对折纸结构双稳态着陆系统性能进行测试,为无人机着陆系统结构设计提供创新方法. 近期,一篇关于无人机着陆系统的研究论文"Evoluti ...
- 【JAVA基础】报错解决
报错解决 Failed to configure a DataSource: 'url' attribute is not specified and no embedd https://change ...