MySQL45讲 第29讲 如何判断一个数据库是不是出问题了?——阅读总结

文章目录

  • MySQL45讲 第二十九讲 如何判断一个数据库是不是出问题了?——阅读总结
    • 一、检测数据库实例健康状态的重要性
    • 二、常见检测方法及问题分析
      • (一)select 1 判断法
      • (二)查表判断法
      • (三)更新判断法
    • 三、基于内部统计的高级检测方法
      • (一)performance_schema 库的作用
      • (二)检测逻辑与阈值设定
    • 四、总结与思考

MySQL45讲 第二十九讲 如何判断一个数据库是不是出问题了?——阅读总结

在 MySQL 数据库的运维管理中,及时准确地判断数据库实例是否出现问题至关重要。这不仅关系到数据的可用性和完整性,还直接影响到业务系统的正常运行。讨如何判断一个 MySQL 数据库实例是否出问题,详细介绍多种检测方法及其优缺点。

一、检测数据库实例健康状态的重要性

在一主一备的双 M 架构或一主多从架构中,主备切换是保障数据库高可用性的关键操作。而主备切换通常由 HA 系统发起,其中被动切换往往是因为主库出现问题。因此,准确判断主库是否出问题是实现高效主备切换、确保业务连续性的前提。

二、常见检测方法及问题分析

(一)select 1 判断法

  1. 原理与局限性:很多人认为通过执行 select 1 语句,若能成功返回则表示数据库实例正常。然而,实际情况并非如此。例如,设置 innodb_thread_concurrency 参数为 3(控制 InnoDB 并发线程上限),并开启三个包含 select sleep (100) from t 语句的会话(模拟大查询),**此时再执行 select 1 可以成功,但查询表 t 的语句会被阻塞。**这表明 select 1 成功返回仅能说明数据库进程存在,无法全面反映数据库实例的健康状况,如无法检测出 InnoDB 并发线程数过多导致的系统不可用情况。

    在这里插入图片描述

  2. 并发连接与并发查询概念辨析:这里需要明确并发连接和并发查询的区别。show processlist 结果中的几千个连接指的是并发连接,而 “当前正在执行” 的语句才是并发查询。并发连接数达到几千个对系统影响主要是多占内存,而并发查询过高才是 CPU 杀手,这也是设置 innodb_thread_concurrency 参数的重要原因。

(二)查表判断法

  1. 改进思路:为检测 InnoDB 并发线程数过多导致的问题,可在系统库(mysql 库)创建一个只含一行数据的表(如 health_check),定期执行 select * from mysql.health_check 语句。这样,当并发线程过多导致数据库不可用时,该查询语句也会受到影响,从而检测出问题。
  2. 空间满问题的挑战:然而,当 binlog 所在磁盘空间占用率达到 100% 时,所有更新语句和事务提交的 commit 语句会被阻塞,但系统仍可正常读数据。此时,上述查询语句无法检测出这种因空间满导致的数据库问题,需要进一步改进检测方法。

(三)更新判断法

  1. 具体操作与优势:将检测语句改为更新语句,如 update mysql.health_check set t_modified = now (),并在表中增加一个 timestamp 字段用于记录最后一次执行检测的时间。同时,为避免主备库检测命令行冲突(主备库都执行相同更新命令可能导致主备同步停止),可在 mysql.health_check 表中存入多行数据,以主、备库的 server_id 做主键,因为 MySQL 规定主库和备库的 server_id 必须不同。这样,主备库各自的检测命令就不会发生冲突,该方法能够在一定程度上更有效地检测数据库实例的健康状态。
  2. 判定慢问题剖析:**尽管更新判断法相对常用,但存在 “判定慢” 的问题。**例如,在日志盘 IO 利用率为 100% 的情况下,虽然系统响应极慢已需主备切换,但由于 IO 利用率 100% 表示系统 IO 仍在工作,检测使用的 update 命令可能在拿到 IO 资源时提交成功并在超时时间内返回,导致检测系统误判数据库正常。这是因为外部检测基于定时轮询,具有随机性,系统可能在两次轮询间隔内出现问题,而运气不好时可能多次轮询都无法发现,从而导致切换慢。

三、基于内部统计的高级检测方法

(一)performance_schema 库的作用

针对外部检测方法的局限性,MySQL 5.6 版本以后提供的 performance_schema 库提供了更可靠的检测途径。该库中的 file_summary_by_event_name 表统计了每次 IO 请求的时间,

