kingbase(人大金仓)数据库的常用知识点与简单巡检

2026年01月20日/ 浏览 9

KES服务的启停

查看服务是否已设为开机自启

systemctl list-dependencies |grep kingbase

除了使用systemctl和service还可以使用sys_ctl管理KES服务

也可以到安装目录下的Server/bin/目录下执行sys_ctl命令

sys_ctl -D /../data/ start

问题:人大金仓数据库连接人数过多解决方法:

先执行:select * from pg_stat_activity;

再执行:SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE state=idle

命令行工具--KSQL

kingbase命令行连接方式

一、使用SOCKET方式登录数据库

ksql -d test -U SYSTEM (参数详解看一下help:ksql --help)

注意使用此方式连接无需用户密码

二、使用TCP/IP方式登录数据库

1.切换登录用户

2.切换连接的数据库

3.同时切换登录的用户和数据库

执行脚本

登录test库使用“\i”执行/tmp/test.sql脚本

非交互方式执行SQL(单条SQL)

非交互方式执行SQL(多条SQL)

把多条SQL语句写在一个脚本里然后执行

用户与角色

创建和修改用户

修改用户密码,(普通用户无密码不能登录)

修改用户的并发连接数

修改用户密码有效期为永久

修改属主,删除用户

创建角色

角色默认不能登录,需要授予登录权限:alter role角色名 login;

创建角色并允许登录:

create role user01 connection limit 2 password kingbase valid until 2030-12-31 login;

利用角色对多个用户批量授权

加入到角色的用户默认将自动继承该角色拥有的所有权限

将用户加入到角色中

加入角色的第二种方法

create user 用户名 IN ROLE 角色名;

对象的访问权限入门

使用KSQL 元命令查看权限信息

查看用户对模式对象拥有的权限(\dp)

使用KSQL查权限的输出信息解读

授权与转授权

改变对象所有者

移除用户对表的权限

数据库、模式、表空间

数据库

查——>列出集簇中现有数据库的清单

\l

增——>创建数据库

test=# create user user05 password kingbase; CREATE ROLE test=# create database db03 owner user05 template template0 test-# encoding utf8 connection limit 10; CREATE DATABASE test=# \x 扩展显示已打开. test=# \l+ db03 数据库列表 -[ RECORD 1 ]--------- 名称 | db03 拥有者 | user05 字元编码 | UTF8 校对规则 | zh_CN.UTF-8 Ctype | zh_CN.UTF-8 存取权限 | 大小 | 12 MB 表空间 | sys_default 描述 |

改、查——>修改和查看修改后的数据库的属主和名称(\l+)”+“表示详细输出

删——>非属主/非超级用户或库正在使用不能删除

模式

查——>列出test库中的模式清单

增——>创建模式

改——>修改模式

查——>检查模式修改结果

删——>删除模式

表空间

查——>列出表空间的清单

增——>创建表空间

规划表空间对应的文件系统目录

新建表空间tbs01

改——>修改表空间

修改数据库默认表空间

移动表到新的表空间

查看现有表空间是\db,数据库列表是\l

查——>检查表空间修改结果

删——>删除表空间

当提示非空,删除失败时:

简单巡检

使用sys_ctl -V——查看版本

使用version函数查看版本

ksql test system -c select version()

查看license有效期

ksql test system -c select get_license_validdays()

查看KES实例启动时间和运行时常

select sys_postmaster_start_time();

查看KES无故障运行时长

select date_trunc(second,current_timestamp - sys_postmaster_start_time()) as uptime;

查看数据库列表

ksql test system -l

使用数据字典查看数据库列表

select datname from sys_database;

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

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

select sys_database_size(current_database())/1024/1024 || MB MB;

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

select (sum(sys_database_size(datname))/1024/1024) || MB MB from sys_database;

查看表和索引的大小

统计表的空间占用

1. select sys_relation_size(public.t02)/1024|| KB KB;

2. select sys_size_pretty(sys_relation_size(public.t02));

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

1. select sys_total_relation_size(public.t02)/1024|| KB KB;

2. select sys_size_pretty(sys_total_relation_size(public.t01));

统计表的记录

select count(*) || rows "rows" from public.t02;

查看时区时间

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

select sys_conf_load_time();

查看时区

show timezone;

查看当前日期或时间

#日期

select current_date;

#日期加时间

select now(); select current_timestamp; select sysdate;

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

select current_catalog;

select current_database();

查看当前会话信息

1.查看当前会话的客户端IP和端口(注意如果使用缺省方式登录则不会显示信息)

select inet_client_addr(),inet_client_port();

2.查看当前会话的服务器IP和端口(注意如果使用缺省方式登录则不会显示信息)

select inet_server_addr(),inet_server_port();

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

select sys_backend_pid();

#方法二

\! ps -ef|grep 30343|grep -v grep

查看数据库中的连接信息

查看所有会话执行的SQL信息

1.设置参数track_activities为on

show track_activities;

2.查看所有会话执行的SQL信息

select datname,usename,client_addr,client_port from sys_stat_activity;

3.只看正运行的SQL信息

select datname,usename,query,state^Jfrom sys_stat_activity ^Jwhere state not like idle%;

查看耗时较长的SQL

select current_timestamp - query_start as runtime,datname,usename,pid,query from sys_stat_activity where state != idle order by 1 desc;

事务阻塞绘画的简单处理

一、关闭自动提交后删除记录

select sys_backend_pid();

二、删除相同记录时发生锁等待事件

三、查询会话状态

select datname,usename,query,wait_event,pid from sys_stat_activity where datname=test;

后续更精彩......

picture loss