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

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

我们期望某些计分项在各个不同的阶段对分数的影响是不一样的,故首先假设计分模型和权重如下:


image.png


整体的评分模型如下:



慢查询风险指数 = sum(func(慢查询评分项) * 权重)

ps:风险指数总分数上限为100


image.png


五、测试

测试一

权重分配


image.png

计算结果数据分布


image.png

样本SQL分析


image.png

不符合的原因:扫描行数越多对系统的影响越大,所需要的 IO CPU 资源也就越多,系统处于无响应状态的几率越大,其影响比例应该要远高于其他评分项。我们期望扫描行数越多,分值越高,越需要关注,故需要调整各个评分项权重和计分模型。

测试二

权重分配

重新分片权重并修改计分模型之后,整体模型如下:

image.png

计算结果数据分布

image.png

样本sql分析

image.png

六、结论

评分模型


image.png

采用权重分配二,需要重点关注所有分数为50以上的慢查询。

七、展望

更合理的评分模型

percona sever/mariadb 版本的mysql可以有更丰富的统计项

percona server/mariadb的慢查询示例

# Time: 210818  9:54:57
# User@Host: fangyuan.qian[fangyuan.qian] @  [127.0.0.1]  Id: 316541341
# Schema:   Last_errno: 0  Killed: 0
# Query_time: 2.777965  Lock_time: 0.000289  Rows_sent: 284  Rows_examined: 1341  Rows_affected: 0
# Bytes_sent: 35600  Tmp_tables: 1  Tmp_disk_tables: 0  Tmp_table_sizes: 1044920
# InnoDB_trx_id: 52AFB919
# QC_Hit: No  Full_scan: Yes  Full_join: No  Tmp_table: Yes  Tmp_table_on_disk: No
# Filesort: Yes  Filesort_on_disk: No  Merge_passes: 0
#   InnoDB_IO_r_ops: 0  InnoDB_IO_r_bytes: 0  InnoDB_IO_r_wait: 0.000000
#   InnoDB_rec_lock_wait: 0.000000  InnoDB_queue_wait: 0.000107
#   InnoDB_pages_distinct: 1862
SET timestamp=1629251697;
SELECT
               a.ts_min                                      AS slowlog_time,
               a.checksum,
               SUM(a.ts_cnt)                                 AS d_ts_cnt,
               ROUND(SUM(a.Query_time_sum), 2)               AS d_query_time,
               ROUND(SUM(a.Query_time_sum) / SUM(a.ts_cnt), 2) AS d_query_time_avg,
               a.host_max                                    AS host_ip,
               a.db_max                                      AS db_name,
               a.user_max                                    AS user_name,
               b.first_seen                                  AS first_seen_time
           FROM mysql_slowlog_192_168_0_84_3306.query_history a force index(idx_ts_min),
                mysql_slowlog_192_168_0_84_3306.query_review b
           WHERE a.checksum = b.checksum
               AND length(a.checksum)>=15
               AND ts_min >= '2021-06-04'
               AND ts_min < '2021-06-21'
           GROUP BY a.checksum;



未来可以将更多的指标纳入评分模型,评分维度会更多,模型也会更精确,慢查询风险指数也会更合理。

与业务相结合

针对不同的业务,需要关注的慢查询风险指数也应该是不一样的,核心业务的慢查询风险指数应该比较低。不同的业务之间慢查询风险指数相同的其表示的影响程度也不一定相同。故引入一个「业务等级权重」,目的是将所有业务的慢查询风险指数量化为同一个标准。高优先级的业务其「业务等级权重」也会越高,低优先级的业务其「业务等级权重」也会越低。按照appCode维度,将每个appCode的慢查询TopN发送给业务方,指数越高业务应该越优先处理。同时需要设置慢查询平台的「慢查询风险安全指数」水位线,超过这个水位线的所有慢查询都需要关注。


最终慢查询风险指数 = 慢查询风险指数 * 业务等级权重

