一种PostgreSQL数据库监控和溯源分析的方法和系统技术方案

技术编号:29932613 阅读:24 留言:0更新日期:2021-09-04 19:03
本发明专利技术实施例提供了一种于快照采样技术构建PostgreSQL数据库处理方法和系统,所述方法包括:使用hook钩子在数据库启动时同步加载监控插件,并从数据库主进程中请求内存分配,创建监控子进程;监控子进程启动后,获取数据库参数,其中该数据库参数包括:数据库状态、sql语句、执行计划、锁信息、数据块变更、主机系统信息;通过实时监控数据库操作的sql语句和数据库运行状态,实时拍摄数据库快照;通过调用snapshot_w(void)函数,将实时拍摄的数据库快照存入对应的表和视图中。快照存入对应的表和视图中。快照存入对应的表和视图中。

【技术实现步骤摘要】
一种PostgreSQL数据库监控和溯源分析的方法和系统


[0001]本专利技术属于涉及信息
,尤其涉及一种基于数据库快照采样存储来构建PostgreSQL数据库监控和溯源分析的方法和系统。

技术介绍

[0002]在数据库日常运维中,诊断数据库性能、性能优化、故障溯源是日常运维工作中重要的一环。Oracle中有ASH(Active Session History),ASH通过每秒钟抽取活动会话样本,为分析在最近时刻的性能问题提供最直接有效的依据。但是在PostgreSQL中,一般出现性能问题,只能通过系统自带的性能视图pg_stat_activity和操作系统层面的top、iostat等命令结合来观察,最大的缺陷是pg_stat_activity视图只能看到当前正在运行的Postgres进程状态,仅仅为该时间点的快照,仅能查看此刻数据库的运行状况,对于定位历史运行中的性能问题无能为力。

技术实现思路

