7-简单巡检

KES的版本与license有效期

简单而又会产生灾难性的问题

使用version函数查看KES版本信息

test=# select version();

image-20241107144904823

查看license有效期

test=# select get_license_validdays(); 

image-20241107145222307

服务器的时区和时间

查看KES服务器的时区

test=# show timezone;
test=# show time_zone;
#两者皆可

image-20241107145430848

查看KES服务器的时间

test=# select now();				//查询至时间戳
test=# select current_timestamp;	 //查询至时间戳
test=# select sysdate;				//查询至时间
test=# select current_date;			//查询至日期

image-20241107150357606

启动时间与运行时长

查看数据库实例启动时间

test=# select sys_postmaster_start_time();

image-20241107151245292

查看KES无故障运行时长

test=# select date_trunc('second', current_timestamp -sys_postmaster_start_time()) as uptime;

image-20241107151455808

查看最近一次加载参数文件的时间

test=# select sys_conf_load_time();

image-20241107151949073

空间占用情况

查看数据库列表

1、使用ksql的参数-l

[kingbase@node1 ~]$ ksql -dtest -Usystem -l

image-20241107152245337

使用元命令\l

test=# \l

image-20241107152155864

2、使用数据字典

test=# select datname from sys_database;

image-20241107152514938

查看数据库占用的磁盘空间

1、统计当前数据库占用的磁盘空间

test=# select sys_database_size(current_database())/1024/1024 || 'MB'MB;

image-20241107153245112

2、统计所有数据库占用的磁盘空间总量

test=# select (sum(sys_database_size(datname))/1024/1024) || 'MB' MB from sys_database;     
-[ RECORD 1 ]-------------
mb | 64.3183355331420898MB

查看表和索引的大小

1、统计表的空间占用

sys_size_pretty这个函数可以将字节大小转换成人类可读的模式,sys_relation_size函数返回的是表的物理磁盘的大小,”||“用于拼接多个字符

这里将"select sys_relation_size(‘t01’)"返回的结果除以1024,然后在将其和kb拼接起来

test=# select sys_relation_size('t01')/1024 || 'kb' kb;
test=# select sys_size_pretty(sys_relation_size('public.t01'));

image-20241107155411614

2、统计表和与表关联的索引占用空间总量

使用sys_total_relation_size函数

test=# select sys_total_relation_size('t01')/1024 || 'kb' kb;
test=# select sys_size_pretty(sys_total_relation_size('t01'));

image-20241107160540646

3、统计表的记录数

test=# select count(*) || 'rows' "rows" from t01;

image-20241107160711937

数据库的连接信息

在巡检过程中,如在docker下部署KES数据库

查看当前登录数据库的名称

test=# select current_catalog;current_catalog 
-----------------test
(1 行记录)
test=# select current_database();current_database 
------------------test
(1 行记录)

查看当前会话信息

1、查看当前会话的客户端IP和端口

test=# select inet_client_addr(),inet_client_port();inet_client_addr | inet_client_port 
------------------+------------------192.168.40.111   |            14346
(1 行记录)

2、查看服务器的IP和端口

test=# select inet_server_addr(),inet_server_port();  inet_server_addr | inet_server_port 
------------------+------------------192.168.40.111   |            54321
(1 行记录)

3、查看当前会话的后台进程ID

test=# select sys_backend_pid();				//查看sys_backend_pid 
-----------------23134
(1 行记录)
test=# \! ps aux | grep 23134 | grep -v grep	 //验证
kingbase   23134  0.0  0.5 735144 20812 ?        Ss   16:27   0:00 kingbase: system test 192.168.40.111(14350) idle

查看数据库中的连接信息

从sys_stat_activity表中查询datname,usename,client_addr,client_port这几个字段

test=# select datname,usename,client_addr,client_port from sys_stat_activity;datname | usename |  client_addr   | client_port 
---------+---------+----------------+-------------|         |                |            | system  |                |            | system  |                |            test    | system  | 192.168.40.111 |       14350|         |                |            |         |                |            |         |                |            
(7 行记录)

查看会话执行的SQL信息

1、确认参数track_activities值为on

test=# show track_activities ;track_activities 
------------------on
(1 行记录)

2、只看正在运行的SQL信息

查看状态(state)为非idle的状态

test=# select datname,usename,query,state from sys_stat_activity where state not like 'idle%'; 
-[ RECORD 1 ]------------------------------------------------------------------------------------
datname | test
usename | system
query   | select datname,usename,query,state from sys_stat_activity where state not like 'idle%';
state   | active

