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

AntDB 数据库集中式运维手册-数据库监控和维护7

tocata 2024-09-04
303

操作系统

资源监控

监控原因: 例如磁盘的空间满,会导致数据库无法执行 SQL,一般都是因为数据激增或者出现笛卡尔积,内存已经放不下这部分数据,开始往磁盘上写临时文件;例如 cpu、内存、磁盘过载,会影响数据库的性能,甚至是数据库的稳定性,例如高耗 sql 一直循环重复多次调用、长连接不释放、同一时间段并发激增。

相关命令:

CPU:vmstat ,sar –u,top
磁盘IO:iostat –xd,sar –d,top
网络IO:iftop -n,ifstat,dstat –nt,sar -n DEV 2 3
磁盘容量:df –h 
内存使用:free –m,top或者使用dstat -c -d -g -m -n -p -r -s,该命令整合了vmstat,iostat和ifstat三种命令

dstat命令详解:dstat 是一款非常好用的终端工具,它能够实时监控系统各项资源使用情况,包括 CPU、内存、磁盘、网络等方面
选项:
-c: 显示cpu相关信息
-C #,#,...,total
-d: 显示disk相关信息
-D total,sda,sdb,...
-g:显示page相关统计数据
-m: 显示memory相关统计数据
-n: 显示network相关统计数据
-s: 显示swapped相关的统计数据
--top-cpu:显示最占用CPU的进程
--top-io: 显示最占用io的进程
--top-mem: 显示最占用内存的进程
--top-latency: 显示延迟最大的进程
--raw:显示裸套接字
--socket:套接字
--ipc:进程间通信信息
-p: 显示process相关统计数据
-r: 显示io请求相关的统计数据

监控指标常用系统视图

pg_replication_slots: 视图提供了当前存在于数据库集簇上的所 有复制槽的列表,其中也包括复制槽的当前状态。(下表列举了一些相关列)

名称类型引用描述
slot_namename一个唯一的、集簇范围内的复制槽标识符
pluginname包含这个逻辑槽正在使用的输出插件的共享对象基础名称,对于物理槽为空值。
slot_typetext槽类型 - physical 或者 logical
datoidoidpg_database.oid与这个槽相关的数据库的 OID,或者为空值。只有逻辑槽具有相关的数据库。
databasenamepg_database.datname与这个槽相关的数据库的名称,或者为空值。只有逻辑槽具有相关的数据库。
activebool如果这个槽当前正在被使用则为真
active_pidInt4如果槽当前正在被使用,则记录使用这个槽的会话的进程 ID。如果不活动则为 NULL
xminxid这个槽要需要数据库保留的最旧事务。VACUUM 不能移除被其后续事务删除的元组。
catalog_xminxid这个槽要需要数据库保留的影响系统目录的最旧事务。VACUUM 不能移除被其后续事务删除的目录元组。
restart_lsnpg_lsn可能仍被这个槽的消费者要求的最旧 WA L地址(LSN),并且因此不会在检查点期间自动被移除。 如果这个槽的 LSN 从未被保留过,则为 NULL

pg_stat_replication: 记录复制的相关信息,包括复制用的用户名,复制类型,同步状态等。(下表列举了一些相关列)

类型描述
pidinteger一个 WAL 发送进程的进程 ID
usesysidoid登录到这个 WAL 发送进程的用户的 OID
usenamename登录到这个 WAL 发送进程的用户的名称
application_nametext连接到这个 WAL 发送进程的应用的名称
client_addrinet连接到这个 WAL 发送进程的客户端的 IP 地址。 如果这个域为空,它表示该客户端通过服务器机器上的一个Unix 套接字连接。
client_hostnametext连接上的客户端的主机名,由一次对client_addr的逆向 DNS 查找报告。 这个域将只对 IP 连接非空,并且只有在 log_hostname被启用时非空。
client_portinteger客户端用来与这个 WAL 发送进程通讯的 TCP 端口号,如果使用 Unix 套接字则为-1
backend_starttimestamp with time zone这个进程开始的时间,即客户端是何时连接到这个WAL 发送进程的。
backend_xminxid由hot_standby_feedback报告的这个后备机的xmin水平线。
statetext当前的 WAL 发送进程状态。
sent_lsnpg_lsn在这个连接上发送的最后一个预写式日志的位置
write_lsnpg_lsn被这个后备服务器写入到磁盘的最后一个预写式日志的位置
flush_lsnpg_lsn被这个后备服务器刷入到磁盘的最后一个预写式日志的位置
replay_lsnpg_lsn被重放到这个后备服务器上的数据库中的最后一个预写式日志的位置
sync_priorityinteger在基于优先的同步复制中,这台后备服务器被选为同步后备的优先级。在基于规定数量的同步复制中,这个值没有效果。
sync_statetext这一台后备服务器的同步状态。

