暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Kingbase V9简单巡检脚本

前言:

Kingbase简单巡检的意义在于确保数据库系统的稳定运行和性能优化。通过定期执行一系列的检查和测试,可以及时发现潜在的问题,如数据库性能瓶颈、硬件故障、软件漏洞等,并采取相应的措施进行修复和优化。

一、KES基本信息巡检

1.1、使用sys_ctl查看版本

  • 方法1
[kingbase@Node1 ~]$ sys_ctl -V
sys_ctl (Kingbase) 12.1
[kingbase@Node1 ~]$
  • 方法2
[kingbase@Node1 ~]$ sys_ctl --version
sys_ctl (Kingbase) 12.1
[kingbase@Node1 ~]$

1.2、使用version函数查看版本

说明:检查脚本如下:
ksql -U system -d test -c 'SELECT version()'
代码如下:
[kingbase@Node1 ~]$ ksql -Usystem -dtest
用户 system 的口令:
输入 "help" 来获取帮助信息.

test=# select  version();
                                                       version
----------------------------------------------------------------------------------------------------------------------
 KingbaseES V009R001C001B0030 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28), 64-bit
(1 行记录)

test=#

1.3、查看license有效期

说明:检查脚本如下:
ksql -U system -d test -c 'SELECT get_license_validdays()'
代码如下:
[kingbase@Node1 ~]$ ksql -Usystem -dtest -c 'SELECT get_license_validdays()'
用户 system 的口令:
 get_license_validdays
-----------------------
                    64
(1 行记录)

[kingbase@Node1 ~]$

1.4、查看数据库实例启动时间

代码如下:
[kingbase@Node1 ~]$ ksql -Usystem -dtest -c 'SELECT sys_postmaster_start_time();'
用户 system 的口令:
   sys_postmaster_start_time
-------------------------------
 2024-11-07 16:46:07.149917+08
(1 行记录)

[kingbase@Node1 ~]$

1.5、查看KES无故障运行时长

说明:检查脚本如下:
ksql -U system -d test
SELECT date_trunc('second',current_timestamp -sys_postmaster_start_time()) as uptime;
代码如下:
[kingbase@Node1 ~]$ ksql -Usystem -dtest
用户 system 的口令:
输入 "help" 来获取帮助信息.

test=#
test=# SELECT date_trunc('second',current_timestamp -sys_postmaster_start_time()) as uptime;
            uptime
-------------------------------
 +000000000 00:06:24.000000000
(1 行记录)

test=#

二、KES数据库相关信息简单巡检

2.1、使用ksql的-l参数或元命令

说明:检查脚本如下:
ksql -U system -d test -l
ksql -U system -d test
\l
代码如下:
[kingbase@Node1 ~]$ ksql -U system -d test -l
用户 system 的口令:
                                   数据库列表
    名称    | 拥有者 | 字元编码 |  校对规则   |    Ctype    |     存取权限
------------+--------+----------+-------------+-------------+-------------------
 cssdserver | sy     | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |
 db02       | user2  | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |
 kingbase   | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |
 security   | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |
 template0  | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/system        +
            |        |          |             |             | system=CTc/system
 template1  | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/system        +
            |        |          |             |             | system=CTc/system
 test       | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |
(7 行记录)

[kingbase@Node1 ~]$

2.2、使用数据字典

说明:检查脚本如下:
SELECT datname FROM sys_database;
代码如下:
[kingbase@Node1 ~]$ ksql -Usystem -dtest -c 'SELECT datname FROM sys_database;'
用户 system 的口令:
  datname
------------
 test
 kingbase
 template1
 template0
 security
 cssdserver
 db02
(7 行记录)

[kingbase@Node1 ~]$

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

说明:检查脚本如下:
SELECT sys_database_size(current_database())/1024/1024 || 'MB' MB;


> ##### 代码如下:

[kingbase@Node1 ~]$ ksql -U system -d test
用户 system 的口令:
输入 "help" 来获取帮助信息.

test=# SELECT sys_database_size(current_database())/1024/1024 || 'MB' MB;
          mb
----------------------
 14.209979057312012MB
(1 行记录)

test=#

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

说明:检查脚本如下:
SELECT(sum(sys_database_size(datname))/1024/1024) || 'MB' MB FROM sys_database;


> ##### 代码如下:

[kingbase@Node1 ~]$ ksql -U system -d test
用户 system 的口令:
输入 "help" 来获取帮助信息.

test=# SELECT(sum(sys_database_size(datname))/1024/1024) || 'MB' MB FROM sys_database;
           mb
------------------------
 105.4849138259887695MB
(1 行记录)

test=#

三、查看表和索引的大小

3.1、统计表的空间占用