查看耗时较长的SQL

原理是查询当前的时间减去开始的时间(query_start),通过在sys_stat_activity视图中查询current_timestamp字段得到当前的时间

where state != ‘idle’ 要求状态不是在线

order by 1 desc 为降序排列

test=# select current_timestamp - query_start as runtime,datname,usename,pid,query
test-# from sys_stat_activity
test-# where state != 'idle'
test-# order by 1 desc;
-[ RECORD 1 ]-----+------------------------------
current_timestamp | 2024-11-07 16:54:30.396887+08

实验1:事务阻塞会话的简单处理

会话1----实验准备

1、使用system用户登录数据库test

[kingbase@node1 ~]$ ksql test system

2、为保证实验不受影响,先删除t01数据库(使用不会报错的方式删除)

test=# drop table  if exists t01;
注意:  表 "t01" 不存在
DROP TABLE

3、创建表t01,字段为id和name,字段类型分别为int和text

test=# create table t01(id int,name text);
CREATE TABLE

4、向表t01中插入数据(1,‘a’)、(2,‘b’)和(3,‘c’)

test=# insert into t01 values (1,'a');
INSERT 0 1
test=# insert into t01 values (2,'b');
INSERT 0 1
test=# insert into t01 values (3,'c');
INSERT 0 1

5、查看当前是否有事务在运行

test=# commit;
警告:  没有事物在运行中
COMMIT

会话1-----关闭自动提交、删除记录

1、查看当前会话后台进程ID

test=# select sys_backend_pid();sys_backend_pid 
-----------------23274
(1 行记录)

2、将自动提交关闭

就是将AUTOCOMMIT给关闭掉,因为KES数据库默认是开启自动提交的

test=# \set AUTOCOMMIT off 

3、删除表t01中id为1的那行数据

test=# delete from t01 where id=1;
DELETE 1

会话2-----做与会话1同样的操作,结果:发生锁等待事件

锁等待产生的原因:会话1和会话2都删除了表t01中的id=1的行

如果会话1长时间没有去提交这个事务,会话2就没有办法执行,那么会话2就会去找DBA(数据库管理员),寻求怎么解决

DBA会处理这件事情,如何处理呢?通过sys_stat_activity来查看test的状态

通过观察wait_event_type等待的类型是不是产生一些事件,导致会话2没有办法进行

查看会话2的状态下wait_event_type是否为Lock

如果为Lock,会导致锁不上这条记录,只有锁上这条记录才能操作。所以此时是无法操作的

这时就要对会话1进行kill的处理

1、另外开启一个会话,使用system用户登录数据库test

[kingbase@node1 ~]$ ksql test system

2、查询当前会话的后台进程ID

test=# select sys_backend_pid();sys_backend_pid 
-----------------23527
(1 行记录)

3、关闭自动提交

test=# \set AUTOCOMMIT off

4、删除表t01中id为1的那行数据

执行完下述命令时,就会发现会话2不动了,这就产生了锁等待事件

test=# delete from t01 where id=1;

会话3-----查询会话状态

1、打开横向输出

\x

2、查看当前会话登录后台进程ID

test=# select sys_backend_pid();
-[ RECORD 1 ]---+------
sys_backend_pid | 23636

3、查看sys_stat_activity视图中关于test的内容

通过观察会话1、2、3的状态,可以在各个会话中wait_event_type和wait_event中看出会话1和会话2都是异常的,会话三是正常的

wait_event_type为Client表示等待事件,通常由客户端触发;wait_event_type为Lock表示锁状态

wait_event为ClientRead表示系统正在从客户端读取数据,wait_event为transactionid表示系统正在等待特定事务ID完成相关操作或资源释放

test=# select * from sys_stat_activity where datname='test';

image-20241107182054179

image-20241107182211490

会话3-----清理导致阻塞的会话(杀掉会话1),最重要

使用sys_terminate_backend(会话1ID)函数来kill掉会话1

test=# select sys_terminate_backend(23274);
-[ RECORD 1 ]---------+--
sys_terminate_backend | t

当我们执行完上述这一条kill会话1的命令,与此同时,会话2的锁等待事件也消失了,因为这个时候,delete表t01那行数据已经被释放掉了

会话2–会话1被断开(事务自动回滚)

1、确认:会话2由锁等待状态转为正常状态

通过pid的对比可以看到原先的会话2变成了现在的会话1

test=# select * from sys_stat_activity where datname='test';

image-20241107183603513

