KingbaseES 统计信息收集器没有响应问题分析
统计信息收集器没有响应/Stats collector is not responding
问题现象:
kingbase数据库日志提示:统计信息收集器没有响应/Stats collector is not responding
示例Kingbase日志输出:
LOG: using stale statistics instead of current ones because stats collector is not responding
日志:由于统计信息收集器无响应而使用旧的统计信息来替代当前的统计信息.
原因:
场景1.统计信息收集器“stats collector”进程内部 UDP 连接连接超时(比如防火墙屏蔽的UDP协议),没有及时写入新的统计信息,导致过时的统计信息和其他潜在问题。
场景2.Kingbase数据日志持续大量的出现此信息,此场景下说明系统负载较高,资源不够用.
建议操作:
场景1,偶尔在数据库日志出现此问题,基本不用担心.保持关注就行.
场景2:统计收集器需要频繁收集统计信息,在高负载期间可能会导致上述的日志信息。
如果系统负载较高,系统资源紧张不够用,可以考虑将stats_temp_directory参数设置到基于 RAM 的文件系统上.
#需要关注内存的大小
1.kingbase.conf设置stats_temp_directory参数,需要重启数据库服务器.stats_temp_directory='/dev/shm'
2.手动mkdir 目录,使用mount挂载为tmpfs格式.tmpfs 的主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的。
[root@postgres ~]# df -TH
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.1G 0 1.1G 0% /dev
tmpfs tmpfs 1.1G 8.2k 1.1G 1% /dev/shm
tmpfs tmpfs 1.1G 9.4M 1.1G 1% /run
tmpfs tmpfs 1.1G 0 1.1G 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 19G 15G 3.9G 80% /
/dev/sda1 xfs 1.1G 212M 852M 20% /boot
/dev/mapper/datavg-datalv xfs 11G 9.7G 1.1G 90% /dbdata
tmpfs tmpfs 210M 0 210M 0% /run/user/0
mount -t tmpfs -o size=1G tmpfs /stat_test/
[root@postgres ~]# mkdir /stat_test
[root@postgres ~]# mount -t tmpfs -o size=1G tmpfs /stat_test/
[root@postgres ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 984M 0 984M 0% /dev
tmpfs tmpfs 1000M 8.0K 1000M 1% /dev/shm
tmpfs tmpfs 1000M 9.0M 991M 1% /run
tmpfs tmpfs 1000M 0 1000M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 17G 14G 3.6G 80% /
/dev/sda1 xfs 1014M 203M 812M 20% /boot
/dev/mapper/datavg-datalv xfs 10G 9.0G 1.1G 90% /dbdata
tmpfs tmpfs 200M 0 200M 0% /run/user/0
tmpfs tmpfs 1.0G 0 1.0G 0% /stat_test
然后kingbase.conf设置stats_temp_directory='/stat_test'
设置stats_temp_directory='/dev/shm',
[kingbase@postgres ora_data]$ ksql -Usystem -dtest
ksql (V8.0)
输入 "help" 来获取帮助信息.
test=# show stats_temp_directory ;
stats_temp_directory
----------------------
/dev/shm
(1 行记录)
--查看/dev/shm目录,有文件生成
[kingbase@postgres shm]$ pwd
/dev/shm
[kingbase@postgres shm]$ ls -l
总用量 48
-rw------- 1 kingbase kingbase 3892 1月 17 11:05 db_0.stat
-rw------- 1 kingbase kingbase 29073 1月 17 11:05 db_16269.stat
-rw------- 1 kingbase kingbase 639 1月 17 11:05 global.stat
-rw------- 1 kingbase kingbase 7408 1月 17 11:02 kingbase.94006976
--查看sys_stat_tmp目录
[kingbase@postgres sys_stat_tmp]$ ls -l
总用量 4
-rw------- 1 kingbase kingbase 423 1月 17 11:03 pgss_query_texts.stat
--查看sys_stat目录
[kingbase@postgres sys_stat]$ pwd
/home/kingbase/ora_data/sys_stat
[kingbase@postgres sys_stat]$ ls -l
总用量 0
--正常关闭数据库
[kingbase@postgres sys_stat]$ sys_ctl -D /home/kingbase/ora_data/ stop
waiting for server to shut down.... done
server stopped
--查看sys_stat目录
--正常关闭数据库会将/dev/shm下的统计信息文件拷贝到sys_stat目录持久保存.
[kingbase@postgres sys_stat]$ pwd
/home/kingbase/ora_data/sys_stat
[kingbase@postgres sys_stat]$ ls -l
总用量 48
-rw------- 1 kingbase kingbase 3892 1月 17 11:08 db_0.stat
-rw------- 1 kingbase kingbase 29073 1月 17 11:08 db_16269.stat
-rw------- 1 kingbase kingbase 639 1月 17 11:08 global.stat
-rw------- 1 kingbase kingbase 19 1月 17 11:08 instance.stat
-rw------- 1 kingbase kingbase 1915 1月 17 11:08 sys_stat_statements.stat
--启动数据库
[kingbase@postgres sys_stat]$ sys_ctl -D /home/kingbase/ora_data/ start
waiting for server to start....2023-01-17 11:10:18.739 CST [25116] LOG: sepapower extension initialized
2023-01-17 11:10:18.744 CST [25116] LOG: starting KingbaseES V008R006C006B0021 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 64-bit
2023-01-17 11:10:18.745 CST [25116] LOG: listening on IPv4 address "0.0.0.0", port 54321
2023-01-17 11:10:18.745 CST [25116] LOG: listening on IPv6 address "::", port 54321
2023-01-17 11:10:18.751 CST [25116] LOG: listening on Unix socket "/tmp/.s.KINGBASE.54321"
2023-01-17 11:10:18.884 CST [25116] LOG: redirecting log output to logging collector process
2023-01-17 11:10:18.884 CST [25116] HINT: Future log output will appear in directory "sys_log".
done
server started
[kingbase@postgres sys_stat]$
--sys_stat目录下无文件
[kingbase@postgres sys_stat]$ pwd
/home/kingbase/ora_data/sys_stat
[kingbase@postgres sys_stat]$ ls -l
总用量 0
--启动数据库后加载统计信息临时文件到/dev/shm目录
[kingbase@postgres sys_stat]$ ls -l /dev/shm
总用量 16
-rw------- 1 kingbase kingbase 3892 1月 17 11:10 db_0.stat
-rw------- 1 kingbase kingbase 639 1月 17 11:10 global.stat
-rw------- 1 kingbase kingbase 7408 1月 17 11:10 kingbase.166558517
[kingbase@postgres sys_stat]$ pwd
/home/kingbase/ora_data/sys_stat
[kingbase@postgres sys_stat]$ ls -l
关于统计信息收集器:
1.统计信息收集器可以对表和索引的访问计数,计数可以按磁盘块和个体行来进行。
2.跟踪每个表中的总行数、每个表的清理和分析动作的信息。
3.统计调用用户定义函数的次数以及在每次调用中花费的总时间。
4.会话的每个后端都是Kingbase中的一个单独进程,在负载较高的系统收集统计信息并不是一件容易的事。
5.每个后端进程将(通过UDP套接字进行通信)有关他们所做的活动的信息发送到单个"stats collector"进程。
6.Kingbase数据库通过与“stats collector”进程的内部 UDP 连接,将每个表的统计信息和其他内部指标写入目录统计表。
类别:服务器事件(Server Events)
Kingbase数据库后台进程:统计信息收集器进程stats collector
kingbase: stats collector 进程为统计信息收集器进程
[kingbase@postgres ~]$ ps -ef|grep kingbase | grep -v grep
root 20288 20157 0 09:18 pts/1 00:00:00 su - kingbase
kingbase 20290 20288 0 09:18 pts/1 00:00:00 -bash
kingbase 20708 1 0 09:26 ? 00:00:01 /home/kingbase/V8R6C6B21/ES/V8/KESRealPro/V008R006C006B0021/Server/bin/kingbase -D /home/kingbase/ora_data
kingbase 20710 20708 0 09:26 ? 00:00:00 kingbase: logger
kingbase 20713 20708 0 09:26 ? 00:00:00 kingbase: checkpointer
kingbase 20714 20708 0 09:26 ? 00:00:00 kingbase: background writer
kingbase 20715 20708 0 09:26 ? 00:00:00 kingbase: walwriter
kingbase 20716 20708 0 09:26 ? 00:00:00 kingbase: autovacuum launcher
kingbase 20717 20708 0 09:26 ? 00:00:00 kingbase: archiver
kingbase 20718 20708 0 09:26 ? 00:00:00 kingbase: stats collector
kingbase 20719 20708 0 09:26 ? 00:00:00 kingbase: ksh writer
kingbase 20720 20708 0 09:26 ? 00:00:00 kingbase: ksh collector
kingbase 20721 20708 0 09:26 ? 00:00:00 kingbase: kwr collector
kingbase 20722 20708 0 09:26 ? 00:00:00 kingbase: job bgworker
kingbase 20723 20708 0 09:26 ? 00:00:00 kingbase: logical replication launcher
kingbase 21990 20290 0 10:00 pts/1 00:00:00 ps -ef
统计信息收集配置参数:
track_activities:允许监控当前被任意服务器进程执行的命令。
track_counts:控制是否收集关于表和索引访问的统计信息。
track_functions:启用对用户定义函数使用的跟踪。
track_io_timing:启用对块读写次数的监控。
test=> show track_activities;
track_activities
------------------
on
(1 行记录)
test=> set track_activities to off;
ERROR: permission denied to set parameter "track_activities"
test=# show track_activities;
track_activities
------------------
off
(1 行记录)
test=# set track_activities to on;
SET
参数设置在kingbase.conf中,会应用于所有服务器进程.可以在单个会话中使用SET命令打开或关闭(只有超级用户允许使用SET来改变这些参数)。
统计收集器通过临时文件将收集到的信息传送给其他Kingbase进程。这些文件被存储在参数stats_temp_directory指定的目录中,默认是sys_stat_tmp.
test=# show stats_temp_directory ;
stats_temp_directory
----------------------
sys_stat_tmp
(1 行记录)
[kingbase@postgres sys_stat_tmp]$ pwd
/home/kingbase/ora_data/sys_stat_tmp
[kingbase@postgres sys_stat_tmp]$ ls -l *
-rw------- 1 kingbase kingbase 3892 1月 17 10:20 db_0.stat
-rw------- 1 kingbase kingbase 29073 1月 17 10:20 db_16269.stat
-rw------- 1 kingbase kingbase 639 1月 17 10:20 global.stat
-rw------- 1 kingbase kingbase 19 1月 17 10:06 instance.stat
-rw------- 1 kingbase kingbase 1584 1月 17 10:19 pgss_query_texts.stat
服务器正常关闭时,统计数据会拷贝sys_stat_tmp目录的副本永久的存储在sys_stat目录中,这样在服务器重启后统计信息能被正常的加载访问。当服务器启动异常故障需要执行恢复时(例如立即关闭、服务器崩溃以及时间点恢复之后),所有统计计数器会被重置。
[kingbase@postgres sys_stat]$ pwd
/home/kingbase/ora_data/sys_stat
[kingbase@postgres sys_stat]$ ls -l
总用量 52
-rw------- 1 kingbase kingbase 3892 1月 17 10:23 db_0.stat
-rw------- 1 kingbase kingbase 29073 1月 17 10:23 db_16269.stat
-rw------- 1 kingbase kingbase 639 1月 17 10:23 global.stat
-rw------- 1 kingbase kingbase 19 1月 17 10:23 instance.stat
-rw------- 1 kingbase kingbase 4852 1月 17 10:23 sys_stat_statements.stat
KINGBASE研究院