[0003]针对现有技术中存在历史运行状态无法查看的问题,本专利技术要解决的技术问题是提供一种基于数据库快照采样存储来构建PostgreSQL数据库监控和溯源分析的方法和系统,以提升数据库运维效率和易用性。
[0004]为了解决上述问题,本专利技术实施例提出了一种基于快照采样技术构建PostgreSQL数据库监控和溯源分析的方法,包括:
[0005]通过hook_proc(void)函数使用hook钩子在数据库启动时同步加载监控插件,并通过proc_entry_memsize(void)函数方法调用,从数据库主进程postgres中请求内存分配,最后使用init_proc(const char*str,int len)函数创建监控子进程;
[0006]监控子进程启动后,使用get_dbstatus(void)、get_sql(const char*str,int len)、get_parse_analyze(parsestate*pstate,query*query)、get_lock_info(i_mode text)、get_blockchange(pg_function_args)、get_host_procs_info(void)函数获取数据库参数,其中该数据库参数包括:数据库状态、sql语句、执行计划、锁信息、数据块变更、主机系统信息;
[0007]通过实时监控数据库操作的sql语句和数据库运行状态,实时拍摄数据库快照;通过调用snapshot_w(void)函数,将实时拍摄的数据库快照存入对应的表和视图中。
[0008]进一步的,所述方法还包括:
[0009]监控子进程使用copy_stat(void)函数对pg_stat_statements视图进行采样,但是不同于原视图,监控子进程在pg_stat_activity视图基础上额外添加了预设字段以记录数据库运行状态;其中所述预设字段包括:blockers、blockpid、blocker_state;其中所述pg_stat_statements是数据库自带插件。
[0010]进一步的,所述方法还包括:
[0011]采样的快照数据存储在pg_active_session_history视图和pg_stat_
statements_history视图。
[0012]进一步的,所述pg_active_session_history视图和pg_stat_statements_history视图包括以下字段:
[0013][0014][0015]进一步的,所述监控子进程还包括用于控制监控子进程采集行为和频率的GUC参数,包括:
[0016]pgsentinel_ash.sampling_period:采样周期,默认为1s;
[0017]pgsentinel_ash.max_entries:pg_active_session_history视图在内存中的缓冲区的大小,默认为1000;
[0018]pgsentinel_pgssh.max_entries:pg_stat_statements_history视图在内存中的缓冲区的大小,默认为1000;
[0019]pgsentinel.db_name:要监控的数据库,默认为postgres;
[0020]pgsentinel_ash.track_idle_trans:跟踪空闲事务的状态下会话,默认为false;
[0021]pgsentinel_pgssh.enable:是否开启监控子进程进行快照采样,默认为false。
[0022]同时,本公开实施例还提出了一种基于快照采样技术构建PostgreSQL数据库监控和溯源分析系统,包括:
[0023]建立模块,用于通过hook_proc(void)函数使用hook钩子在数据库启动时同步加载监控插件,并通过proc_entry_memsize(void)函数方法调用,从数据库主进程postgres中请求内存分配,最后使用init_proc(const char*str,int len)函数创建监控子进程;
[0024]启动模块,用于在监控子进程启动后,使用get_dbstatus(void)、get_sql(const char*str,int len)、get_parse_analyze(parsestate*pstate,query*query)、get_lock_info(i_mode text)、get_blockchange(pg_function_args)、get_host_procs_info(void)函数获取数据库参数,其中该数据库参数包括:数据库状态、sql语句、执行计划、锁信息、数据块变更、主机系统信息;
[0025]快照模块,用于通过实时监控数据库操作的sql语句和数据库运行状态,实时拍摄数据库快照;通过调用snapshot_w(void)函数,将实时拍摄的数据库快照存入对应的表和视图中。
[0026]本专利技术的上述技术方案的有益效果如下:上述的技术方案,能够基于快照采样数据库实时状态,且可以非侵入内核的方式运行在数据库节点;通过设置采集频率和采集范围,将数据库运行实时状态做快照进行存储,实现数据库历史运行情况的可回溯。上述技术方案基于数据库的内建api和扩展机制实现,不侵入内核,具有很强的安全性和灵活性。
附图说明
[0027]图1是本公开实施例的系统逻辑流程图。
具体实施例
[0028]为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图,对本专利技术进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。
[0029]下面结合附图及本专利技术的实施例对后评估的方法进一步说明。
[0030]如图1所示的,本公开实施例提出了一种基于快照采样技术构建PostgreSQL数据库监控和溯源分析的方法,包括:
[0031]本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种PostgreSQL数据库监控和溯源分析的方法,其特征在于,包括:通过hook_proc(void)函数使用hook钩子在数据库启动时同步加载监控插件,并通过proc_entry_memsize(void)函数方法调用,从数据库主进程postgres中请求内存分配,最后使用init_proc(const char*str,int len)函数创建监控子进程;监控子进程启动后,使用get_dbstatus(void)、get_sql(const char*str,int len)、get_parse_analyze(parsestate*pstate,query*query)、get_lock_info(i_mode text)、get_blockchange(pg_function_args)、get_host_procs_info(void)函数获取数据库参数,其中该数据库参数包括:数据库状态、sql语句、执行计划、锁信息、数据块变更、主机系统信息;通过实时监控数据库操作的sql语句和数据库运行状态,实时拍摄数据库快照;通过调用snapshot_w(void)函数,将实时拍摄的数据库快照存入对应的表和视图中。2.根据权利要求1所述的PostgreSQL数据库监控和溯源分析的方法,其特征在于,包括:监控子进程使用copy_stat(void)函数对pg_stat_statements视图进行采样,但是不同于原视图,监控子进程在pg_stat_activity视图基础上额外添加了预设字段以记录数据库运行状态;其中所述预设字段包括:blockers、blockpid、blocker_state;其中所述pg_stat_statements是数据库自带插件。3.根据权利要求2所述的PostgreSQL数据库监控和溯源分析的方法,其特征在于,所述方法还包括:采样的快照数据存储在pg_active_session_history视图和pg_stat_statements_history视图。4.根据权利要求3所述的PostgreSQL数据库监控和溯源分析的方法,其特征在于,所述pg_active_session_history视图和pg_stat_statements_history视图包括以下字段:

【专利技术属性】
技术研发人员:李朋王伟崔志敏
申请(专利权)人:北京许继电气有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1