说明:检查脚本如下:
SELECT sys_relation_size('public.t01')/1024|| 'kB' KB;
SELECT sys_size_pretty(sys_relation_size('public.t01'));
代码如下:
[kingbase@Node1 ~]$ ksql -U system -d test
用户 system 的口令:
输入 "help" 来获取帮助信息.

test=# SELECT sys_relation_size('public.t01')/1024|| 'kB' KB;
 kb
-----
 0kB
(1 行记录)

test=# SELECT sys_size_pretty(sys_relation_size('public.t01'));
 sys_size_pretty
-----------------
 0 bytes
(1 行记录)

test=#

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

说明:检查脚本如下:
SELECT sys_total_relation_size('public.t01')/1024|| 'kB' KB;
SELECT sys_size_pretty(sys_total_relation_size('public.t01'));
代码如下:
[kingbase@Node1 ~]$ ksql -U system -d test
用户 system 的口令:
输入 "help" 来获取帮助信息.

test=# SELECT sys_total_relation_size('public.t01')/1024|| 'kB' KB;
 kb
-----
 0kB
(1 行记录)

test=# SELECT sys_size_pretty(sys_total_relation_size('public.t01'));
 sys_size_pretty
-----------------
 0 bytes
(1 行记录)

test=#

3.3、统计表的记录数

说明:检查脚本如下:
SELECT count(*) || ' rows' "rows" FROM public.t01;
代码如下:
[kingbase@Node1 ~]$ ksql -U system -d test
用户 system 的口令:
输入 "help" 来获取帮助信息.

test=# SELECT count(*) || ' rows' "rows" FROM public.t01;
  rows
--------
 0 rows
(1 行记录)

test=#

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

说明:检查脚本如下:
SELECT current_catalog;
SELECT current_database();
代码如下:
[kingbase@Node1 ~]$ ksql -U system -d test -c 'SELECT current_catalog;'
用户 system 的口令:
 current_catalog
-----------------
 test
(1 行记录)

[kingbase@Node1 ~]$
 
 
[kingbase@Node1 ~]$ ksql -U system -d test -c 'SELECT current_database();'
用户 system 的口令:
 current_database
------------------
 test
(1 行记录)

[kingbase@Node1 ~]$

四、查看时区和时间

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

说明:检查脚本如下:
SELECT sys_conf_load_time();
代码如下:
[kingbase@Node1 ~]$ ksql -U system -d test
用户 system 的口令:
输入 "help" 来获取帮助信息.

test=# SELECT sys_conf_load_time();
      sys_conf_load_time
-------------------------------
 2024-11-07 22:45:06.776086+08
(1 行记录)

test=#

4.2、查看时区

说明:检查脚本如下:
SHOW timezone;
代码如下:
[kingbase@Node1 ~]$ ksql -U system -d test
用户 system 的口令:
输入 "help" 来获取帮助信息.

test=# SHOW timezone;
   TimeZone
---------------
 Asia/Shanghai
(1 行记录)

test=#

4.3、查看当前日期或时间

说明:检查脚本如下:
SELECT now();
SELECT current_timestamp;
SELECT sysdate;
SELECT current_date;
代码如下:
[kingbase@Node1 ~]$ ksql -U system -d test
用户 system 的口令:
输入 "help" 来获取帮助信息.

test=# SELECT now();
              now
-------------------------------
 2024-11-07 17:46:23.256851+08
(1 行记录)

test=# SELECT current_timestamp;
       current_timestamp
-------------------------------
 2024-11-07 22:46:30.892257+08
(1 行记录)

test=# SELECT sysdate;
       sysdate
---------------------
 2024-11-07 22:46:38
(1 行记录)

test=# SELECT current_date;
 current_date
--------------
 2024-11-07
(1 行记录)

test=#

五、查看当前会话信息

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

说明:检查脚本如下:
ksql -h 192.168.4.141 -p 54321 -U system -d test
SELECT inet_client_addr(),inet_client_port();
代码如下:
[kingbase@Node1 ~]$ ksql -h 192.168.4.141 -p 54321 -U system -d test
用户 system 的口令:
输入 "help" 来获取帮助信息.

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

test=#

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

说明:检查脚本如下:
ksql -h 192.168.4.141 -p 54321 -U system -d test
SELECT inet_server_addr(),inet_server_port();
代码如下:
[kingbase@Node1 ~]$ ksql -h 192.168.4.141 -p 54321 -U system -d test
用户 system 的口令:
输入 "help" 来获取帮助信息.

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

test=#

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

说明:检查脚本如下:
ksql -U system -d test
SELECT sys_backend_pid();
\! ps -ef | grep 7130 | grep -v grep
代码如下:
[kingbase@Node1 ~]$ ksql -U system -d test
用户 system 的口令:
输入 "help" 来获取帮助信息.