2、在原先的会话1任意执行一个命令,由此可以看出该会话被断开

test=# \l
致命错误:  由于管理员命令中断联接
服务器意外地关闭了联接这种现象通常意味着服务器在处理请求之前
或者正在处理请求的时候意外中止

image-20241107183749710

小结

KES中取消一条运行时间很长的SQL语句是"sys_cancel_backend"

注:

1、sys_cancel_backend:取消指定会话当前正在执行的SQL操作,会话还存在,回滚未提交事务

2、sys_terminate_backend:中断指定会话,回滚未提交事务

sys_stat_activity系统表

1、可以看到连接的状态信息

2、可以看到连接执行的SQL语句文本,以及过去所执行的SQL语句

3、可以看到事务开始的时间

这个实验主要是记住几个函数和系统视图及其功能

sys_stat_activity:系统视图,这里面有数据库中所有会话的状态信息

sys_backend_pid():用于会话ID的函数

命错误: 由于管理员命令中断联接
服务器意外地关闭了联接
这种现象通常意味着服务器在处理请求之前
或者正在处理请求的时候意外中止

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19880.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【金融风控项目-07】:业务规则挖掘案例

文章目录 1.规则挖掘简介2 规则挖掘案例2.1 案例背景2.2 规则挖掘流程2.3 特征衍生2.4 训练决策树模型2.5 利用结果划分分组 1.规则挖掘简介 两种常见的风险规避手段: AI模型规则 如何使用规则进行风控 **使用一系列逻辑判断(以往从职人员的经验)**对客户群体进行区…

RabbitMQ高可用

生产者确认 生产者确认就是:发送消息的人,要确保消息发送给了消息队列,分别是确保到了交换机,确保到了消息队列这两步。 1、在发送消息服务的application.yml中添加配置 spring:rabbitmq:publisher-confirm-type: correlated …

Redis的特性ubuntu进行安装

文章目录 1.六大特性1.1内存存储数据1.2可编程1.3可扩展1.4持久化1.5集群1.6高可用1.7速度快 2.具体应用场景(了解)3.Ubuntu安装Redis3.1安装指令3.2查看状态3.3查找配置文件3.4修改文件内容3.5重启服务器生效3.6安装客户端并进行检查 4.Redis客户端介绍…

本地音乐服务器(三)

6. 删除音乐模块设计 6.1 删除单个音乐 1. 请求响应设计 2. 开始实现 首先在musicmapper新增操作 Music findMusicById(int id);int deleteMusicById(int musicId); 其次新增相对应的.xml代码&#xff1a; <select id"findMusicById" resultType"com.exa…

leetcode【滑动窗口】相关题目分析讲解:leetcode209,leetcode904

经典滑动窗口(leetcode209) 题干 题目难度&#xff1a;简单 题目分析 要求找到符合大于等于target的长度最小的子数组的常规思路便是暴力破解——遍历数组&#xff0c;通过两层遍历&#xff0c;找到最小的子数组并返回。 但显而易见&#xff0c;这样时间复杂度会是O(n2)级…

ArkTS组件结构和状态管理

1. 认识基本的组件结构 ArkTS通过装饰器Component 和Entry 装饰 struct 关键字声明的数据结构&#xff0c;构成一个自定义组件 自定义组件中提供了一个build函数&#xff0c;开发者需要在函数内以链式调用的方式进行基本的UI描述&#xff0c;UI描述的方法请参考UI描述规范srtuc…

语义分割(semantic segmentation)

语义分割(semantic segmentation) 文章目录 语义分割(semantic segmentation)图像分割和实例分割代码实现 语义分割指将图片中的每个像素分类到对应的类别&#xff0c;语义区域的标注和预测是 像素级的&#xff0c;语义分割标注的像素级的边界框显然更加精细。应用&#xff1a…

【STM32】在 STM32 USB 设备库添加新的设备类

说实话&#xff0c;我非常想吐槽 STM32 的 USB device library&#xff0c;总感觉很混乱。 USB Device library architecture 根据架构图&#xff1a; Adding a custom class 如果你想添加新的设备类&#xff0c;必须修改的文件有 usbd_desc.cusbd_conf.cusb_device.c 需要…

【母线槽分类与选型】

母线槽是一种高效、安全、节能的输电设备&#xff0c;广泛应用于各类建筑和工业领域。母线槽可以根据不同的分类方式进行划分&#xff0c;例如根据其结构、用途、导体材质等。母线槽以铜或铝作为导体、用非烯性绝缘支撑&#xff0c;然后装到金属槽中而形成的新型导体。在高层建…

