我们对数据库的讨论还不够。在这个工具化时代,我们监控我们的应用程序、基础设施,甚至用户,但我们有时会忘记我们的数据库也值得监控。这主要是因为大多数数据库都运行良好,以至于我们 просто 相信它们会继续运行。信任是好的,但验证我们的假设会更好。

为什么要监控您的数据库?
有很多理由监控您的数据库,其中大多数与您监控系统其他部分的原因相同: 了解应用程序各个组件中发生的情况,使您成为更了解情况的开发人员,从而做出更明智的决策。

更具体地说,数据库是系统健康状况和行为的良好指标。 数据库中的异常行为可能指向应用程序中的问题区域。 或者,当您的应用程序中出现异常行为时,您可以使用数据库指标来帮助加快调试过程。
问题
稍微调查一下就会发现监控数据库的一个问题: 数据库有很多指标。“很多”是轻描淡写——如果您是史高治·麦克达克,您可以在所有可用指标中畅游。 如果这是摔跤狂热大赛,指标将是折叠椅。 监控所有这些指标似乎不切实际,那么您如何决定要监控哪些指标呢?

解决方案
开始监控数据库的最佳方法是确定一些基础的、与数据库无关的指标。 这些指标为理解数据库的生命周期奠定了良好的基础。
吞吐量:数据库正在执行多少操作?
开始监控数据库的最简单方法是跟踪数据库接收到的请求数量。 我们对数据库抱有很高的期望; 我们期望它们可靠地存储数据并处理我们向它们抛出的所有查询,这可能是一天一个大型查询或整天来自用户的数百万个查询。 吞吐量可以告诉您哪种情况是真实的。
您还可以按类型(读取、写入、服务器端、客户端等)对请求进行分组,以开始分析流量。
执行时间:数据库完成其工作需要多长时间?
这个指标似乎很明显,但它经常被忽视。 您不仅想知道数据库接收到多少请求,还想知道数据库在每个请求上花费了多长时间。 但是,在考虑执行时间时,重要的是要结合上下文: 对于像 InfluxDB 这样的时序数据库来说,什么是慢的,与对于像 MySQL 这样的关系数据库来说,什么是慢的,是不同的。 InfluxDB 中的慢可能意味着毫秒,而 MySQL 的 SLOW_QUERY
变量的默认值是十秒。

监控执行时间与改进执行时间不同,因此如果您有其他应用程序问题需要修复,请注意不要花费时间进行优化。
并发性:数据库同时执行多少个作业?
一旦您知道数据库正在处理多少个请求以及每个请求需要多长时间,您就需要添加一个复杂性层,才能开始从这些指标中获得真正的价值。
如果数据库接收到十个请求,并且每个请求需要十秒才能完成,那么数据库是忙了 100 秒、十秒,还是介于两者之间? 并发任务的数量会改变数据库资源的使用方式。 当您考虑连接数和线程数等因素时,您将开始更全面地了解您的数据库指标。
并发性也会影响延迟,延迟不仅包括完成任务所需的时间(执行时间),还包括任务需要等待才能被处理的时间。
利用率:数据库在多大比例的时间内处于繁忙状态?
利用率是吞吐量、执行时间和并发性的结合,用于确定数据库的可用频率——或者换句话说,数据库过于繁忙而无法响应请求的频率。

此指标对于确定数据库的整体健康状况和性能特别有用。 如果它只有 80% 的时间可以响应请求,您可以重新分配资源、进行优化或进行其他更改,以更接近高可用性。
好消息
监控和分析似乎让人不知所措,尤其因为我们大多数人不是数据库专家,并且可能没有时间投入到理解这些指标中。 但好消息是,大部分工作已经为我们完成了。 许多数据库都有一个内部性能数据库(Postgres:pg_stats,CouchDB:Runtime_Statistics,InfluxDB:_internal 等),这些数据库由数据库工程师设计,用于监控对该特定数据库重要的指标。 您可以看到诸如慢查询数量之类的广泛信息,或者像数据库中每个事件的平均微秒数之类的详细信息。
结论
数据库创建了足够的指标让我们长期忙碌,虽然内部性能数据库充满了有用的信息,但并不总是清楚您应该关注哪些指标。 从吞吐量、执行时间、并发性和利用率开始,这些指标为您提供了足够的信息来开始了解数据库中的模式。

您是否正在监控您的数据库? 您发现哪些指标有用? 请告诉我!
评论已关闭。