文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏

...成千上万的并发事务争用相同的资源(比如CPU、磁盘I/O、内存),对于数据库性能将会产生高度非线性、反直觉的影响。

如果你是一位DBA,并且职责就是搞清楚发生了什么,那么这还是挺有挑战性的。你可能会淹没在统计数据和图表中(比如MySQL具有260个统计变量),但是容然丝毫把握不到整体状况...“结果就是,老练并且高薪的DBA们(他们本身就是稀缺资源)消耗大量的时间通过不同的猜测诊断性能问题,手工审查大量的查询和日志文件,直到发现根本原因为止。”

第 1 段(可获 2 积分)

DBSherlock(可以从http://dbseer.org这里获取)是一个性能解释框架,可以帮助DBA以更有条理的方法诊断性能问题。其核心想法是通过分析过去的统计数据比较感兴趣的区域(也就是异常的行为)与正常行为,尝试找出异常最可能的起因。分析的结果是下述一种或两种:

  • 一组简明的谓词,描述引发性能异常的系统配置或者工作负载特征组合。比如,解释由于网络减速造成的异常:
第 2 段(可获 2 积分)
network_send < 10KB
 ∧ network_recv < 10KB
 ∧ client_wait_times > 100ms
 ∧ cpu_usage < 5
  • 基于系统中存在的因果模型的高级诊断,举例来说“重做日志文件的循环。”

     

假设第一个例子中的谓词展示给用户之后,用户基于这些提示诊断根本原因为网络减速。这个信息反馈给DBSherlock,系统接受这些谓词,并且标记实际起因。

该“起因”和对应的谓词构成一个因果模型,Sherlock将会在未来的诊断中利用该模型。

第 3 段(可获 2 积分)

这些操作与时间序列离散、异常检测和相关性类似,但是本系统的重点是解释异常(假设异常已经被用户检测到,因为异常都是明显的“性能很糟糕”)而不是检测异常。

使用本系统的起点就像下图所示,用户可以高亮某个区域,然后问“这里怎么了?”

DBSherlock从三个主要的层面回答这个问题:第一,谓词生成,寻找最有效区分反常和正常区域的最小数量的谓词;第二,谓词的集合可以通过使用有限领域知识编码的简单规则进一步修剪;第三,因果模型层试图去学习,映射谓词集合到更高层的起因,捕获DBA过去的知识和经验。

第 4 段(可获 2 积分)

DBSherlock做为一个模块集成在DBSeer中,DBSeer是一个开源的数据库管理工具箱,用来监控和预测数据库性能。这意味着DBSherlock依赖DBSeer收集和可视化性能统计数据的API。在一秒时间区间内,下述数据将会被收集:

  • 操作系统资源消耗统计
  • 数据库管理系统工作负载统计
  • 带有时间戳的查询日志
  • 操作系统和数据库管理系统的配置参数

从这些原始数据中,DBSeer计算每个时间区间内执行的事务的聚合统计数据,然后依照时间戳使这些数据对齐操作系统和数据库管理系统的统计数据。生成的时间序列就是DBSherlock用于诊断的起点。

第 5 段(可获 2 积分)

寻找关注区域的谓词

从一个给定的异常区域和正常区域开始,现在的目标是寻找尽可能清晰地区分这两个区域的谓词。一个谓词的区分能力定义为满足谓词的异常区域百分比与满足谓词的正常区域百分比的差值。

鉴别具有高度区分能力的谓词是有挑战性的。第一,无法通过简单地比较原始数据中的某个属性来获取高区分能力的谓词。因为真实世界的数据集和操作系统日志是有噪音的,各项数据的值会正常的波动。第二,由于人为原因,用户可能没有精确的指明异常区域的边界。用户也可能忽略了比较小范围的异常区域,误导DBSherlock将其做为正常区域看待。这些错误的来源加重了本身就具有噪音的数据集的问题。第三,任何人也无法轻易地下结论某些高区分能力的谓词就是异常的真实起因。这些谓词可能仅仅是与异常具有相关性,或者是异常的症状表现,这将导致不正确的诊断。

第 6 段(可获 2 积分)

首先离散化关注区域范围内的时间序列(或者多维时间序列内的每个属性,如果你倾向于从这个角度思考问题)。对于数值属性,寻找关注区域内的最大最小值,将数值的范围平分为R份。比如,范围为0-100,R为5,那么分为[0,20)、[20,40)、[40,60)、[60,80)和[80,100)。默认情况下DBSherlock使用R=1000。对于分类属性,每个唯一的属性值做为一份。该步的结果就是一个分区空间(为什么不选用一个标准时间序列算法呢?比如SAX

第 7 段(可获 2 积分)

然后对每个分区打标签。对于每个分区,检验落到其中的所有数据项。如果所有的数据项都来自异常区域,那么该份标记为异常。如果全部来自正常区域,那么标记为正常。否则留空(不标记)。

在此阶段,由于数据中的噪音,结果可能像下图所示,正常异常混合交叉:

为了处理这些噪音,需要执行过滤和填充。过滤帮助寻找更清晰区分正常与异常的边界。这个过程分两个阶段,在第一个阶段中检验每个非空份(也就是标记为正常或异常的份)。如果其最近的非空份不是同一类型(比如某个异常份的第一个非空邻居是正常份)那么标记该份。在第二个阶段中将所有标记的份置为空。

第 8 段(可获 2 积分)

我们的过滤策略旨在分离最初在分区空间上混合的正常和异常分区(例如,由于数据中的噪声或用户错误)。 如果属性Attr有一个具有高分离能力的谓词,那么在过滤步骤之后,正常和异常分区很可能形成很好地分离的簇。 此步骤减轻了噪声数据或用户错误的一些负面影响,否则可能排除具有与输出的高分离能力的谓词。

过滤后,我们将留下更大块的连续正常和异常分区,由空分区分隔。 空分区现在通过将它们标记为正常或异常来填充:

第 9 段(可获 2 积分)
  • 如果到空分区的最近的相邻分区都具有相同类型(例如,异常),则分配该类型。
  • 如果最近的相邻分区具有不同类型,则向该分区分配较近分区的标签。 距离计算包括异常距离乘数因子δ,其在进行比较之前乘以到异常相邻近邻的距离。 如果δ> 1,当然,这有利于标记一个分区正常。 DBSherlock默认使用δ= 10。

最后,需要为属性提取候选谓词。 如果以下两个条件成立,则为数字属性生成候选谓词:

第 10 段(可获 2 积分)
  1. 单一块的异常分区
  2. 在处理完属性值使之的值落在 0 到 1 的范围内,在正常范围内的属性平均值和异常范围的属性平均值至少通过 θ 区分,θ 是一个可配置的差分阈值。

如果数值属性通过两个测试,将会生成如下可预测的形式:

  • attr < x
  • attr > x
  • x < attr < y

分类属性的预测要简单得多,DBSherlock 简化了生成预测属性 Attr &isin; {p | p.label = abnormal}.

第 11 段(可获 2 积分)

结合领域知识

我们的算法提取具有高诊断力的谓词。 然而,这些谓词中的一些可能是根本原因的继发性症状,如果移除它们,可使诊断更容易。

次要症状谓词可以用少量的领域知识来修剪。 此知识表示为一组具有Attri→Attrj形式的规则,意思是如果生成了Attri和Attrj的谓词,则Attrj的谓词很可能是次要症状。 规则集中不允许循环。

第 12 段(可获 2 积分)

例如,对于Linux上的MySQL,只有四个规则:

  • DBMS CPU使用情况→操作系统CPU使用率。 (如果DBMS CPU使用率很高,我们可能也不需要标记操作系统CPU使用率)
  • OS分配页→OS可用页; 操作系统使用的交换空间→操作系统自由交换空间; 操作系统CPU使用情况→操作系统CPU空闲。 (对于这三个,一个属性总是完全由另一个决定,所以是无趣的)。

因果模型

前面关于性能解释的工作只关注于以谓词的形式生成解释。 DBSherlock通过生成更准确的谓词(比F1-measure高出20-55%;)来提高此功能。 然而,DBSherlock的主要目标是超越原始谓词,并提供更多人类可读性和描述性的解释。

第 13 段(可获 2 积分)

假设DBSherlock找到对异常具有高预测能力的三个谓词,并且在调查之后,用户在这些线索的帮助下确认真正的原因是重做日志文件的切换。然后将 “重做日志文件的切换”作为因果模型添加到系统,并且与这三个谓词链接。

之后,对于将来的每个诊断查询,DBSherlock计算该因果模型的置信度,并且如果其置信度高于阈值λ,则将“日志切换”报告为可能的原因。 默认情况下,DBSherlock仅显示置信度高于λ= 20%的那些原因。 然而,用户可以修改λ旋钮(即,使用滑动条)来交互地查看更少或更多的原因。

第 14 段(可获 2 积分)

当为同一个根原因创建多个因果模型,并随时间分析不同异常时,DBSherlock可以通过仅保留同时出现在两个模型中的属性谓词将其合并成一个,并通过将边界条件(或类别) 匹配谓词。 在评估中,证明合并的因果模型通常比原始模型准确30%。

DBSherlock行动

本文的第8节包含对Sherlock的评估,寻找十种常见类型的数据库性能异常,如下所示:

第 15 段(可获 2 积分)

详情请参阅完整的论文。 简短版本是:

我们广泛的实验表明,我们的算法在识别正确的解释上非常有效,并且比先进的算法更准确。 作为应对当今DBMS日益复杂的需要的工具,DBSherlock作为我们的工作负载管理工具包中的开源模块发布。

请注意,用于构建DBSherlock的原则不以任何深层次的方式与数据库性能解释的领域相关联,因此应该完全有可能采用这些想法并在其他场合中应用它们,例如:“为什么只对这个微服务的请求有延迟 ?

第 16 段(可获 2 积分)

文章评论