没想到昨天的文章阅读量这么大,看来大家更喜欢听我讲故事。不过说实在的,我的技术文章里干货也是挺多的。只是最近在准备D-SMART的年度封板问题,所以主要精力都放在相关的研发上,对于大家感兴趣的PG和一些国产数据库的研究暂时放了放。昨天有个老DBA给我留言说,现在用国产数据库有点像Oracle 8.0和Oracle 8.1.7,说实在的,我也有些同感。用过Oracle 8.0的朋友,还记得启动Oracle数据库用什么命令吗?如果说sqlplus,那你肯定没用过Oracle 8.0,或者以前用得不多。也有朋友和我聊SCN HEADROOM问题,在LINUX上持续启动147天宕机的问题,以及当年那个超级安全漏洞ALERT 68。现在仔细想想,Oracle当时比现在的国产数据库也真的没好到哪里去。
这段时间我好像是一个在海边捡贝壳的儿童一样,拼命地在数据库的海滩上挖呀挖,为D-SMART汲取更多的养分。作为一个知识自动化系统,最为核心的内容就是运维知识。这段时间我在不断地向各位DBA大佬学习,把他们的运维经验纳入到我们的知识库体系中来。
从泰保的林峰老师那边,我收集到了数据空洞分析、合并状态分析、日志流分析等方面的知识,这些知识已经成为D-SMART的数个知识点和日检报告的内容。通过新炬的张瑞远先生分享的故障案例中,我们增加了数个针对OB 500租户的运维经验。在和棉花糖一起分析一个library cache导致的 Oracle数据库性能问题的过程中,D-SMART的Oracle共享池相关的运维知识中增加了数个与expression tracking相关的指标、故障模型和日检项。通过对PG大佬灿总的公众号文章的学习,我们为PG类数据库增加了孤儿文件检查的日检项。
数据库知识的系统化学习需要通过书本,不过书本只能带给我们最为基本的教育。想要在数据库领域成为专家,必须在大量的实际工作中积累丰富的运维经验才行,书本上是出不了真知的。当年学习Oracle的时候,最初自己手头的客户与环境是有限的,那时候我会在ITPUB,oracle.com.cn,以及自己办的oraclefans.cn网站,以及QQ群,MSN等即时通讯软件上为网友分析问题,从而让自己能够更快地把书本上学到的知识变成具有实战价值的运维经验。二十多年过去了,我依然觉得自己需要通过不断地学习来更新自己的认知。在国产数据库运维方面,我们目前的用户十分有限,获得实战知识的来源也十分有限。通过和实际用户的一手交流以及通过一些具有丰富实战经验的高手的公众号学习,是我们快速弥补这方面缺陷的重要手段。
500租户是OceanBase中的一个十分特殊的租户,500租户的内存出现异常将会导致OB数据库出现严重的问题。通过下面的链接可以在OB官网的知识库中查找500内存相关的资料:https://www.oceanbase.com/quicksearch?q=500%E5%86%85%E5%AD%98&scope=knowledge。
今天我学习到的一个十分关键的知识是关于LIBEASY模块的内存使用相关的。这个内存模块在OB数据库集群的RPC通讯中使用,被参数__easy_memory_limt控制。这个参数的默认值是4GB,当LIBEASY可用内存不足时,会引发OB集群的故障。此时可以通过加大该参数来临时解决问题。
周末和棉花糖一起分析了一个Oracle Library cache lock/pin等待的案例,最后发现是expression tracking引发的数据库性能问题。通过将_column_tracking_level隐含参数设置为17关闭expression tracking后,DB TIME减少了70%以上,数据库性能极大改善。这个从12.2开始引入的Oracle新特性对于大多数用户来说是没有用处的,但是会在某些高并发执行的场景下引发共享池性能问题。
Expression Tracking是Oracle 12.2进一步提升优化器对复杂SQL执行效率以及提升immdb效率的一个新的数据采集。不过到19C为止,其主要用途是为immdb服务。对于并发与负载并不高的系统,这种采集影响不大,不过对于负载很高的系统来说,很可能会引发library cache pin/lock的严重等待,受其影响,一些数据库的内部操作都会出现性能问题,一些其他的闩锁,比如latch:ges/gcs相关的闩锁也会变慢。从而导致系统出现间歇性的卡顿。
比如上面的一个数据库负载中,每秒执行数量达到1.8万+,解析和硬解析也比较多,这种情况下就会引发系统性的问题,让很多系统中以前存在的亚健康状态都爆发出来。
虽然Library cache pin/lock的平均等待时长都不长,不过某些个别的等待会长达1000毫秒以上。在分析这个案例的时候,更加特别值得高兴的是,在查找相关知识的时候,发现了Oracle 优化器产品经理Nigel Bayliss的BLOG。不仅从这篇博文中了解了Expression Tracking的相关知识,还发现了一个非常值得认真阅读的BLOG。
对于Oracle优化器感兴趣的朋友建议时不时的去看看(https://blogs.oracle.com/authors/nigel-bayliss),对于国产数据库的同学来说,这也是个不错的学习基地。周末正好有时间,我顺便读了几篇关于Efficient Statistics Maintenance的文章。这个技术点好像以前没有关注过,也没有在实战中使用过,不过确实是能够解决我们在运维一些超大型数据库的时候很头疼的表分析问题的。
虽然在这个行当干了快30年了,现在看来我好像还是一个正在沙滩上玩耍的小孩子。每走一步都会有些新奇的贝壳在等着我,每个海浪打过来之后,也都会给我带来一些新的兴趣点。也许是一块漂亮的小石头,也许是一片美丽的珊瑚碎片。
昨天早上担任公司行政总监的大姐说起她过了年就到了退休年龄了,我一时没有反应过来,“退休”我来说似乎还很遥远。我说你绝对不能退休,公司目前绝对离不开你。她说争取再多干三年,人过了60精力都下降了。我突然想起春节一过就54周岁了,再过几年我也会面临同样的问题。不过似乎我还没有快退休的人的自觉,对技术的兴趣依然比很多年轻人狂热。既然如此,就暂时忘掉年龄,继续像一个小孩子一样在海边寻找我喜欢的贝壳吧。