pg_stat_activity: 每一个服务器进程有一行, 显示与该进程的当前活动相关的信息。(下表列举了一些相关列)

类型描述
datidoid这个后端连接到的数据库的OID
datnamename这个后端连接到的数据库的名称
pidinteger这个后端的进程 ID
usesysidoid登录到这个后端的用户的 OID
usenamename登录到这个后端的用户的 OID
application_nametext连接到这个后端的应用的名称
client_addrinet连接到这个后端的客户端的 IP 地址。如果这个字段为空,它表示客户端通过服务器机器上的一个 Unix 套接字连接或者这是一个内部进程,如自动清理。
client_hostnametext已连接的客户端的主机名,由 client_addr 的反向 DNS 查找报告。 这个字段将只对 IP 连接非空,并且只有 log_hostname 被启用时才会非空。
client_portinteger客户端用于与此后端通信的 TCP 端口号,如果使用 Unix 套接字,则为 -1。如果该字段为空,它表示这是一个内部服务器进程。
backend_starttimestamp with time zone这个进程被启动的时间。对客户端后端来说,这就是客户端连接到服务器的时间。
xact_starttimestamp with time zone这个进程的当前事务被启动的时间,如果没有活动事务则为空。 如果当前查询是它的第一个事务,这一列等于 query_start列。
query_starttimestamp with time zone当前活动查询被开始的时间,如果 state 不是 active,则为上一个查询开始的时间
state_changetimestamp with time zonestate 上一次被改变的时间
wait_event_typetext后端等待的事件类型,如果有的话;否则 NULL。
wait_eventtext如果后端当前正在等待,则等待事件名称,否则为 NULL。
statetext这个后端的当前总体状态。可能的值为:
active:后端正在执行一个查询。
idle:后端正在等待一个新的客户端命令。
idle in transaction:后端在一个事务中,但是当前没有正在执行一个查询。
idle in transaction (aborted):这个状态与 idle in transaction 相似,除了在该事务中的一个语句导致了一个错误。
fastpath function call:后端正在执行一个 fast-path 函数。
disabled:如果在这个后端中 track_activities 被禁用,则报告这个状态。
backend_xidxid这个后端的顶层事务标识符,如果存在。
backend_xminxid当前后端的 xmin 范围。
querytext这个后端最近查询的文本。如果 state 为 active,这个字段显示当前正在执行的查询。 在所有其他状态下,它显示上一个被执行的查询。默认情况下,查询文本会被截断至 1024 个字节,这个值可以通过参数 track_activity_query_size 更改。
backend_typetext当前后端的类型。可能的类型为 autovacuum launcherautovacuum workerlogical replication launcherlogical replication workerparallel workerbackground writerclient backendcheckpointerstartupwalreceiverwalsender and walwriter。除此以外,由扩展注册的后台 Worker可 能有额外的类型。

pg_stat_all_tables: 记录了每一个表 (包括 TOAST 表)包含一行,该行显示与对该表的访问相关的统计信息。

