https://mp./s/Ty-HE60Y8v5AyqNbFWRQyA
白鳝老师的博文,转载一下。欢迎阅读上面的原文。
前阵子和一个从Oracle DBA转为PG dba的网友讨论PG监控,他觉得PG比Oracle简单多了,感觉PG监控没啥可看的。实际上我这和我刚刚开始接触PG的时候的情况类似,因为对PG不了解,所以对PG监控也无从入手。事实上,刚刚接触Oracle数据库的时候也是这样的。前段时间一个老客户发来一张截图,是我在90年代给他们编写的Oracle数据库日常运维工作指南,正文部分总共也就三页WORD文档,那还是我憋了好几天才写出来的。无非是看看磁盘空间,看看日志,看看数据库命中率等。“确保数据库缓冲区命中率不低于80%”也是当年只有几十M内存时代的产物了。实际上随着对PG数据库的日益了解,我们发现PG数据库虽然没有Oracle那么复杂,不过还是挺复杂的。于是我花了几个小时,画了下面的这张图。
这张图上列出了PG数据库监控的主要的方面,考虑的比较细,不过因为PG监控的复杂性,因此并未展开到最细节的地方。如果要展示到最细节的层次,那么估计在手机上这张图就没法看了。
从顶级的监控维度上就有操作系统、存储设备、网络链路、日志等和数据库相关的维度。另外从数据库角度,也有数据库IO情况、数据库并发、数据库命中率、数据库负载、数据库配置、数据库容量、数据库对象、SQL等多个维度。每个维度还有子维度,子维度下面还可能有更细的子维度。最后才到相关的监控项或者监控指标项。
PG数据库是学院派的,如果我们去读PG的代码,发现和LINUX代码的风格是完全不同的,如果用一个词来形容PG的代码,那就是堂堂正正,而LINUX则是精灵古怪。正是这种学院派的代码,让PG的复杂度要远高于其他一些开源数据库,因此对PG的监控也十分复杂。有可能你使用的PG数据库运维起来十分简单,但是你可能会发现,某些时候出现一些问题的时候,你无从分析,也不知道该如何去找相关的资料。确实你也找不到相关的资料,因为目前还很少有人总结了这方面的资料。
实际上与Oracle等商用数据库不同的是,PG数据库的运维经验的积累无法像Oracle那样由厂商主导,因此运维经验的汇聚能力要比商用数据库差得多,因此也很难形成类似MOS这样的知识库网站。哪怕开源社区的网站也有一些类似的功能,但是其知识的丰富程度是远远不如的。这是资本的力量,丰富的知识库不仅仅是时间的沉淀,也是真金白银的投入。
在开源社区里,更需要有应用经验的人把自己的运维经验奉献出来,与大家共享。我们团队也会定期把我们在使用PG数据库中的一些经验分享出来。在今后的一段时间里,我会把我们对PG数据库监控方面的一些心得写出来,与大家共同探讨。今天这篇,算是第一篇吧。