MySQL慢查询风险指数模型设计(2)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL慢查询风险指数模型设计

评分模型可以简单描述为:


score=sum(评分项*权重)

选取评分项边界

评分模型的评分项确认之后,为了防止单项分数过高,需要对评分项进行百分化,并且所有权重总和为 100 ,根据评分项计分模型可以算出符合增长曲线的分数,这样评分模型计算出来的总分数为 100 ,故需要确认每项的分数边界、权重、计分模型。只有各项的边界、权重、计分模型确认之后,给定一个慢查询,评分模型才能计算出合理的分数。评分项的边界可以根据当前历史数据设置。计分模型和权重可以首先进行假设,测试完成之后如果不符合预期则修改权重、计分模型,并重复测试-修改过程,直至测试结果符合预期。

边界选取标准

根据当前慢查询的历时记录,由于极值数据可能会存在干扰,导致真实值失真,故需要去除最高部分 5% 的异常值,将 95 分位的值作为每个评分项的最高边界。如果单项值超过最高边界的值评分项,单项分数都将被设置为最大分数。

查询时间:

95 分位的 sql 慢查询耗时约在 60s 左右

锁等待时间

95分位的慢查询锁等待时间约为0.00629s

扫描行数

95分位的慢查询扫描行数约为1785w行

查询次数

95分位的慢查询次数约为180个

发送流量

由于流量字段缺失,暂时不计入评分系统。

计分项边界值

计分模型

每一项计分项的边界得以确认,值越大分数越高。但是存在以下情况:

某些评分项的值对系统的影响程度并不是成正比例,超过某个临界点,对系统的压力会迅速增长。

比如:查询次数,一条超时为1s的sql,查询1次、查询10次、查询100次,对系统的压力是不一样的,量变会引发质变。
设计有一下四种计分模型:

计分代码如下:

/**
 * @Description: 计算单项得分,分数介于最小分数和最大分数之间,可选的计分模型有:类正弦模型、正弦模型、指数模型、正比例模型
 * @Param val: 单项当前值
 * @Param minVal: 单项最小值
 * @Param maxVal: 单项最大值
 * @Param minScore: 单项最小得分
 * @Param maxScore: 单项最大得分
 * @Param calWay: 计分模型方式
 * @Return float64: 单项得分
 */
func calSingleScore(val, minVal, maxVal, minScore, maxScore float64, calWay string) float64 {
   if maxVal == 0 { // 如果值为0则返回0
      return 0
   }
   if val >= maxVal { // 如果值超过上边界,则设置为最大分数
      return maxScore
   }
   if val <= minVal { // 如果值低于下边界,则设置为最小分数
      return minScore
   }
   var scoreRatio float64
   switch calWay {
   case "likeSin": // 类正弦曲线
      // Y = a + b·X + c·X2 + d·X3 + e·X4 + f·X5
      b := 0.0547372760360247
      c := -0.0231045458864445
      d := 0.00455283203705563
      e := -0.000281663561505204
      f := 5.57101673606083e-06
      // 使用20个函数绘制点位拟合出来的
      ratio := (val - minVal) / (maxVal - minVal) * 20
      scoreRatio = b*ratio + c*(ratio*ratio) + d*(ratio*ratio*ratio) +
         e*(ratio*ratio*ratio*ratio) + f*(ratio*ratio*ratio*ratio*ratio)
   case "sin": // 正弦曲线
      ratio := (val - minVal) / (maxVal - minVal)
      scoreRatio = math.Sin(math.Pi / 2 * ratio)
   case "exponent": // 指数曲线
      ratio := (val - minVal) / (maxVal - minVal)
      a := math.Log2(maxScore - minScore)
      scoreRatio = math.Pow(2, a*ratio)
      return scoreRatio
   default: // 默认是正比例
      scoreRatio = (val - minVal) / (maxVal - minVal)
   }
   return scoreRatio * (maxScore - minScore)
}


模型曲线如下:















































         
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
关系型数据库 MySQL 数据库
数据迁移脚本优化过程:从 MySQL 到 Django 模型表
在大规模的数据迁移过程中,性能问题往往是开发者面临的主要挑战之一。本文将分析一个数据迁移脚本的优化过程,展示如何从 MySQL 数据库迁移数据到 Django 模型表,并探讨优化前后的性能差异。
|
3月前
|
SQL 关系型数据库 MySQL
【MySQL 慢查询秘籍】慢SQL无处遁形!实战指南:一步步教你揪出数据库性能杀手!
【8月更文挑战第24天】本文以教程形式深入探讨了MySQL慢SQL查询的分析与优化方法。首先介绍了如何配置MySQL以记录执行时间过长的SQL语句。接着,利用内置工具`mysqlslowlog`及第三方工具`pt-query-digest`对慢查询日志进行了详细分析。通过一个具体示例展示了可能导致性能瓶颈的查询,并提出了相应的优化策略,包括添加索引、缩小查询范围、使用`EXPLAIN`分析执行计划等。掌握这些技巧对于提升MySQL数据库性能具有重要意义。
184 1
|
3月前
|
前端开发 C# 设计模式
“深度剖析WPF开发中的设计模式应用:以MVVM为核心,手把手教你重构代码结构,实现软件工程的最佳实践与高效协作”
【8月更文挑战第31天】设计模式是在软件工程中解决常见问题的成熟方案。在WPF开发中,合理应用如MVC、MVVM及工厂模式等能显著提升代码质量和可维护性。本文通过具体案例,详细解析了这些模式的实际应用,特别是MVVM模式如何通过分离UI逻辑与业务逻辑,实现视图与模型的松耦合,从而优化代码结构并提高开发效率。通过示例代码展示了从模型定义、视图模型管理到视图展示的全过程,帮助读者更好地理解并应用这些模式。
92 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL——开启慢查询
MySQL——开启慢查询
37 0
|
5月前
|
关系型数据库 MySQL 数据库
『Django』模型入门教程-操作MySQL
一个后台如果没有数据库可以说废了一半。日常开发中大多数时候都在与数据库打交道。Django 为我们提供了一种更简单的操作数据库的方式。 在 Django 中,模型(Model)是用来定义数据库结构的类。每个模型类通常对应数据库中的一个表,类的属性对应表中的列。通过定义模型,Django 的 ORM(Object-Relational Mapping)可以将 Python 对象映射到数据库表,并提供一套 API 来进行数据库操作。 本文介绍模型的用法。
|
5月前
|
SQL 缓存 关系型数据库
MySQL慢查询优化实践问答
MySQL慢查询优化实践问答
|
5月前
|
存储 关系型数据库 MySQL
MySQL周内训参照1、ER实体关系图与数据库模型图绘制
MySQL周内训参照1、ER实体关系图与数据库模型图绘制
73 1
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库——索引(3)-索引语法(创建索引、查看索引、删除索引、案例演示),SQL性能分析(SQL执行频率,慢查询日志)
MySQL数据库——索引(3)-索引语法(创建索引、查看索引、删除索引、案例演示),SQL性能分析(SQL执行频率,慢查询日志)
58 2
|
5月前
|
存储 关系型数据库 MySQL
深入探索MySQL:成本模型解析与查询性能优化
深入探索MySQL:成本模型解析与查询性能优化
|
5月前
|
关系型数据库 MySQL 调度
深入理解MySQL InnoDB线程模型
深入理解MySQL InnoDB线程模型