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

news2024/11/26 9:27:57

文章目录

  • 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.coloradmin.cn/o/2247762.html

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

相关文章

IO多路复用(Linux epoll)

文章目录 一、IO多路复用介绍1. 缓存 I/O (各种IO模型缘起) 二、目前有哪些IO多路复用的方案三、关联基础知识1. 用户空间和内核空间2. 文件描述符fd 四、Linux IO多路复用 select五、Linux IO多路复用 epoll1. epoll 介绍2. epoll只提供三个函数ET模式与LT模式 3. demo验证 六…

【数据结构与算法】相交链表、环形链表(判断是否有环)、环形链表(返回入环节点)

主页:HABUO🍁主页:HABUO 🍁如果再也不能见到你,祝你早安,午安,晚安🍁 1.相交链表 题目:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表…

Move 合约部署踩坑笔记:如何解决 Sui 客户端发布错误Committing lock file

Move 共学活动:快速上手 Move 开发 为了帮助更多开发者快速了解和掌握 Move 编程语言,Move 共学活动由 HOH 社区、HackQuest、OpenBuild、KeyMap 联合发起。该活动旨在为新手小白提供一个良好的学习平台,带领大家一步步熟悉 Move 语言&#…

【C语言】野指针问题详解及防范方法

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 💯前言💯什么是野指针?💯未初始化的指针代码示例问题分析解决方法 💯指针越界访问代码示例问题分析解决方法 💯指向已释放内存的…

关于如何在k8s中搭建一个nsfw黄图鉴定模型

随着现在应用内图片越来越多,安全审查也是必不可少的一个操作了 下面手把手教你如何将huggingface中的黄图检测模型部署到自己的服务器上去 1.找到对应的模型 nsfw_image_detection 2.在本地先验证如何使用 首先安装transformers python库 pip install transform…

初学 flutter 环境变量配置

一、jdk(jdk11) 1)配置环境变量 新增:JAVA_HOMEC:\Program Files\Java\jdk-11 //你的jdk目录 在path新增:%JAVA_HOME%\bin2)验证是否配置成功(cmd运行命令) java java -version …

信息安全实验--密码学实验工具:CrypTool

1. CrypTool介绍💭 CrypTool 1的开源教育工具,用于密码学研究。通过CrypTool 1,可以实现加密和解密操作,数字签名。CrypTool1和2有很多区别的。 来源于:网络安全快速入门5-密码学及密码破解工具CrypTool实战_百度知道…

服务器数据恢复—raid5阵列+LVM+VXFS数据恢复案例

服务器存储数据恢复环境: 某品牌MSA2000FC存储中有一组由7块盘组建的RAID5阵列,另外还有1块硬盘作为热备盘使用。 基于RAID5阵列划分的几个LUN分配给小机使用,存储空间通过LVM管理,重要数据为Oracle数据库及OA服务端。 服务器存储…

基于微信小程序的酒店客房管理系统+LW示例参考

1.项目介绍 系统角色:管理员、员工、普通用户功能模块:员工管理、用户管理、客房管理、预订管理、商品管理、评价管理、续订管理、订单管理等技术选型:SSM,vue,uniapp等测试环境:idea2024,jdk1…

学习Zookeeper

Zookeeper有手就行 1. 初识ZooKeeper1.1 安装ZooKeeper1.2 ZooKeeper命令操作1.2.1 Zookeeper数据模型1.2.2 Zookeeper 服务端常用命令1.2.3 Zookeeper客户端常用命令 2. ZooKeeperJavaAPl操作2.1 Curator介绍2.2 CuratorAPI常用操作2.2.0 引入Curator支持2.2.1 建立连接2.2.2 …

java基础知识(Math类)

引入:Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根 import java.util.Math 1.abs绝对值 int abs Math.abs(-9); 2.pow求幂 double pow Math.pow(2,4); 3.向上取整 double ceil Math.ceil(3.9);//ceil 4 4.向下取整 dou…

【AIGC】大模型面试高频考点-RAG中Embedding模型选型

【AIGC】大模型面试高频考点-RAG中Embedding模型选型 (一)MTEB排行榜英文模型排名:1、bge-en-icl2、stella_en_1.5B_v53、SFR-Embedding-2_R4、gte-Qwen2-7B-instruct5、stella_en_400M_v56、bge-multilingual-gemma27、NV-Embed-v18、voyage…

学习threejs,使用设置normalMap法向量贴图创建更加细致的凹凸和褶皱

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.MeshPhongMaterial高…

SAP ME2L/ME2M/ME3M报表增强添加字段

SAP ME2L/ME2M/ME3M报表增强添加字段(包含:LMEREPI02、SE18:ES_BADI_ME_REPORTING) ME2L、ME2M、ME3M这三个报表的字段增强,核心点都在同一个结构里 SE11:MEREP_OUTTAB_PURCHDOC 在这里加字段,如果要加的字段是EKKO、…

dubbo-go框架介绍

框架介绍 什么是 dubbo-go Dubbo-go 是 Apache Dubbo 的 go 语言实现,它完全遵循 Apache Dubbo 设计原则与目标,是 go 语言领域的一款优秀微服务开发框架。dubbo-go 提供: API 与 RPC 协议:帮助解决组件之间的 RPC 通信问题&am…

不只是请求和响应:使用Fiddler抓包URL和Method全指南(中)

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持! 不只是请求和响应:使用Fiddler抓包HTTP协议全指南(上)-CSDN博客https://blog.csdn.net/Chunfeng6yugan/article/details/144005872?spm1001.2014.3001.5502 🙉在(上)篇博客中&#xf…

Linux操作系统学习---初识环境变量

目录 ​编辑 环境变量的概念: 小插曲:main函数的第一、二个参数 获取环境变量信息: 1.main函数的第三个参数 2.查看单个环境变量 3.c语言库函数getenv() 和环境变量相关的操作指令: 1.export---导出环境变量: 2.unse…

跨平台应用开发框架(1)----Qt(组件篇)

目录 1.Qt 1.Qt 的主要特点 2.Qt的使用场景 3.Qt的版本 2.QtSDK 1.Qt SDK 的组成部分 2.安装 Qt SDK 3.Qt SDK 的优势 3.Qt初识 1.快速上手 widget.cpp mian.cpp widget.h Helloworld.pro 2.对象树 3.坐标系 4.信号和槽 1. 信号和槽的基本概念 2. 信号和槽的…

mysql索引失效的五种情况

第一种 违反最左前缀法则 这个是针对联合索引的。 假设有个tb_seller表,现在给三个字段建立联合索引,建立的时候字段顺序不可随便设置,字段顺序: name, status, address。下图Seq_in_index对应的是联合索引顺序。 判断索引失效用…

H3C OSPF 多区域实验

目录 前言 实验拓扑 实验需求 实验解析 路由器配置 测试 前言 此篇文章为 OSPF多区域试验,建议先食用OSPF单区域实验,理解实验原理 学习基本配置,再来使用此篇,效果更佳!(当然如果你已经了解原理与基…