目录
3.1. pev_active_session && pev_active_session_his
3.2. pev_long_locks && pev_long_locks_his
3.3. pev_long_trxs && pev_long_trxs_his
3.4. pev_metrics && pev_metrics_his
3.5. pev_sql_stats && pev_sql_stats_his
3.6. pev_wait_events && pev_wait_events_his
出于工作原因需要使用到各种数据库,较多的是 Oracle 及 SQL Server,开源的则大多是 PG 及 MySQL 等等。在使用上最大的差异并不在功能层面,现在的开源数据库像 PG 已经非常强大,在某些层面如对象特性等甚至比商业数据库更为易用。但在运维及管理方面的内置系统表及视图确实有所欠缺,并且较为混乱,使用上的学习成本较高,不够直观并在内容上比较匮乏,这其实也在情理之中,商业数据库完善的体系结构是花了极大的成本构造的,在研发人员的数量上就不具备可比性。好在PG有其特有的插件体系,即通过外挂插件的方式实现某些特定的功能,这也令PG的生态变得优秀。在使用PG数据库的数年时间里亦是尝试了许多热门插件,像是 pg_stat_statement 、 pg_explain 等等常见的选择,最多的时候在一台PG服务器上甚至同时安装了数十款不同的插件,因为在PG的数据库族间各个数据库相对独立,插件的作用域大多也仅限于安装所在的库,这就导致了大量的重复安装,且各个插件的功能相对独立且单一,想实现全面的监控体系确实令人头疼,苦觅良久终于是等到了一款心仪的插件 pg_enterprise_views,见名知意,其作用是提供企业级的管理视图体系,实可谓久旱逢林啊!独乐乐不如众乐乐,得闲分享给大家。
1. 下载
PG官网通道:PostgreSQL: Software Catalogue - PostgreSQL extensionshttps://www.postgresql.org/download/products/6-postgresql-extensions/PEV官方通道:下载需要填写邮箱,验证后即可免费下载。
PEV首页http://pev.catinfo.com.cn/cn/
Github通道:
http://github.com/Chriszhouy/pg_enterprise_viewshttp://github.com/Chriszhouy/pg_enterprise_views
2. 安装
安装方式较为简单,将其打包好的文件放置在PG对应的目录即可,新手建议下载使用文档按步骤进行。
- pg_enterprise_views.so 放置于 /usr/local/pgsql/lib
- pg_enterprise_views--1.0.sql 放置于 /usr/local/pgsql/shared/extension
- pg_enterprise_views.control 放置于 /usr/local/pgsql/shared/extension
- 修改配置文件 postgresql.conf shared_preload_libraries = 'pg_enterprise_views'
- psql 执行命令(连接到postgres库) create extension pg_enterprise_views;
3. 使用
PEV 于 postgres 库中提供了一个专门的 schema,其中开放了二十余个表及视图,根据其名称显而易见的他们作用于监控数据库族的各个方面的状态,接下来花一些时间同大家一起研究一下其结构及用途。
3.1. pev_active_session && pev_active_session_his
用于监控实时及历史的活跃会话。
内容大致等同于内置视图 pg_stat_activity 但附加了 queryid、 planid及 ssl 相关信息,这也就意味着可以查看到每个会话执行了什么 SQL 语句,以及使用了什么执行计划,这在性能诊断时意义重大,往往在出现问题后费尽心思溯源到有问题的 SQL 语句后无法得知其当时的执行环境,更无法得知其当时所使用的执行计划,现在这个问题便迎刃而解了。
3.2. pev_long_locks && pev_long_locks_his
用于监控实时及历史的长时间锁等待。
该模块对于运维人员可谓千金良方!可以实时查看到当前阻塞及被阻塞的进程信息、被锁定的目标信息,甚至是 SQL 所使用的执行计划!这在系统出现问题时一针见血,直接溯源问题根源甚至是责任人!
3.3. pev_long_trxs && pev_long_trxs_his
用于监控实时及历史的长时间事务。
可以看出其实该视图是对 pev_active_session 的过滤结果,自动过滤了超过阈值的长事务会话信息,运维人员甚至都不需要手写一条 SQL 来进行手动抓取。
3.4. pev_metrics && pev_metrics_his
用于监控实时及历史的负载指标。
乍一看结构比较简单,打开发现内置了数十项从操作系统层面到数据库层面的指标项,并且全是运维工作中的重要关注点!以此便可轻松全面洞的察系统状态随时间的变化曲线。
3.5. pev_sql_stats && pev_sql_stats_his
用于监控实时及历史的 SQL 统计信息。
大体等同于 pg_stat_statements,但做了增量处理不再只有累积量,更加贴合使用需求。
3.6. pev_wait_events && pev_wait_events_his
用于监控实时及历史的数据库等待事件。
对等待事件进行了分类汇总及增量处理,大大增加了易用性,可清晰的看到数据库的时间分配情况。
3.7. pev_database_his
用于监控数据库族中数据库的统计信息。
涉及到数据库方方面面的指标统计,如事务、IO、DML 操作、死锁、冲突等等。并且为全局统计,这是 PG 内置系统表所不及的,免于运维人员频繁切换数据库的烦恼。
3.8. pev_tables_his
用于监控数据库族中表的统计信息。
该部分的信息较为丰富,几乎涵盖表所关乎的所有指标,可从各种维度进行剖析,热点表一目了然,同样的为全局统计信息。
3.9. pev_indexes_his
用于监控数据库族中索引的统计信息。
同上,为全局统计,可用于定位热点索引以定时维护。
3.10. pev_sequences_his
用于监控数据库族中序列的统计信息。
3.11. pev_functions_his
用于监控数据库族中函数的统计信息。
3.12. pev_bgwriter_his
用于监控数据库族中后台写进程的统计信息。
由此可观察到检查点的推进情况以分析数据库的状况。
3.13. pev_archiver_his
用于监控数据库族中归档进程的统计信息。
其周期性记录数据库的归档情况,弥补了原生系统表只有当前信息的不足。
3.14. pev_sql
收录了全局所有执行过的 SQL 文本。
用于其他部分以 queryid 进行关联查看。
3.15. pev_sql_plan
收录了全局所有使用过的执行计划文本。
用于其他部分以 planid 进行关联查看。
3.16. pev_setting
该插件的配置表。
其采用了热更新的方式对参数进行开放配置,这一点比传统插件有更强的易用性,不再是修改PG 配置文件再重启数据库的繁琐模式。并且可见其具备自动的垃圾清理模块,只需简单配置便可规定历史数据驻留的时长、采集的间隔、模式等等。
3.17. pev client
更难能可贵的是官方居然为我们配备了专门用于运维使用的客户端工具!并且完全免费!免费!免费!喜大普奔!可以看到,其布局非常合理,从上至下分别是指标、等待事件、会话、超时锁、长事务、Top SQL、Top Client、Top DB、Top Table、Top index、BgWriter status、Archiver Status等等等等。即上述所有的表及视图不用学了!需要做的只是点点鼠标关注一下热点数据,图形化的界面及数据折线图真是好用到泪目!并且可以一键 Kill 锁死的会话进程、查看 SQL 详情......解放运维生产力。希望有越来越多的此类应用产生,开源社区的生态将会逐步完善!插件为一年的免费试用期,可以理解,如此完善的插件厂商研发也需要成本,已经是非常良心了。