类型描述
relidoid表的 OID
schemanamename该表所在的模式的名称
relnamename这个表的名称
seq_scanbigint在此表上启动的顺序扫描数
seq_tup_readbigint连续扫描获取的实时行数
idx_scanbigint对这个表发起的索引扫描数
idx_tup_fetchbigint索引扫描获取的实时行数
n_tup_insbigint插入的行数
n_tup_updbigint更新的行数(包括 HOT更新的行)
n_tup_delbigint删除的行数
n_tup_hot_updbigintHOT 更新的行数(即不需要单独的索引更新)
n_live_tupbigint活的行的估计数量
n_dead_tupbigint僵死行的估计数量
n_mod_since_analyzebigint自上次分析此表以来修改的行的估计数量
n_ins_since_vacuumbigint自上次清空此表以来插入的行的估计数量
last_vacuumtimestamp with time zone最后一次手动清理这个表(不包括 VACUUM FULL
last_autovacuumtimestamp with time zone这个表最后一次被自动清理守护进程清理的时间
last_analyzetimestamp with time zone上一次手动分析这个表
last_autoanalyzetimestamp with time zone自动清理守护进程最后一次分析这个表
vacuum_countbigint这个表被手动清理的次数(VACUUM FULL 不计数)
autovacuum_countbigint这个表被 autovacuum 守护进程清理的次数
analyze_countbigint手动分析这个表的次数
autoanalyze_countbigint这个表被 autovacuum 守护进程分析的次数

pg_stat_all_indexes: 记录当前数据库中所有的索引的使用情况

类型描述
relidoid对于此索引的表的 OID
indexrelidoid这个索引的 OID
schemanamename这个索引所在的模式名称
relnamename这个索引的表的名称
indexrelnamename这个索引的名称
idx_scanbigint在这个索引上开启的索引扫描的数量
idx_tup_readbigint扫描此索引返回的索引项数
idx_tup_fetchbigint使用此索引进行简单索引扫描获取的活动表行数

pg_locks: 提供了数据库服务器上活动进程中保持的锁的信息。

类型描述
locktypetext可锁对象的类型: relationextendfrozenidpagetupletransactionidvirtualxidspectokenobjectuserlock or advisory.
databaseoid锁目标存在的数据库的 OID,如果目标是一个共享对象则为 0,如果目标是一个事务 ID 则为空
relationoid作为锁目标的关系的 OID,如果目标不是一个关系或者只是关系的一部分则此列为空
pageint4作为锁目标的页在关系中的页号,如果目标不是一个关系页或元组则此列为空
tupleint2作为锁目标的元组在页中的元组号,如果目标不是一个元组则此列为空
virtualxidtext作为锁目标的事务虚拟 ID,如果目标不是一个虚拟事务 ID 则此列为空
transactionidxid作为锁目标的事务 ID,如果目标不是一个事务 ID 则此列为空 ID
classidoid包含锁目标的系统目录的 OID,如果目标不是一个普通数据库对象则此列为空
objidoid锁目标在它的系统目录中的 OID,如果目标不是一个普通数据库对象则为空
objsubidint2锁的目标列号(classid 和 objid 指表本身),如果目标是某种其他普通数据库对象则此列为 0,如果目标不是一个普通数据库对象则此列为空
virtualtransactiontext保持这个锁或者正在等待这个锁的事务的虚拟 ID
pidint4保持这个锁或者正在等待这个锁的服务器进程的 PID,如果此锁被一个预备事务所持有则此列为空
modetext此进程已持有或者希望持有的锁模式的名称
grantedbool如果锁已授予则为真,如果锁被等待则为假
fastpathbool如果锁通过快速路径获得则为真,通过主锁表获得则为假

pg_stat_statements: 服务器所执行的所有 SQL 语句的执行统计信息。

类型描述
useridoid执行该语句的用户的 OID
dbidoid在其中执行该语句的数据库的 OID
queryidqueryid内部哈希码,从语句的解析树计算得来
querytext语句的文本形式
plansbigint计划语句的次数(如果启用了 pg_stat_statements.track_planning,否则为零)
total_plan_timedouble precision计划语句所花费的总时间,以毫秒为单位(如果启用了pg_stat_statements.track_planning,否则为零)
min_plan_timedouble precision计划语句所花费的最短时间,以毫秒为单位(如果启用了pg_stat_statements.track_planning,否则为零)
max_plan_timedouble precision计划语句所花费的最长时间,以毫秒为单位(如果启用了pg_stat_statements.track_planning,否则为零)
mean_plan_timedouble precision计划语句所花费的平均时间,以毫秒为单位(如果启用了pg_stat_statements.track_planning,否则为零)
stddev_plan_timedouble precision计划语句花费的时间的总体标准偏差,以毫秒为单位(如果启用了pg_stat_statements.track_planning,否则为零)
callsbigint语句被执行的次数
total_exec_timedouble precision执行语句所花费的总时间,以毫秒为单位
min_exec_timedouble precision执行语句所花费的最短时间,以毫秒为单位
max_exec_timedouble precision执行语句所花费的最长时间,以毫秒为单位
mean_exec_timedouble precision执行语句的平均时间,以毫秒为单位
stddev_exec_timedouble precision执行语句花费的时间的总体标准偏差,以毫秒为单位
rowsbigint语句检索或影响的总行数
shared_blks_hitbigint语句的共享块缓存命中总数
shared_blks_readbigint语句读取的共享块总数
shared_blks_dirtiedbigint被语句弄脏的共享块总数
shared_blks_writtenbigint语句写入的临时块总数
blk_read_timedouble precision语句读取块所花费的总时间,以毫秒为单位(如果启用了 track_io_timing,否则为零)
blk_write_timedouble precision语句写入块所花费的总时间,以毫秒为单位(如果启用了 track_io_timing,否则为零)
wal_recordsbigint语句生成的 WAL 记录总数
wal_fpibigint语句生成的 WAL 整页图像总数
wal_bytesnumeric语句生成的 WAL 字节总数


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

评论