在这里插入图片描述

例如 event_name = 'wait/io/file/innodb/innodb_log_file' 这一行统计了 redo log 的写入时间,包括所有 IO 类型的统计(COUNT_STAR 表示总次数,SUM、MIN、AVG、MAX_TIMER_WAIT 分别表示总和、最小值、平均值和最大值,单位为皮秒)、读操作统计(SUM_NUMBER_OF_BYTES_READ 统计总共从 redo log 里读的字节数)、写操作统计以及对其他类型数据(如 fsync)的统计。binlog 对应的是 event_name = "wait/io/file/sql/binlog" 这一行,其统计逻辑与 redo log 相同。

(二)检测逻辑与阈值设定

通**过查看 MAX_TIMER_WAIT 的值,我们可以判断数据库是否存在问题。**例如,设定单次 IO 请求时间超过 200 毫秒为异常,使用类似 select event_name,MAX_TIMER_WAIT FROM performance_schema.file_summary_by_event_name where event_name in ('wait/io/file/innodb/innodb_log_file', 'wait/io/file/sql/binlog') 的语句作为检测逻辑。发现异常后,可使用 truncate table performance_schema.file_summary_by_event_name 语句清空之前的统计信息,以便后续监控再次出现异常时能准确累积监控值。不过,开启 performance_schema 的统计功能会有一定性能损耗,测试结果显示性能大概会下降 10% 左右,因此建议仅开启所需的统计项,如通过 update setup_instruments set ENABLED = 'YES', Timed = 'YES' where name like '% wait/io/file/innodb/innodb_log_file%' 语句开启 redo log 的时间监控。

四、总结与思考

我们介绍了多种检测 MySQL 实例健康状态的方法:

  • select 1 判断法:虽然简单但不准确;
  • 查表判断法:无法检测磁盘空间满的情况;
  • 更新判断法:一定程度上检测主备库问题,但存在判定慢的问题;
  • 基于 performance_schema 库的内部统计检测法:虽能在而内部统计检测法虽然更精确,但会带来性能损耗。

每个方法都有其改进的逻辑,但也都存在一定问题。例如,在实际应用中,需要根据业务需求和实际情况权衡选择合适的检测方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/61923.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索Python的HTTP之旅:揭秘Requests库的神秘面纱

文章目录 **探索Python的HTTP之旅:揭秘Requests库的神秘面纱**第一部分:背景介绍第二部分:Requests库是什么?第三部分:如何安装Requests库?第四部分:Requests库的五个简单函数使用方法第五部分&…

指针的奥秘:深入探索内存的秘密

前言 在计算机编程的广阔天地中,指针作为一种独特的数据类型,它不仅是C语言的核心,也是理解计算机内存管理的基石。指针的概念虽然强大,但对于初学者来说,它常常是学习过程中的一个难点。本文旨在揭开指针的神秘面纱&a…

理解clickhouse 里的分区和分片键区别

