虽然说Oracle数据库在最初是以DB2为标杆的,在很多功能上模仿了DB2,不过经过数十年的发展,这两种数据库在整体设计理念和功能上的差异已经十分巨大了。Oracle与DB2的这种从基本产品理念上的差异使Oracle DBA和DB2 DBA之间也形成了两个相互隔离的群体,因为二者在运维理念上存在巨大的差异。
最近因为应客户需求要在我们产品里对接DB2,所以我开始学习这个自己内心不太喜欢去接触的数据库。昨天早上在分析的时候发现DB2的一些指标有些问题 ,一些统计数据经常会清零。开始还以为可能数据库发生了重启,指标归零了,后来发现完全不是那么回事,数据库不重启也会出现某个全局统计指标清零的问题。
问了几个曾经搞过DB2的人,他们以前都没有关注过这个问题,觉得好像数据库只要不重启应该是不会清零的,但是我这边的现象就是如此。后来看了一篇文章才知道原来启动DB2数据库还是有讲究的。如果没有activate database,那么数据库将会是被隐式激活的。当有应用连接数据库的时候会隐式激活数据库,当所有应用不活动的时候,数据库就不处于激活状态了,此时统计信息就会被清零。尝试使用db2 activate database命令激活后,确实指标数据就正常了。使用这条命令的前提是当时数据库不存在应用连接。
我对重启数据库做了后,这些指标都清零了。而且在没有显式用activate database激活数据库,只是用db2start启动数据库实例的情况下,这个问题依然存在。看样子想要持续采集这些指标,需要在启动数据库实例后显式激活数据库,不知道真实应用环境的DB2用户是否采用这种做法。显式激活数据库还会让第一个连接数据库的应用可以更快地完成连接,不过这个问题对于大多数应用系统来说并不关键。
昨天遇到的第二个问题是关于BUFFERPOOL的一些指标的采集,对于数据库用户来说,BUFFERPOOL命中率等指标是最常用的指标之一,起码我们需要知道当前BUFFERPOOL的命中率。不过DB2默认情况下,是不采集BUFFPOOL的使用情况的。因此你还无法获得BUFFERPOOL的相关数据。
如果想要查看相关数据,必须先打开监控开关。
db2 update monitor switches using BUFFERPOOL on
这个监控项可以随时开关,即时起效。以前没干过DB2的DBA,因此我不太清楚一些核心系统的DB2数据库平时是否关注BUFFERPOOL的命中率,是否打开这个监控开关。不过从BUFFERPOOL监控的内容来看,统计的数据比Oracle的BUFFERPOOL的指标粒度要细致得多。更为细致的粒度也意味着采集这方面的指标会有更大的系统开销,可能很多用户默认不一定会打开监控。
作为二三十年前使用最为广泛的两个商用关系型数据库,Oracle和DB2在产品设计理念上已经存在了巨大的差异,因此在使用这两种数据库的方式上也存在巨大的不同。Oracle从1996年发布7.3版本以来,就开始以OWI为基础不断打造其可观测性能力,其目的是让不同的用于都能更好地使用Oracle数据库。让数据库在DBA眼里变得更加透明,让DBA能够更好地感知数据库的状态,预知数据库可能存在的风险,并更好地完成故障预警、根因分析、态势感知等工作任务,使数据库可以在各种写得很烂的应用场景中做好支持。
而DB2则能够在应用质量管控得比较好的场景中很稳定地运行,DBA平时也不需要做那么多Oracle DBA所做的工作,只要把资源、容量等方面做好管控就可以了。当应用系统发现问题的时候,再打开各种监控采集,获取相关的数据,去做诊断分析就可以了。实际上DB2提供的监控数据是十分丰富的,在某些方面甚至比Oracle还详尽,不过这些监控数据默认是不采集的。如果需要分析这些数据,需要修改默认参数,或者使用命令去做手工采集。这样的使用模式比较适合于应用质量能够得到较好管控的应用场景,DBA也不会像Oracle DBA那么累。
我没有从事过DB2的运维工作,因此不知道我的理解是否正确,不过从我实验室环境里的DB2 UDB 11.1版本的默认参数来看,大部分可以用于做较为深入分析的指标采集,默认都是不开启的。而对于大多数客户来说,不默认开启的监控参数,他们往往是不敢开启的,除非他们对DB2数据库的运维经验十分丰富,知道那些参数开启后可能产生的负面影响,并且自己能够很好地管控这些风险。
实际上目前的国产数据库对于可观测性能力方面,也存在和Oracle/DB2一样的两个流派。有些数据库产品在努力学习Oracle 数据库,能够在尽可能不影响数据库性能和稳定性的前提下,向运维人员提供更多的数据,而另外一些数据库产品优点向DB2,默认情况下,你就使用就好了,出了问题,首先考虑优化应用,实在不行再打开这些监控采集,去做深入的分析。
哪种模式更好呢?我个人的观点是,Oracle的模式更加符合数据库数字化运维的发展方向,而DB2的模式则是一种较为传统的模式。不同的用户,不同的应用管控和运维理念下,客户的选择可能会有所不同。