八、总结

  1. 通过我们的慢查询分级模型,可以很好的把一个慢查询抽象化为一个具体的数字,将其数字化,给我们的运维带来了非常大的便捷性,这个数字,我们可以称之为“慢查询业务风险指数”。
  2. 有了数字化慢查询,我们就可以很好地去界定一个慢查询是不是真的有风险,或者风险有多大,这样就可以以上帝视角的方式,来管理所有的慢查询, 这样自上而下地去解决问题,相比让DBA整天盯着一个个具体的慢查询去解决的话,效率会非常高。
  3. 根据我们抽象化出来的风险指数(慢查询业务风险指数),我们可以按照一定的周期,将风险大的慢查询,推送给对应的具体的负责人,然后不断地解决,不断地迭代,最终实现解决慢查询从“被动”到“主动”的完美转换。
  4. 我们最终的目标是,让所有慢查询的风险指数的中位数,或者90%70%分位数,不断地下降,最终处于一个良性的状态

本文转自去哪儿技术沙龙

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
4月前
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
5月前
|
SQL 缓存 关系型数据库
MySQL 慢查询是怎样优化的
本文深入解析了MySQL查询速度变慢的原因及优化策略,涵盖查询缓存、执行流程、SQL优化、执行计划分析(如EXPLAIN)、查询状态查看等内容,帮助开发者快速定位并解决慢查询问题。
245 0
|
5月前
|
SQL 监控 关系型数据库
MySQL慢查询攻略
本文详细介绍了MySQL慢查询优化的全流程,从定位性能瓶颈到具体优化策略,再到高级调优与预防监控。首先通过开启慢查询日志和分析工具(如pt-query-digest)找到问题SQL,接着从索引优化(如最左前缀原则、覆盖索引)、SQL语句重构(如避免全表扫描)及EXPLAIN执行计划解析等方面进行核心优化。随后深入参数调优和架构升级,如调整innodb_buffer_pool_size、实施分库分表等。最后,通过实时监控工具(如PMM、Prometheus+Grafana)建立长效机制,并以电商订单查询为例,展示优化前后性能大幅提升的实战效果。
563 0
|
SQL 关系型数据库 MySQL
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
MySQL慢查询优化、索引优化,是必知必备,大厂面试高频,本文深入详解,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
|
9月前
|
存储 关系型数据库 MySQL
MySQL进阶突击系列(09)数据磁盘存储模型 | 一行数据怎么存?
文中详细介绍了MySQL数据库中一行数据在磁盘上的存储机制,包括表空间、段、区、页和行的具体结构,以及如何设计和优化行数据存储以提高性能。
|
10月前
|
关系型数据库 MySQL 数据库
mysql慢查询每日汇报与分析
通过启用慢查询日志、提取和分析慢查询日志,可以有效识别和优化数据库中的性能瓶颈。结合适当的自动化工具和优化措施,可以显著提高MySQL数据库的性能和稳定性。希望本文的详解和示例能够为数据库管理人员提供有价值的参考,帮助实现高效的数据库管理。
262 11
|
11月前
|
缓存 关系型数据库 MySQL
MySQL 索引优化以及慢查询优化
通过本文的介绍,希望您能够深入理解MySQL索引优化和慢查询优化的方法,并在实际应用中灵活运用这些技术,提升数据库的整体性能。
293 18
|
SQL 关系型数据库 MySQL
MySQL慢查询优化、索引优化、以及表等优化详解
本文详细介绍了MySQL优化方案,包括索引优化、SQL慢查询优化和数据库表优化,帮助提升数据库性能。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
MySQL慢查询优化、索引优化、以及表等优化详解
|
11月前
|
缓存 关系型数据库 MySQL
MySQL 索引优化以及慢查询优化
通过本文的介绍,希望您能够深入理解MySQL索引优化和慢查询优化的方法,并在实际应用中灵活运用这些技术,提升数据库的整体性能。
808 7
|
11月前
|
缓存 关系型数据库 MySQL
MySQL 索引优化与慢查询优化:原理与实践
通过本文的介绍,希望您能够深入理解MySQL索引优化与慢查询优化的原理和实践方法,并在实际项目中灵活运用这些技术,提升数据库的整体性能。
606 5

推荐镜像

更多
下一篇
oss云网关配置