现在很多国产数据库都标榜自己是可自治的数据库系统,这总会让我想起几年前我们接到第一个智能化运维平台项目时的情景。我当时建议刚开始不要铺得太大,先从几个关键IT基础设施做起,夯实基础,把指标体系和各种健康模型先搞好,再陆续扩大系统的范围。不过当时的客户和项目组的大多数人不太认同我的观点,他们认为系统功能是最重要的。基础指标太难搞了,投入太大精力吃力不讨好。我当时就蒙圈了,如果没有基础指标数据,智能化运维从何谈起呢?
现在的所谓自治数据库也是如此,想要让数据库自治,底层的数据指标以及自动化分析是极其关键的。Oracle数据库用了三十多年的时间完成了这方面的积累。而目前的很多国产数据库连基础的指标都没做好,谈什么自治数据库呢?今天以我三十年接触Oracle的经验,和大家一起回顾一下Oracle数据库的可观测性的发展历史,希望成功者的经验能够给大家一些启示。
Oracle数据库在5.0、6.0时代能够提供的监控数据十分有限,主要是通过v$sysstat、v$session去检查一些统计数据和会话信息。并且受限于当时的硬件条件,数据库安装好之后也没有啥可以调整的。因此在80年代时,Oracle数据库的优化只能针对SQL进行。别写太差的SQL,注意表连接时候的顺序(5.0时候只有RBO优化器)以及连接方式等是优化Oracle最主要的办法。
80年代末,计算机硬件有所发展,内存容量大了不少,此时除了优化SQL之外,提高BUFFER CACHE和LIBRARY CACHE的命中率也可以有效地提高数据库的整体性能。直到90年代Oracle 7.3.4这个里程碑式的版本推出之后才让Oracle可观测性得到了极大的提升。大家可能更多的知道Oracle 7.3.4开始Oracle支持OPS(RAC的前身)了,其实Oracle 7.3.4开启的另外一个新特性也十分关键,那就是OWI。Oracle OWI(Oracle Wait Interface)给人最初的印象不过是提供了几个v$session_wait等几个系统视图而已。可能当时的设计者也没有想到的是,OWI现在已经成为了Oracle自治数据的基础。
在Oracle不太成功的Oracle 8.0中,出现了一个十分伟大的工具,statspack,这个工具是基于OWI数据的诊断工具,可以让DBA了解数据库的运行特点以及存在的问题。这个工具很快也被BACKPORT到了7.3.4这个同样支持你OWI的7.3版本中了。Statspack作为DBA的利器在Oracle 8.0、Oracle 8i和Oracle 9i中发挥了巨大的作用。我算是国内最早接触和使用Statspack的人,一旦用上之后,就完全被其包含的丰富数据吸引住了。从90年代末到statspack被升级为AWR,我可能阅读过数千份statspack报告。
OWI注定是使用门槛极高的可观测性接口。在阅读一份statspack报告时,对于某些指标的异常需要翻箱倒柜地去找资料来分析问题可能出在什么地方。这时候我正好和Oracle公司合作在为一些用户提供数据库优化服务,有机会使用到Oracle内部的一些工具。其中的PTA(Performance Tuning Assistant)让我眼前一亮。
我可以将一份statspack报告输入到系统中,系统自动帮我分析数据,并给出一些建议。在这个工具里,计算和分析的依据是基于Database Time Analysis的。这个分析工具在Oracle 10g中是标准功能,就是著名的time model。时间模型的出现让晦涩的OWI数据变得更加易读了。各种等待事件的产生原因都可以归类到某个等待类中,通过OWI来定位数据库的根因也变得更为简单了。实际上PTA的Performance Finding功能后来发展出了ADDM报告的功能。只不过到19c为止,ADDM的功能还有些鸡肋,我感觉能力还赶不上PTA的能力。
OWI适合于宏观分析,当系统中存在某个问题,并且问题很严重时候,大概率可以通过OWI,利用AWR报告去发现问题。不过随着硬件性能的提升和数据库产品的不断完善。大量因为系统资源存在不足导致的宏观问题比例逐渐下降。因为某个应用或者BUG引发的小问题成为DBA关注的重点。而OWI天生在这些地方能力不足。ASH弥补了Oracle数据库这方面的可观测性能力的不足。ASH分析可以让一些在宏观层面不够突出但是在某个小时间段内引起严重问题的细节得到有效的展现,目前已经成为Oracle DBA做精细化问题分析的首选。
Oracle数据库在运维能力提升方面的创新并没有停止,11g出现的负载回放能力为分析复杂的系统问题提供了有力的支撑。这个功能很快也被BACKPORT到了10G上。负载回放功能为分析一些已经过去的复杂问题提供了基础能力,当我们无法在生产环境中做某些测试的时候,这个功能可以发挥巨大的作用。这个功能可能DBA们用得不多,不过我们多次使用这个工具帮助用户评估数据库升级或者参数做重大调整后,数据库运行性能是否有负面影响,也帮助过某个金融用户通过在测试环境还原生产环境,定位过复杂问题。
Oracle的可观测性经过了三十年的发展,从简陋的指标到OWI以及time model的出现。并不是一蹴而就的,而是经过了很长时间的演进。直到12C出现了数年后,Oracle才利用以往三十年积累的各种可观测性能力,提出了自治数据库的概念。度量化、数字化、智能化,然后才能有自治数据库的出现。而当一个数据库连自己的运行状态都无法进行数字化描述的时候,就标榜自治数据库,那肯定是不能让人信服的。Oracle在可观测性能力方面的发展历史可以为国产数据库提供参考,我希望也早一天能够在国产数据库上用上真正有用的AWR报告,而不是现在那种徒有其表,没啥作用的报告。