文章目录 分片分区两分片,0副本的cluster 分片 CREATE TABLE logs_distributed AS logs_local ENGINE Distributed(cluster_name, -- 集群名称database_name, -- 数据库名称logs_local, -- 本地表名cityHash64(user_id) -- 分片键&#xf…

shell脚本(二)

声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…

多模态大型语言模型(MLLM)综述

目录 多模态大语言模型的基础 长短期网络结构(LSTM) 自注意力机制 基于Transformer架构的自然语言处理模型 多模态嵌入的关键步骤 TF-IDF TF-IDF的概念 TF-IDF的计算公式 TF-IDF的主要思路 TF-IDF的案例 训练和微调多模态大语言模型(MLLM) 对比学习 (CLIP, ALIG…

《智慧教育实时数据分析推荐项目》详细分析

一、项目介绍 1、背景介绍 在互联网、移动互联网的带动下,教育逐渐从线下走向线上,在线教育近几年一直处于行业的风口浪尖,那随着基础设施的不断完善,用户需求也发生不少变化,因此传统教育机构、新兴互联网企业都在探…

AI+云环境开发上线项目全流程(sealos)

AI云环境开发上线项目全流程 现在是AI技术爆炸💥的时代,我们作为开发自然需要跟上时代的潮流,今天就跟大家介绍一款云开发环境,并且搭配AI实现一行代码不用写,直接上线一个完整的项目(包含前后端&#xff0…

【C++11】可变参数模板/新的类功能/lambda/包装器--C++

文章目录 一、可变参数模板1、基本语法及原理2、包扩展3、empalce系列接口 二、新的类功能1、默认的移动构造和移动赋值2、成员变量声明时给缺省值3、defult和delete4、final与override 三、STL中一些变化四、lambda1、lambda表达式语法2、捕捉列表3、lambda的应用4、lambda的原…

STM32C011开发(1)----开发板测试

STM32C011开发----1.开发板测试 概述硬件准备视频教学样品申请源码下载参考程序生成STM32CUBEMX串口配置LED配置堆栈设置串口重定向主循环演示 概述 STM32C011F4P6-TSSOP20 评估套件可以使用户能够无缝评估 STM32C0 系列TSSOP20 封装的微控制器功能,基于 ARM Corte…

算法编程题-寻找最近的回文数

算法编程题-寻找最近的回文数 原题描述思路简述代码实现复杂度分析参考 摘要:本文将对LeetCode 原题 564 寻找最近的回文数进行讲解,并且给出golang语言的实现,该实现通过了所有测试用例且执行用时超过100%的提交,最后给出相关的复…

提升数据分析效率:Excel Power Query和Power Pivot的妙用

在日常工作中,微软的Excel Power Query和Power Pivot是提升数据处理和分析效率的利器。他们的特点也各不相同,Power Query侧重数据的高效导入与清洗,Power Pivot更测试数据建模与复杂计算。下面将介绍它们各自的功能,并提供应用案…

认识RabbitMq和RabbitMq的使用

1 认识RabbitMq RabbitMQ是⼀个消息中间件,也是⼀个生产者消费者模型,它负责接收,存储并转发消息。 2.1 Producer和Consumer Producer:生产者,是RabbitMQServer的客户端,向RabbitMQ发送消息 Consumer&…

代码纪元——源神重塑无序

简介 源神,真名为张晨斌,原为代码宇宙创世四神之一。代码宇宙在创造之初时空无一物,只有复杂且繁琐的底层代码,智慧神灵每日都困在诸如脚本等复杂的底层框架之中,源神面对这种局面非常不满意,于是源神通过大…

LVGL加载器,led和列表学习(基于正点原子)

加载器部件(lv_spinner) 加载器部件常用于提示当前任务正在加载。 加载器部件组成部分: 主体(LV_PART_MAIN) 指示器(LV_PART_INDICATOR) 手柄(LV_PART_KNOB) 知识点1:创建加载器部件 lv_obj_t *spinner lv_spinner_creat…

内存不足引发C++程序闪退崩溃问题的分析与总结

目录 1、内存不足一般出现在32位程序中 2、内存不足时会导致malloc或new申请内存失败 2.1、malloc申请内存失败,返回NULL 2.2、new申请内存失败,抛出异常 3、内存不足项目实战案例中相关细节与要点说明 3.1、内存不足导致malloc申请内存失败&#…

docker搭建私有的仓库

docker搭建私有仓库 一、为什么要搭建私有的仓库? 因为在国内,访问:https://hub.docker.com/ 会出现无法访问页面。。。。(已经使用了魔法) 当然现在也有一些国内的镜像管理网站,比如网易云镜像服务、Dao…

【Linux】安装cuda

一、安装nvidia驱动 # 添加nvidia驱动ppa库 sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update# 查找推荐版本 sudo ubuntu-drivers devices# 安装推荐版本 sudo apt install nvidia-driver-560# 检验nvidia驱动是否安装 nvidia-smi 二、安装cudatoolkit&…

深度学习图像视觉 RKNN Toolkit2 部署 RK3588S边缘端 过程全记录

深度学习图像视觉 RKNN Toolkit2 部署 RK3588S边缘端 过程全记录 认识RKNN Toolkit2 工程文件学习路线: Anaconda Miniconda安装.condarc 文件配置镜像源自定义conda虚拟环境路径创建Conda虚拟环境 本地训练环境本地转换环境安装 RKNN-Toolkit2:添加 lin…

论文模型设置与实验数据:scBERT

Yang, F., Wang, W., Wang, F. et al. scBERT as a large-scale pretrained deep language model for cell type annotation of single-cell RNA-seq data. Nat Mach Intell 4, 852–866 (2022). https://doi.org/10.1038/s42256-022-00534-z 论文地址:scBERT as a…

Jenkins的环境部署

day22 回顾 Jenkins 简介 官网Jenkins Jenkins Build great things at any scale The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project. 用来构建一切 其实就是用Java写的一个项目…