test=# SELECT sys_backend_pid();
 sys_backend_pid
-----------------
            2003
(1 行记录)

test=# \! ps -ef | grep 2003 | grep -v grep
kingbase    2003    1275  0 17:05 ?        00:00:00 kingbase: system test [local] idle
test=#

六、查看数据库信息

6.1、查看数据库中的连接信息

说明:检查脚本如下:
SELECT datname,usename,client_addr,client_port FROM sys_stat_activity;
代码如下:
[kingbase@Node1 ~]$
[kingbase@Node1 ~]$ ksql -U system -d test -c 'SELECT datname,usename,client_addr,client_port FROM sys_stat_activity;'
用户 system 的口令:
 datname  | usename | client_addr | client_port
----------+---------+-------------+-------------
 kingbase | system  |             |
          | system  |             |
          |         |             |
          | system  |             |
 test     | system  |             |          -1
          |         |             |
          |         |             |
          |         |             |
(8 行记录)

[kingbase@Node1 ~]$

6.2、查看会话执行的SQL信息

注意:此处需设置参数track_activities为on
说明:检查脚本如下:
show track_activities;

> ##### 代码如下:

[kingbase@Node1 ~]$ ksql -U system -d test -c 'show track_activities;'
用户 system 的口令:
 track_activities
------------------
 on
(1 行记录)

[kingbase@Node1 ~]$

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

说明:检查脚本如下:
SELECT datname,usename,client_addr,client_port FROM sys_stat_activity;
代码如下:
[kingbase@Node1 ~]$ ksql -U system -d test -c 'SELECT datname,usename,client_addr,client_port FROM sys_stat_activity;'
用户 system 的口令:
 datname  | usename | client_addr | client_port
----------+---------+-------------+-------------
 kingbase | system  |             |
          | system  |             |
          |         |             |
          | system  |             |
 test     | system  |             |          -1
          |         |             |
          |         |             |
          |         |             |
(8 行记录)

[kingbase@Node1 ~]$

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

说明:检查脚本如下:
SELECT datname,usename,query,state FROM sys_stat_activity WHERE state not like 'idle%';
代码如下:
[kingbase@Node1 ~]$ ksql -U system -d test
用户 system 的口令:
输入 "help" 来获取帮助信息.

test=# SELECT datname,usename,query,state FROM sys_stat_activity WHERE state not like 'idle%';
 datname | usename |                                          query                                          | state
---------+---------+-----------------------------------------------------------------------------------------+--------
 test    | system  | SELECT datname,usename,query,state FROM sys_stat_activity WHERE state not like 'idle%'; | active
(1 行记录)

test=#

6.4、查看耗时较长的SQL

说明:检查脚本如下:
\x
SELECT current_timestamp - query_start as runtime,datname,usename,pid,query FROM sys_stat_activity WHERE state != 'idle' ORDER BY 1 desc;
代码如下:
[kingbase@Node1 ~]$ ksql -U system -d test
用户 system 的口令:
输入 "help" 来获取帮助信息.

<tname,usename,pid,query FROM sys_stat_activity WHERE state != 'idle' ORDER BY 1 desc;
            runtime            | datname | usename | pid  |                                                                   query

-------------------------------+---------+---------+------+------------------------------------------------------------------------
-------------------------------------------------------------------
 +000000000 00:00:00.000000000 | test    | system  | 2049 | SELECT current_timestamp - query_start as runtime,datname,usename,pid,q
uery FROM sys_stat_activity WHERE state != 'idle' ORDER BY 1 desc;
(1 行记录)

test=#

结尾

巡检的主要目的:

  • 保障数据库系统的稳定性:通过检查数据库的各项指标,如CPU使用率、内存使用率、磁盘I/O等,可以及时发现系统异常,避免因系统故障导致的数据丢失或业务中断。
  • 提高数据库性能:通过分析数据库的查询执行计划、索引使用情况等,可以找出性能瓶颈,进行相应的优化,提高数据库的响应速度和吞吐量。
  • 预防潜在问题:通过定期的巡检,可以提前发现潜在的问题,如硬件老化、软件漏洞等,采取相应的措施进行预防,避免问题扩大化。
  • 提高数据库的可靠性:通过对数据库的备份、恢复等操作进行检查,可以确保数据库的备份和恢复机制的有效性,提高数据库的可靠性。

kingbase简单巡检对于保障数据库系统的稳定运行和性能优化具有重要意义。通过定期执行巡检,可以及时发现潜在的问题,采取相应的措施进行修复和优化,提高数据库的可靠性和性能,从而保障业务的顺利进行。

最后修改时间:2024-11-07 18:09:05
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论