Debugging performance anomalies in real-world databases is challenging. Causal inference techniques enable qualitative and quantitative root cause analysis of performance downgrade. Nevertheless, causality analysis is practically challenging, particularly due to limited observability. Recently, chaos engineering has been applied to test complex real-world software systems. Chaos frameworks like Chaos Mesh mutate a set of chaos variables to inject catastrophic events (e.g., network slowdowns) to "stress" software systems. The systems under chaos stress are then tested using methods like differential testing to check if they retain their normal functionality (e.g., SQL query output is always correct under stress). Despite its ubiquity in the industry, chaos engineering is now employed mostly to aid software testing rather for performance debugging. This paper identifies novel usage of chaos engineering on helping developers diagnose performance anomalies in databases. Our presented framework, PERFCE, comprises an offline phase and an online phase. The offline phase learns the statistical models of the target database system, whilst the online phase diagnoses the root cause of monitored performance anomalies on the fly. During the offline phase, PERFCE leverages both passive observations and proactive chaos experiments to constitute accurate causal graphs and structural equation models (SEMs). When observing performance anomalies during the online phase, causal graphs enable qualitative root cause identification (e.g., high CPU usage) and SEMs enable quantitative counterfactual analysis (e.g., determining "when CPU usage is reduced to 45\%, performance returns to normal"). PERFCE notably outperforms prior works on common synthetic datasets, and our evaluation on real-world databases, MySQL and TiDB, shows that PERFCE is highly accurate and moderately expensive.
翻译:在真实世界数据库中调试性能异常现象是具有挑战性的。 造成混乱压力的系统随后会用不同测试方法测试是否保持正常功能( 例如, SQL 查询输出总是在压力下正确 ) 。 尽管在行业中,因果关系分析实际上具有挑战性, 特别是由于观察能力有限。 最近, 使用混乱工程来测试复杂的真实世界软件系统。 最近, 已经应用了混乱工程来测试复杂的真实世界软件系统。 混乱框架, 比如 Chaos Mesh 突变了一系列混乱变量, 以将灾难性事件( 例如网络减速) 注入“ 压力” 软件系统中的“ 压力” 系统。 然后, 混乱压力下的系统会使用不同测试方法来检查是否保持正常功能( 例如, SQL 查询输出数据输出总是正确 ) 。 在离线阶段, 混乱工程现在主要用来帮助软件测试, 而不是调试运行 。 PERFC 和 C IML 运行前的运行状态是“ 快速的状态 ” 。 当目标数据库的统计模型中,, 在在线阶段里, 测试中,, 直径直径, 直径, 和直径, 直径, 直径, 直径, 直径, 运行中, 直径, 直 直 直 直 直 直 直 直 直 直 直, 直 直 直 直 直 直 直 直 运行 直 直 直 直 直 直 直, 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行 运行