一些任务调度的概念杂谈

任务调度 1.什么是调度任务 依赖&#xff1a;依赖管理是整个DAG调度的核心。调度依赖包括依赖策略和依赖区间。 依赖分为任务依赖和作业依赖&#xff0c;任务依赖是DAG任务本身的依赖关系&#xff0c;作业依赖是根据任务依赖每天的作业产生的。两者在数据存储模型上有所不同…

Unifying Top-down and Bottom-up Scanpath Prediction Using Transformers

Abstract 大多数视觉注意力模型旨在预测自上而下或自下而上的控制&#xff0c;这些控制通过不同的视觉搜索和自由观看任务进行研究。本文提出了人类注意力变换器&#xff08;Human Attention Transformer&#xff0c;HAT&#xff09;&#xff0c;这是一个能够预测两种形式注意力…

解决MindSpore-2.4-GPU版本的安装问题

问题背景 虽说在MindSpore-2.3之后的版本中不在正式的发行版中支持GPU硬件后端&#xff0c;但其实在开发分支版本中对GPU后端是有支持的&#xff1a; 但是在安装的过程中可能会遇到一些问题或者报错&#xff0c;这里复现一下我的Ubuntu-20.04环境下的安装过程。 Pip安装 基本的…

【拥抱AI】如何使用BERT等预训练模型计算语义相似度

使用BERT等预训练模型计算语义相似度是一种非常有效的方法&#xff0c;可以捕捉句子之间的深层次语义关系。下面是一个详细的步骤指南&#xff0c;介绍如何使用BERT和Sentence-BERT来计算语义相似度。 1. 环境准备 1.1 安装必要的库 首先&#xff0c;确保你已经安装了必要的…

Excel常用技巧分享

excel单元格内换行 直接按回车会退出当前单元格的编辑&#xff0c;如果需要在单元格中换行&#xff0c;需要按下AltEnter。 excel插入多行或多列 WPS 在WPS中想要插入多行&#xff0c;只需在右键菜单中输入对应的数字即可。 Office Excel excel中相对麻烦一些&#xff0c;比…

C# .NET环境下调用ONNX格式YOLOV8模型问题总结

我的环境是&#xff1a; Visual Studio: 2019 显卡&#xff1a; 一、遇到问题 1、EntryPointNotFoundException:无法在DLL“onnxruntime”中找到名为“OrtGetApiBase”的入口点。差了下原因&#xff0c;入口点是启动项中的问题。 原因&#xff1a;之前用yolov7时安装的版本在C…

【PTA】【数据库】【SQL命令】编程题1

数据库SQL命令测试题1 10-1 显示教工编号以02开头的教师信息 作者 冰冰 单位 广东东软学院 显示教工编号以02开头的教师信息 提示&#xff1a;请使用SELECT语句作答。 表结构: CREATE TABLE teacher ( TId CHAR(5) NOT NULL, -- 教师工号&#xff0c;主键 DId CHAR(2) …

VSCode快速生成vue组件模版

1&#xff0c;点击设置&#xff0c;找到代码片段 2&#xff0c;搜索vue&#xff0c;打开vue.json 3&#xff0c;添加模版 vue2模板 "vue2": {"prefix": "vue2","body": ["<template>"," <div>$0</di…

理解DOM:前端开发的基础

理解DOM 在前端开发中&#xff0c;DOM&#xff08;文档对象模型&#xff09;是一个至关重要的概念。它不仅定义了如何通过编程方式访问和修改网页内容&#xff0c;还为我们提供了一种结构化的方式来与页面交互。本文将带你了解DOM的基本概念、不同节点的操作以及何时可以进行更…

如何将几个音频合成一个音频?非常简单的几种合成方法

如何将几个音频合成一个音频&#xff1f;音频合成不仅仅是将不同的音频文件按顺序排列&#xff0c;它还可能涉及到音量调节、剪辑、淡入淡出、音效调整等多个方面。对于一些专业的音频制作人员来说&#xff0c;音频的每一部分细节都可能需要精心打磨&#xff0c;以确保最终合成…

虚拟化表格(Virtualized Table)性能优化

文章目录 功能介绍一开始的代码领导让我们分析一下开始优化如何监听事件和传参&#xff1f;定位操作栏更加优化 功能介绍 菜鸟最近做的一个功能如下&#xff1a; 后端返回两个很大的数组&#xff0c;例如&#xff1a;数组a 1w条&#xff0c;数组b 2w条&#xff0c;然后要操作b…