数据解析
本文介绍数据模型、数据存储模式及其对应的数据详细说明。
数据模型及存储模式
为了让数据更灵活的在PolarDB PostgreSQL版(兼容Oracle)数据库和时序数据库中进行存储,阿里云对监控数据模型进行了抽象,与数据仓库的基本概念一样,会为每一个主题的数据单独建立一张表,称之为数据模型。该表具有三种类型的列:维度列、指标列和时间列,其中指标列即为采集指标,为数值类型;维度列是对应指标列的描述,一般为字符串类型,在时序数据库中其表现形式为tag或label字段。
在实际存储中,所有监控数据均存储在postgres库中的polar_gawr_collection
模式下:
以
fact_
开头的表即为一个数据模型,维度列、指标列和时间列分别有以下对应关系:以
tag
开头的列,为维度列,一般为TEXT类型,如果为INTEGER类型,则会和对应的维度表相关联。以
value_
开头的列,为指标列,为INT8类型。time列为时间列,存储秒级时间戳,使用to_timestamp函数可以还原出可读时间。
以
dim_
开头的表为维度表,其可与对应fact表中的对应列相关联,其中dim_ins_info
维度表较为特殊,它会与每一个fact表的tag_ins_info
列相关联,标识采集元信息。以
agg_
开头的表为fact表的聚合表,其末尾表示聚合粒度,单位为秒。以
view_
开头的是视图,它会将fact_
表和dim_
表做好关联,如果需要查询,只需查视图即可。
示例
以polar_stat_process
为例,在postgres
库的polar_gawr_collection
模式下存在如下表fact_polar_stat_process
。
select * from polar_gawr_collection.fact_polar_stat_process limit 1;
显示结果如下:
-[ RECORD 1 ]-----------------+-----------
tag_backend_type | 2
tag_ins_info | 3
time | 1645010019
value_backend_num | 1
value_cpu_sys | 0.1
value_cpu_user | 0.1
value_local_read_ps | 0
value_local_read_throughput | 0
value_local_write_ps | 0
value_local_write_throughput | 0
value_rss | 2
value_shared_read_ps | 0
value_shared_read_throughput | 0
value_shared_write_ps | 0
value_shared_write_throughput | 0
value_
开头的列为指标列。tag_
开头的列为维度列,INTEGER类型的维度列可以和dim_polar_stat_process_backend_type
的ID列做关联:
select * from polar_gawr_collection_db_lq$pg$2.dim_polar_stat_process_backend_type where id = 2;
显示结果如下:
-[ RECORD 1 ]+---------------------------
id | 2
backend_type | background logindex writer
可以在view_fact_polar_stat_process
表查看已关联好的结果。
select * from polar_gawr_collection.view_fact_polar_stat_process limit 1;
显示结果如下:
-[ RECORD 1 ]-----------+----------------------------------------------
logical_ins_name | xxxxxx
physical_ins_name | xxxxxxxxxxx
host | xxxxxxxxx
port | xxxx
role | Standby
version | release date: 20211231, polar version: 1.1.20
backend_type | background logindex writer
time | 1645010019
shared_write_ps | 0
shared_write_throughput | 0
backend_num | 1
cpu_sys | 0.1
local_write_ps | 0
local_write_throughput | 0
local_read_ps | 0
shared_read_ps | 0
local_read_throughput | 0
rss | 2
shared_read_throughput | 0
cpu_user | 0.1
数据详细说明
采集到的监控信息保存在数据库的表内,包括等待事件统计、数据库IO及延迟分布、各后端进程的资源统计等信息。每一类监控信息对应一张数据表,每张数据表包含维度列和指标列。
dbmetrics
dbmetrics展示了采集到的数据库系统资源消耗情况及基本监控项,其指标和描述如下:
指标 | 周期 | 单位 | 说明 |
CPU | |||
cpu_total_usage | 5s | % | CPU总使用率。 |
cpu_user_usage | 5s | % | 用户态CPU使用率。 |
cpu_sys_usage | 5s | % | 系统态CPU使用率。 |
内存 | |||
mem_total_usage | 5s | % | 内存使用率。 |
mem_total_used | 5s | MB | 内存使用量。 |
mem_rss | 5s | MB | RSS使用量。 |
mem_cache | 5s | MB | Cache使用量。 |
mem_mapped_file | 5s | MB | mapped_file使用量。 |
mem_inactiverss | 5s | MB | inactive rss使用量。 |
mem_inactivecache | 5s | MB | inactive cache使用量。 |
文件系统 | |||
fs_size_total | 5s | MB | 空间总量。 |
fs_size_used | 5s | MB | 空间使用量。 |
fs_size_usage | 5s | % | 空间使用率。 |
fs_inodes_total | 5s | 个 | inode总量。 |
fs_inodes_used | 5s | 个 | inode使用量。 |
fs_inodes_usage | 5s | % | inode使用率。 |
polar_base_dir_size | 5s | MB | 数据目录空间大小。 |
polar_wal_dir_size | 5s | MB | WAL目录空间大小。 |
连接状态 | |||
active_connections | 5s | 个 | 活跃连接数。 |
waiting_connections | 5s | 个 | 等待状态的连接数。 |
等待事件 | |||
client_waits | 5s | 个 | 等待客户端进程数。 |
lwlock_waits | 5s | 个 | lwlock等待进程数。 |
io_waits | 5s | 个 | 等待IO进程数。 |
lock_waits | 5s | 个 | lock等待进程数。 |
extension_waits | 5s | 个 | 插件等待进程数。 |
ipc_waits | 5s | 个 | 处于进程间通信的进程数。 |
timeout_waits | 5s | 个 | 等待超时的进程数量。 |
bufferpin_waits | 5s | 个 | 等待bufferpin的进程数量。 |
cpu_waits | 5s | 个 | 使用CPU的进程数量。 |
activity_waits | 5s | 个 | 当前处于空闲状态,等待变成活跃状态的进程数量。 |
事务数 | |||
commits_delta | 5s | 个 | 提交的事务数。 |
rollbacks_delta | 5s | 个 | 回滚的事务数。 |
事务状态 | |||
active_transactions | 5s | 个 | 活跃事务数。 |
idle_transactions | 5s | 个 | 空闲事务数。 |
waiting_transactions | 5s | 个 | 等待状态的事务数。 |
idle_connections | 5s | 个 | 空闲连接数。 |
two_pc_transactions | 5s | 个 | 两阶段事务数。 |
swell_time | 5s | 秒 | 膨胀点:当前最长事务持续时间。 |
SQL | |||
deadlocks_delta | 5s | 个 | 死锁数量。 |
conflicts_delta | 5s | 个 | 由于恢复冲突导致取消的查询数量。 |
数据库处理行数 | |||
tup_returned_delta | 5s | 行 | 扫描行数。 |
tup_fetched_delta | 5s | 行 | 返回行数。 |
tup_inserted_delta | 5s | 行 | 插入行数。 |
tup_updated_delta | 5s | 行 | 更新行数。 |
tup_deleted_delta | 5s | 行 | 删除行数。 |
临时文件 | |||
temp_files_delta | 5s | 个 | 临时文件个数。 |
temp_bytes_delta | 5s | 字节 | 临时文件字节数。 |
数据库buffer | |||
blks_hit_delta | 5s | 个 | 命中缓存block数量。 |
blks_read_delta | 5s | 个 | 物理读次数。 |
buffers_backend_delta | 5s | 个 | backend写buffer数量。 |
buffers_alloc_delta | 5s | 个 | buffer分配数量。 |
buffers_backend_fsync_delta | 5s | 个 | backend fsync buffer数。 |
buffers_checkpoint_delta | 5s | 个 | checkpoint写buffer数量。 |
buffers_clean_delta | 5s | 个 | bgwriter写buffer数量。 |
polar_dirtypage_size | 5s | 个 | buffer脏页数量。 |
polar_copybuffer_used_size | 5s | 个 | copy buffer使用数量。 |
polar_copybuffer_isfull | 5s | N/A | copy buffer是否满。 |
checkpoint | |||
checkpoint_sync_time_delta | 5s | 秒 | checkpoint sync时间。 |
checkpoints_timed_delta | 5s | 次 | 定时checkpoint次数。 |
checkpoint_write_time_delta | 5s | 秒 | checkpoint write时间。 |
checkpoints_req_delta | 5s | 个 | 主动请求checkpoint次数。 |
logindex_mem_tbl_size | 5s | 个 | logindex table个数。 |
数据库年龄 | |||
db_age | 5s | xid | 数据库年龄。 |
复制 | |||
replay_latency_in_mb | 5s | MB | 备库回放延迟。 |
send_latency_in_mb | 5s | MB | 主库发送延迟。 |
ap_cp_latency_mb | 5s | MB | 回放位点与一致性位点差距。 |
wp_ap_latency_mb | 5s | MB | 写入位点与回放位点差距。 |
wp_cp_latency_mb | 5s | MB | 写入位点与一致性位点差距。 |
polar_stat_process
polar_stat_process展示了采集的系统资源消耗统计信息,展示的维度包括:
维度 | 说明 |
process_type | 进程类型。 |
资源统计信息的指标信息如下:
指标 | 采集周期 | 单位 | 说明 |
cpu_user | 10s | % | 用户态CPU。 |
cpu_sys | 10s | % | 系统态CPU。 |
rss | 10s | MB | RSS(实际内存占用大小)。 |
share_read_ps | 10s | 次 | 共享存储读次数。 |
share_read_throughput | 10s | MB | 共享存储读吞吐。 |
share_write_ps | 10s | 次 | 共享存储写次数。 |
share_write_throughput | 10s | MB | 共享存储写吞吐。 |
local_read_ps | 10s | 次 | 本地读次数。 |
local_read_throughput | 10s | MB | 本地读吞数。 |
local_write_ps | 10s | 次 | 本地写次数。 |
local_write_throughput | 10s | MB | 本地写吞吐。 |
polar_stat_io_info
polar_stat_io_info展示了采集到的数据库IO调用(例如falloc
、fsync
、 read
、 write
、 creat
、 seek
、 open
和 close
)信息,展示的维度如下:
维度 | 说明 |
fileloc | 文件位置 :
|
filetype | 文件类型。
|
数据库IO的指标信息如下:
指标 | 周期 | 单位 | 说明 |
falloc_latency_us | 1s | us | 1秒内falloc调用时间的累计值。 |
read_throughput | 1s | MB | 1秒内read调用的吞吐量。 |
read_latency_us | 1s | us | 1秒内read调用时间的累计值。 |
creat_latency_us | 1s | us | 1秒内creat调用时间的累计值。 |
open_latency_us | 1s | us | 1秒内open调用时间的累计值。 |
write_latency_us | 1s | us | 1秒内write调用时间的累计值。 |
seek_count | 1s | 次 | 1秒内seek调用的次数。 |
falloc_count | 1s | 次 | 1秒内falloc调用的次数。 |
fsync_count | 1s | 次 | 1秒内fsync调用的次数。 |
fsync_latency_us | 1s | us | 1秒内fsync调用时间的累计值。 |
close_count | 1s | 次 | 1秒内close调用的次数。 |
read_count | 1s | 次 | 1秒内read调用的次数。 |
write_count | 1s | 次 | 1秒内write调用的次数。 |
creat_count | 1s | 次 | 1秒内creat调用的次数。 |
open_count | 1s | 次 | 1秒内open调用的次数。 |
write_throughput | 1s | MB | 1秒内write调用的吞吐量。 |
seek_latency_us | 1s | us | 1秒内seek调用时间的累计值。 |
polar_stat_io_latency
polar_stat_io_latency展示了采集的数据库IO调用(例如fsync
、 read
、 write
、 seek
、 open
)延迟时间的分布信息,展示的维度包括:
维度 | 说明 |
latency | 延迟分布。 |
数据库IO延迟分布指标信息如下:
指标 | 采集周期 | 单位 | 说明 |
seek | 10s | 个 | 处于延迟区间内的seek调用个数。 |
fsync | 10s | 个 | 处于延迟区间内的fsync调用个数。 |
read | 10s | 个 | 处于延迟区间内的read调用个数。 |
write | 10s | 个 | 处于延迟区间内的write调用个数。 |
open | 10s | 个 | 处于延迟区间内的open调用个数。 |
polar_stat_network
polar_stat_network展示了采集数据的网络信息,展示的维度包括:
维度 | 说明 |
client | 客户端IP地址。 |
backend_type | 客户端类型。 |
采集数据的网络统计指标信息如下:
指标 | 周期 | 单位 | 说明 |
client_count | 10s | 个 | 同一维度的客户端个数。 |
send_mb | 10s | MB | 发送的数据量。 |
recv_mb | 10s | MB | 接收的数据量。 |
retrans | 10s | 次 | 重传次数。 |
max_sendq | 10s | 个 | 最大发送队列长度。 |
max_recvq | 10s | 个 | 最大接收队列长度。 |
max_rtt | 10s | ms | 网络延迟。 |
max_cwnd | 10s | 个 | 最大滑动窗口大小。 |
polar_aas_history
polar_aas_history展示了采集的等待事件统计信息,展示的维度包括:
维度 | 说明 |
wait_event_type | 等待事件类型。 |
wait_event | 等待事件的名称。 |
queryid | SQL唯一标识。 |
展示等待事件统计的指标信息如下:
指标 | 采集周期 | 单位 | 说明 |
wait_count | 1s | 个 | 同一queryid处于同一等待事件的会话数量。 |
polar_stat_slow_query
polar_stat_slow_query展示了采集数据的SQL统计信息,展示的维度包括:
维度 | 说明 |
wait_event_type | 等待事件类型。 |
wait_event | 等待事件的名称。 |
pid | 进程ID。 |
dbname | 数据库名称。 |
query | SQL语句。 |
SQL统计的指标信息如下:
指标 | 周期 | 单位 | 说明 |
executing_time | 10s | ms | 截止采集时SQL语句执行时长。 |
polar_stat_max_memory_sql
polar_stat_max_memory_sql展示了占用大量内存的SQL统计信息,展示的维度包括:
维度 | 说明 |
dbname | 数据库名称。 |
pid | 进程ID。 |
query | SQL语句。 |
占用大量内存的SQL语句指标信息如下:
指标 | 周期 | 单位 | 说明 |
rss_mb | 10s | MB | 当前占用最大内存的SQL语句及其占用内存大小。 |
polar_lock_contention_history
polar_lock_contention_history展示了锁冲突信息,展示的维度包括:
维度 | 说明 |
locktype | 锁类型。 |
lockmode | 锁级别。 |
datname | 数据库名称。 |
relation | 表名称。 |
query | SQL语句。 |
锁冲突的指标信息如下:
指标 | 周期 | 单位 | 说明 |
total_num | 60s | 个 | 阻塞会话个数。 |
polar_stat_top_sql
polar_stat_top_sql展示了采集的Top SQL统计信息,展示的维度包括:
维度 | 说明 |
queryid | SQL语句的唯一标识。 |
query | SQL语句。 |
Top SQL统计信息的指标信息如下:
指标 | 周期 | 单位 | 说明 |
logical_read | 600s | 次 | 逻辑读次数。 |
blks_read | 600s | 次 | 物理读次数。 |
logical_write | 600s | 次 | 逻辑写次数。 |
blks_written | 600s | 次 | 物理写次数。 |
blk_read_time | 600s | ms | 物理读IO时间。 |
blk_write_time | 600s | ms | 物理写IO时间。 |
calls | 600s | 次 | 执行次数。 |
total_time | 600s | ms | 执行时间 |
rows | 600s | 行 | 访问/变更行数。 |
polar_stat_user_tables
polar_stat_user_tables展示了Top表访问信息,展示的维度如下:
维度 | 说明 |
dbname | 数据库名称。 |
schemaname | schema名称。 |
relname | 表名称。 |
Top表指标信息如下:
指标 | 周期 | 单位 | 说明 |
seq_scan | 3600s | 次 | 顺序扫描的次数。 |
seq_tup_read | 3600s | 行 | 顺序扫描的行数。 |
idx_scan | 3600s | 次 | 索引扫描的次数。 |
idx_tup_fetch | 3600s | 行 | 索引扫描的行数。 |
n_tup_ins | 3600s | 行 | 插入的行数。 |
n_tup_upd | 3600s | 行 | 更新的行数。 |
n_tup_del | 3600s | 行 | 删除的行数。 |
n_tup_hot_upd | 3600s | 行 | HOT更新的行数。 |
n_mod_since_analyze | 3600s | 行 | 上次analyze后更新的行数。 |
n_live_tup | 3600s | 个 | 活跃元组数量。 |
n_dead_tup | 3600s | 个 | 死亡元组数量。 |
dead_tup_ratio | 3600s | % | 死亡元组比例。 |
last_vacuum | 3600s | s | 距离上次vacuum的时间。 |
last_autovacuum | 3600s | s | 距离上次auto vacuum的时间。 |
last_analyze | 3600s | s | 距离上次analyze时间。 |
last_autoanalyze | 3600s | s | 距离上次auto analyze的时间。 |
polar_statio_user_tables
polar_statio_user_tables展示了Top表IO信息。展示的维度包括:
维度 | 说明 |
dbname | 数据库名称。 |
schemaname | schema名称。 |
relname | 表名称。 |
Top表IO指标信息如下:
指标 | 周期 | 单位 | 说明 |
heap_logical_read | 3600s | 次 | 表逻辑读次数。 |
heap_blks_read | 3600s | 次 | 表物理读次数。 |
idx_logical_read | 3600s | 次 | 表索引逻辑读次数。 |
idx_blks_read | 3600s | 次 | 表索引物理读次数。 |
polar_stat_user_indexes
polar_stat_user_indexes展示了Top索引访问信息,展示的维度包括:
维度 | 说明 |
dbname | 数据库名称。 |
schemaname | schema名称。 |
relname | 表名称。 |
indexrelname | 索引名称。 |
Top索引访问指标信息如下:
指标 | 周期 | 单位 | 说明 |
idx_scan | 3600s | 次 | 索引扫描次数。 |
idx_tup_read | 3600s | 行 | 索引读取行数。 |
idx_tup_fetch | 3600s | 行 | 索引扫描行数。 |
polar_statio_user_indexes
polar_statio_user_indexes展示了Top索引IO信息,展示的维度包括:
维度 | 说明 |
dbname | 数据库名称。 |
schemaname | schema名称。 |
relname | 表名称。 |
indexrelname | 索引名称。 |
Top索引IO指标信息如下:
指标 | 周期 | 单位 | 说明 |
idx_blks_read | 3600s | 次 | 索引物理读次数。 |
idx_logical_read | 3600s | 次 | 索引逻辑读次数。 |
polar_stat_relation_size
polar_stat_relation_size展示了Top relation占用空间大小信息,展示的维度包括:
维度 | 说明 |
dbname | 数据库名称。 |
schemaname | schema名称。 |
relname | 表名称。 |
relkind | 表类型。 |
Top relation占用空间指标信息如下:
指标 | 周期 | 单位 | 说明 |
relsize_total | 3600s | MB | 占用空间大小。 |
polar_stat_table_age
polar_stat_table_age展示了Top relation年限大小信息,展示的维度包括:
维度 | 说明 |
dbname | 数据库名称。 |
schemaname | schema名称。 |
relname | 表名称。 |
relkind | 表类型。 |
Top relation年限大小指标信息如下:
指标 | 周期 | 单位 | 说明 |
table_age | 3600s | xid | 年限。 |
polar_statio_user_sequences
polar_statio_user_sequences展示了Top sequence IO信息,展示的维度包括:
维度 | 说明 |
dbname | 数据库名称。 |
schemaname | schema名称。 |
relname | 表名称。 |
indexrelname | 索引名称。 |
Top sequence IO的指标信息如下:
指标 | 周期 | 单位 | 说明 |
blks_read | 3600s | 次 | 物理读次数。 |
logical_read | 3600s | 次 | 逻辑读次数。 |
polar_stat_user_functions
polar_stat_user_functions展示了Top函数执行信息,展示的维度包括:
维度 | 说明 |
dbname | 数据库名称。 |
schemaname | schema名称。 |
funcname | 函数名称。 |
Top函数的指标信息如下:
指标 | 周期 | 单位 | 说明 |
calls | 3600s | 次 | 累计执行次数。 |
total_time | 3600s | ms | 累计执行时间。 |
polar_settings
polar_settings展示了数据库的配置信息,展示的维度包括:
维度 | 说明 |
name | 配置项名称。 |
source | 设置来源。 |
setting | 配置项的值。 |