当前位置: 首页 > news >正文

记录一次truncate导致MySQL夯住的故障

目录

环境信息:   

故障描述:   

处理过程:

原理分析:

    show processlist结果中的system lock含义:

     truncate原理:

1. TRUNCATE 的执行流程

2、TRUNCATE 表导致数据库夯住的原因

3、 TRUNCATE 表导致数据库夯住的解决方案

4、 kill TRUNCATE 语句失败后,主从数据不一致的原因:

5、为什么TRUNCATE TABLE users 会影响其他表的SQL

6、为什么 KILL 语句无法立刻终止 TRUNCATE

TRUNCATE 与 DELETE 的区别


环境信息:   

    mysql 5.7一主两从的架构。

故障描述:   

    truncate一张3000万行的大表,数据量约为45G,同时库中执行很多其他dml和select for update,主库夯死, 应用反馈没法打开,下游的接口不能查询,数据库活跃会话数在80左右。

    通过information_schema查询事务、锁、等待的SQL被阻塞住,迟迟没有结果。通过show processlist结果显示,数据库中truncate的SQL处于system lock状态,对其他表的查询、dml的SQL部分处于Opening tables状态以及部分在正常执行。期间从information_schema.innodb_locks和information_schema.innodb_lock_waits两个视图,偶尔成功,但均没有查询到任何锁等待和锁信息。

处理过程:

    1、通过show processlist拉取truncate会话信息,kill truncate语句后,通过show processlist发现truncate语句处于killed状态,没有被清理干净。查询information_schema.innodb_trx视图发现truncate语句仍然在执行。

    2、推测是有元数据锁等待,通过show processlist拉取所有应用会话,kill所有应用会话,发现数据库中的所有会话均为killed状态,数据库仍然夯住。

    3、断开一个从库的同步做数据保护,停止应用,通过stop命令重启数据库实例失败,最终通过kill方式关闭数据库,重启数据库实例后库中所有应用会话均被清理干净,主库恢复正常,应用打开,开始恢复对外服务。

    4、数据库恢复后,检查truncate过的表,主库中该表数据行数为0,所有数据均被清理干净。而未断开同步的从库该表数据仍然为三千多万行,此时可以确认主从数据不一致。

    5、经应用校验,主库数据无问题,最终以主库数据为准,重做两台从库的备机。

本次故障原因分析:

原理分析:

    show processlist结果中的system lock含义:

  • system lock 表示 TRUNCATE TABLE 正在等待释放相关资源(如 MDL 锁)。

  • 由于需要truncate的表可能有 活跃事务 在使用,导致 TRUNCATE 无法立即获取独占 MDL 锁,从而进入 system lock 状态。

     truncate原理:

     RUNCATE TABLEDDL(数据定义语言) 语句,而不是普通的 DELETE 语句。它在 MySQL 内部的执行方式DELETE 不同,主要依赖 表元数据重置物理数据页回收,因此执行速度更快,同时影响锁机制、事务处理和 Binlog 记录方式。

    MDL 锁不会自动超时,如果 TRUNCATE TABLE 语句 等待其他事务结束的时间过长,大量 SQL 都会排队等待,导致数据库响应变慢甚至无法对外提供服务

1. TRUNCATE 的执行流程

当执行 TRUNCATE TABLE table_name; 时,MySQL 主要做了以下几步:

(1)获取表的元数据锁(MDL)

  • TRUNCATE TABLEDDL 语句,执行时需要 获取 MDL EXCLUSIVE(排他元数据锁),以防止其他并发操作(如 SELECTINSERTUPDATE)。

  • 如果有并发事务或查询未提交,TRUNCATE 可能会被 阻塞,一直等到其他事务释放锁。

(2)重建表(适用于 InnoDB 引擎)

InnoDB 存储引擎下,TRUNCATE 不会逐行删除数据,而是 重建表结构

  1. 删除原表的表空间文件(.ibd)

    • TRUNCATE 直接 删除 users.ibd 文件(如果 innodb_file_per_table=ON)。

    • 释放所有数据页,表的行数归零。

  2. 重新创建一个空的新表

    • 生成一个新的 ibd 文件,表的 AUTO_INCREMENT 计数器也会被重置(除非 innodb_autoinc_persistent=ON)。

  3. 更新数据字典

    • InnoDB 更新 information_schema 的数据字典,重新分配新的表 ID。

   注意

  • TRUNCATE 不能回滚,因为它直接删除表空间文件,而不像 DELETE 那样记录事务日志。

  • AUTO_INCREMENT 计数器被重置,除非 innodb_autoinc_persistent=ON

(3)删除 & 重新创建表的相关统计信息

  • MySQL 重新计算表的统计信息,并 清空 innodb_buffer_pool 缓存 中的该表相关数据。

  • 这可能会导致 TRUNCATE 后的第一次查询变慢,因为 需要重新生成索引统计信息

2、TRUNCATE 表导致数据库夯住的原因

    truncate语句需要获取排他元数据锁,dml语句也需要获取共享元数据锁。

可能的原因:

  • 有长事务未提交,占用了 MDL

  • 有其他 DDL 语句在执行,与 TRUNCATE 发生冲突。

  • Binlog 复制未完成,导致 TRUNCATE 进入 system lock

 3、 TRUNCATE 表导致数据库夯住的解决方案

   1、通过FLUSH TABLES tablename; 命令先释放 table_cache 资源。

   2、通过SELECT * FROM performance_schema.metadata_locks WHERE OBJECT_NAME = 'tablename';检查对应表是否有元数据锁。

   3、确认没有元数据锁后再执行 TRUNCATE

   4、如果释放表元数据锁资源后执行truncate数据库还是夯住,kill该会话

   5、如果kill会话不生效,重启数据库实例

 4、 kill TRUNCATE 语句失败后,主从数据不一致的原因:

    主库 TRUNCATE 执行过程中被 kill,该truncate语句不会被回滚,只能继续执行完成,但因为kill语句,Binlog 未写入完整,从库未同步truncate语句,从中相应表并未清理。

  5、为什么TRUNCATE TABLE users 会影响其他表的SQL

    虽然 TRUNCATE TABLE users; 只影响 users,但由于 MDL 锁争用InnoDB 内部机制,会间接影响 其他表上的操作。

1.1. TRUNCATE TABLE 触发 MDL EXCLUSIVE

  • MDL(Metadata Lock)

    • TRUNCATE TABLE users; 需要获取 users 表的 MDL EXCLUSIVE

    • 该锁会等到 所有涉及 users 表的事务结束后 才能执行。

  • 问题

    • 如果有未提交的事务在访问 users(如 SELECT * FROM users),那么 TRUNCATE 会被阻塞,无法立即执行。

    • 这会导致新到来的 SELECT usersINSERT usersUPDATE users 排队等待,造成 Opening tables 状态。


1.2. TRUNCATE TABLE 触发 flush & purge 影响 InnoDB

  • TRUNCATE 不是简单的 DELETE,它会触发 表重建

    • TRUNCATE TABLE users; 重新创建 users.ibd 文件。

    • 触发 InnoDB 的 flush & purge 机制,可能导致 InnoDB 短暂冻结(stalling)

  • 问题

    • 如果 flush & purge 耗时较长,那么 整个 InnoDB 层会短暂变慢,导致 其他表的 SQL 也可能变慢或进入 Opening tables 状态


1.3. Opening tables 可能与 table_cache 相关

  • MySQL 需要在 table_cache 中找到表的描述信息(.frm、.ibd 等)

    • 如果 某个线程持有 MDL EXCLUSIVE(如 TRUNCATE users),而 table_cache 需要访问 users 的元数据,就可能导致等待。

  • 问题

    • 由于 table_cache 竞争,其他表的 SQL 也可能进入 Opening tables 状态

    • 未受影响的表(未被 table_cache 竞争影响的表)仍能正常运行,所以只有部分 SQL 卡住,部分仍可执行

    

6、为什么 KILL 语句无法立刻终止 TRUNCATE

(1)DDL 操作不受事务管理

  • TRUNCATE TABLE 不会记录 undo log,所以它 无法回滚

  • 一旦 TRUNCATE 语句开始执行,它会 删除表数据并重建表空间,这部分操作不能简单通过 KILL 终止并回滚。

  • 即使 KILL 了会话,MySQL 仍需要等待 TRUNCATE 彻底完成,以保证表的完整性

(2)DDL 操作涉及元数据变更

  • TRUNCATE 需要获取 元数据锁(MDL EXCLUSIVE),以阻止其他会话对表进行并发访问。

  • TRUNCATE 的执行流程通常如下:

    1. 获取 MDL 排他锁,阻止其他事务访问该表。

    2. 删除表的 .ibd 文件(如果 innodb_file_per_table=ON)。

    3. 重新创建一个新的空表。

    4. 释放 MDL 锁。

  • 如果在执行 TRUNCATE 期间 KILL 进程,MySQL 需要等待所有涉及的元数据修改完成,否则可能导致表结构损坏。

TRUNCATE 与 DELETE 的区别

对比项TRUNCATE TABLEDELETE FROM table
语句类型DDLDML
数据删除方式直接删除表空间文件,重建表按行删除,每次删除都会写入 redo log 和 undo log
事务支持不支持事务,不能回滚支持事务,可以回滚
执行速度快,O(1) 级别慢,O(n) 级别,受行数影响
Binlog 记录记录 DDL 操作记录 DELETE 影响的每一行
AUTO_INCREMENT 影响重置(除非 innodb_autoinc_persistent=ON不会重置
索引和表统计信息重置统计信息统计信息保持不变
触发器(Trigger)不会触发触发器会触发 DELETE 相关的触发器
外键约束不允许 TRUNCATE 关联外键表DELETE 允许 

 总结

  • 如果你想快速清空表数据,且不需要事务回滚,TRUNCATE 是更好的选择

  • 如果只想删除部分数据,或者希望事务支持,DELETE 更合适

     

相关文章:

记录一次truncate导致MySQL夯住的故障

目录 环境信息: 故障描述: 处理过程: 原理分析: show processlist结果中的system lock含义: truncate原理: 1. TRUNCATE 的执行流程 2、TRUNCATE 表导致数据库夯住的原因 3、 TRUNCATE 表导致…...

Java Web应用程序实现用户登录、学生信息管理和验证码验证以及页面跳转等基本功能(IDEA)含(Ajax、JSTL)

一、具体框架以及代码功能的展示: 1. 文件结构 web03: 项目根目录。 src: 包含Java源代码。 cn.lvb: 主包。 bean: 包含实体类,如 Book 和 Student。 controller: 包含处理HTTP请求的Servlet类,如 DoLogin, Index, StuList1, VerifyCode。 …...

【Mybatis-plus】在mybatis-plus中 if test标签如何判断 list不为空

博主介绍:✌全网粉丝22W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

MySQL 事务(Transaction)详解

MySQL 事务(Transaction)详解 1. 什么是事务? 事务(Transaction)是一组要么全部执行,要么全部回滚的 SQL 语句,用于保证数据一致性。事务一般用于银行转账、订单支付等操作,确保多个…...

Redis 知识点梳理

第一章 NoSQL数据库发展历史简介 1、 Web的历史发展历程 web1.0时代简介 web 1.0是以编辑为特征,网站提供给用户的内容是网站编辑进行编辑处理后提供的,用户阅读网站提供的内容这个过程是网站到用户的单向行为web1.0时代的代表站点为新浪,…...

github上传操作简单说明

前期准备 0.下载git(如果已经有了就不用了) 1.在GitHub上新建一个存储库 2.先在本地创建一个目录作为本地库目录,在目录里打开git bash进行上传 上传过程 echo "# Garbled_repair" >> README.md 作用:创建一个…...

在 ASP .NET Core 9.0 中使用 Scalar 创建漂亮的 API 文档

示例代码:https://download.csdn.net/download/hefeng_aspnet/90407900 Scalar 是一款可帮助我们为 API 创建精美文档的工具。与感觉有些过时的默认 Swagger 文档不同,Scalar 为 API 文档提供了全新而现代的 UI。其简洁的设计让开发人员可以轻松找到测试…...

针对 pdf.mjs 文件因 MIME 类型错误导致的 Failed to load module script 问题解决方案

Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of “application/octet-stream”. Strict MIME type checking is enforced for module scripts per HTML spec. pdf.mjs 这种问题该如何处理 nginx 针对 pdf.…...

Flink介绍与安装

Apache Flink是一个在有界数据流和无界数据流上进行有状态计算分布式处理引擎和框架。Flink 设计旨在所有常见的集群环境中运行,以任意规模和内存级速度执行计算。 一、主要特点和功能 1. 实时流处理: 低延迟: Flink 能够以亚秒级的延迟处理数据流,非常…...

《双指针算法指南:LeetCode 经典题解(C++实现)》

《双指针算法指南:LeetCode 经典题解(C实现)》 —— 从快慢指针到对撞指针,刷题效率提升 200%! 常⻅的双指针有两种形式,⼀种是对撞指针,⼀种是左右指针。 对撞指针: ⼀般⽤于顺…...

kaggle上经典泰坦尼克项目数据分析探索

之前了解在kaggle上这个项目很火,最近想要加强一下python数据分析,所以在kaggle上找到这个项目进行学习探索,下面是将一些学习资料以及过程整理出来。 一、首先我们了解一下项目背景以及如何找到这个项目。 kaggle项目地址: https://www.k…...

【深度学习】多目标融合算法(五):定制门控网络CGC(Customized Gate Control)

目录 一、引言 二、CGC(Customized Gate Control,定制门控网络) 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 2.3.1 业务场景与建模 2.3.2 模型代码实现 2.3.3 模型训练与推理测试 2.3.4 打印模型结构 三、总结 一、引言 上一…...

Ubuntu上查看GPU使用情况并释放内存

先用nvidia-smi查看GPU当前使用情况 再用fuser 命令查找对应显卡上占用 GPU 的进程 最后查到了用kill -9强制杀掉进程(PID)即可...

大数据学习栈记——HBase安装

本文介绍大数据技术中流行的非关系型数据库HBase的安装,操作系统:Ubuntu24.04 安装Zookeeper 安装HBase前需要先安装Zookeeper,HBase使用Zookeeper作为其分布式协同服务,存储了HBase集群的元数据信息,并提供了分布式…...

[入门]NUC13配置Ubuntu20.04详细步骤

文章目录 1. 安装Ubuntu20.041.1 制作系统启动盘1.1.1 下载镜像文件1.1.2 配置启动盘 1.2 安装内存条、硬盘1.3 安装系统 2. 网卡驱动配置2.1 关闭安全启动2.2 安装intel官方网卡驱动backport2.2.1 第四步可能会出现问题 2.3 ubuntu官方的驱动2.4 重启 3. 软件安装3.1 录屏软件…...

【实战指南】用MongoDB存储文档和图片等大文件(Java实现)

一、前言 在现代应用开发中,经常需要处理和存储大量的文档、图片等大文件。传统的关系型数据库在处理这类大文件时,往往会面临性能瓶颈、存储成本高等问题。而 MongoDB 作为一款流行的 NoSQL 数据库,提供了 GridFS 规范,能够很好地解决大文件存储的问题。GridFS 可以将大文…...

使用Gitee Go流水线部署个人项目到服务器指南

使用Gitee Go流水线部署个人项目到服务器指南 前言!!! 本文解决的问题: 你有一台ECS服务器,你在上面部署了一个Java服务也就是一个jar,你觉着你每次手动本地打包,上传,在通过命令去…...

使用Three.js渲染器创建炫酷3D场景

引言 在当今数字化的时代,3D图形技术正以其独特的魅力在各个领域掀起波澜。从影视制作到游戏开发,从虚拟现实到网页交互,3D场景以其强烈的视觉冲击力和沉浸式的体验,成为了吸引用户、传达信息的重要手段。而Three.js,…...

Spring Boot 集成 Elasticsearch怎样在不启动es的情况下正常启动服务

解释 在spingboot 集成es客户端后,每当服务启动时,服务默认都会查看es中是否已经创建了对应的索引,如果没有索引则创建。基于上面的规则我们可以通过配置不自动创建索引来达到在没有es服务的情况下正常启动服务。 解决办法 在entity类的Docu…...

明远智睿SD2351核心板:多接口融合,破解边缘计算难题

在边缘计算领域,明讯智睿SD2351核心板凭借丰富的接口资源与异构计算架构,成为工业网关与智能终端的理想选择。硬件配置升级 :处理器:四核Cortex-A35,256KB L2缓存,动态调频降低功耗;存储性能:emMC 5.0 HS400模式读写速度提升40%&a…...

xampp安装教程与配置

一、安装 XAMPP (一)下载 访问官网:打开浏览器,访问 XAMPP 官方网站(https://www.apachefriends.org/zh_cn/index.html)。 选择版本:根据你的操作系统(Windows、macOS 或 Linux&am…...

设计模式之单例模式(Singleton Pattern)

单例模式(Singleton Pattern)是一种常用的设计模式,确保一个类只有一个实例,并提供一个全局访问点。单例模式在许多场景中非常有用,例如配置管理、日志记录、线程池等。 ### **1. 单例模式的特点** 1. **唯一实例**&a…...

Androidstudio实现引导页文字动画

文章目录 1. 功能需求2. 代码实现过程1. 编写布局文件2. 实现引导页GuideActivity 3. 总结4. 效果演示5. 关于作者其它项目视频教程介绍 1. 功能需求 1、引导页具有两行文字(“疫情在前”和“共克时艰”),和向上的 图标。 2、进入【引导页】…...

【linux】线程概念与控制

引言 当现代CPU的晶体管密度逼近物理极限,多核架构已成为突破性能瓶颈的必由之路。在这个计算密集型任务与异步IO需求并行的时代,多线程编程不再是可选项,而是开发者必须掌握的核心技能。Linux作为承载着全球90%云计算负载的操作系统&#xf…...

Cesium 自定义路径导航材质

cesium 自定义路径导航纹理图片随便更换,UI 提供设计图片即可达到效果; 打开小马的weix 关注下 搜索“技术链” 回复关键词《《路径》》获取原始代码; 拿到就能用轻松解决!帮忙点个关注吧!...

用 pytorch 从零开始创建大语言模型(五):预训练无标注数据

用 pytorch 从零开始创建大语言模型(五):预训练无标注数据 5 预训练无标注数据5.1 评估文本生成模型5.1.1 使用 GPT 生成文本5.1.2 计算文本生成损失5.1.3 计算训练集和验证集的损失 5.2 训练 LLM5.3 解码策略以控制随机性5.3.1 温度缩放&am…...

[AI速读]混合验证方案:如何高效解决RISC-V向量扩展的验证难题

RISC-V作为一种开源指令集架构,近年来在AI和高性能计算领域备受关注。其向量扩展(RVV)为处理并行数据提供了强大的支持,但复杂的异常处理和冒险检测机制也带来了验证上的巨大挑战。本文将结合一篇技术论文,解析一种混合验证方案,帮助开发者更高效地解决RVV的验证问题。 一…...

模型空间、图纸空间、布局(Layout)之间联系——CAD c#二次开发

在 AutoCAD 的二次开发中,**模型空间(Model Space)**、**图纸空间(Paper Space)** 和 **布局(Layout)** 是三个核心概念,它们的关系及开发中的操作逻辑如下: --- 1. 模…...

Linux 日常开发常用命令(解释-全)

帮助类 #查看cd命令的帮助信息 [rootcentos100 ~] help cd # 查看网卡配置信息 [rootcentos100 ~] ifconfig # 检测到目标主机是否连接正常 [rootcentos100 ~] ping IP地址[rootcentos100 ~] ssh [-p port] userremote #远程登录user 是在远程机器上的用户名,如果…...

数据库监控:确保业务连续性和用户体验

在数字化时代,数据库作为企业的数据心脏,其重要性不言而喻。无论是交易系统、客户关系管理系统,还是数据分析平台,都离不开数据库的支撑。然而,数据库的运行状态和性能直接影响着企业的业务连续性和用户体验。因此&…...

Java面试黄金宝典9

1. Redis 持久化机制 Redis 提供了两种主要的持久化机制:RDB(Redis Database)和 AOF(Append Only File),下面对这两种机制进行详细介绍。 RDB(Redis Database) 原理:RDB …...

【C#】WinForm自定义控件及窗体

前言 WinForm(Windows Forms)是Microsoft.NET框架中的技术,用于开发Windows桌面应用程序。它提供了一套丰富的控件和组件。通过拖放控件、编写事件处理程序等方式快速构建用户界面。 通过属性窗口定制这些控件的外观和行为。 通过数据绑定&am…...

VideoHelper 油猴脚本,重塑你的视频观看体验

VideoHelper 油猴脚本,重塑你的视频观看体验 在日常上网看视频时,你是否也被这些问题困扰:视频网站开头的广告又臭又长,找个合适的播放倍速要在一堆选项里翻半天,每次手动调音量、点全屏按钮繁琐又影响沉浸感&#xf…...

从收藏夹到知识图谱:书签管理器如何重塑你的信息获取方式?

在信息爆炸的今天,浏览器收藏夹早已沦为 “数字垃圾堆”—— 杂乱无章的网址、重复的标签、过期的链接,不仅降低效率,更成为信息焦虑的源头。智能书签管理器通过AI分类、跨平台同步、隐私保护等黑科技,重塑您的数字生活方式。书签…...

SOFABoot-07-版本查看

前言 大家好,我是老马。 sofastack 其实出来很久了,第一次应该是在 2022 年左右开始关注,但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFABoot-00-sofaboot 概览 SOFABoot-01-蚂蚁金服开源的 s…...

[极客大挑战 2019]Http_3.19BUUCTF练习day3(1)

BUUCTF练习day3(1)_[极客大挑战 2019]Http 打开靶场,查看源码(如果在做题时没有什么发现就查看源码) 打开Secret.php提示没有来自https://Sycsecret.buuoj.cn 添加Referer头为https://Sycsecret.buuoj.cn(提示说我们没有来自那个网址,那我们…...

golang Error的一些坑

golang Error的一些坑 golang error的设计可能是被人吐槽最多的golang设计了。 最经典的err!nil只影响代码风格设计,而有一些坑会导致我们的程序发生一些与我们预期不符的问题,开发过程中需要注意。 ​​ errors.Is​判断error是否Wrap不符合预期 ​…...

弱网测试:全链路实战、高阶策略与自动化落地

在移动互联网时代,网络环境的不确定性成为用户体验的“隐形杀手”。弱网测试不仅是质量保障的必备环节,更是提升用户留存率和业务转化率的战略手段。 本文将从 工具链深度配置、复杂场景模拟、性能优化底层逻辑 和 自动化流水线集成 四个维度,彻底解析弱网测试的完整方法论…...

Ubuntu检查并启用 Nginx 的stream模块或重新安装支持stream模块的Nginx

stream 模块允许 Nginx 处理 TCP 和 UDP 流量,常用于负载均衡和端口转发等场景。本文将详细介绍如何检查 Nginx 是否支持 stream 模块,以及在需要时如何启用该模块。 1. 检查 Nginx 是否支持 stream 模块 首先,需要确认当前安装的 Nginx 是…...

mac brew 安装的php@7.4 打开redis扩展

1. 找到php7.4的pecl目录 一般在这个位置 cd /usr/local/Cellar/php7.4/7.4.33_8/pecl/20190902 ls 一下 有个 redis.so 于是 直接去php.ini编辑了 php.ini的路径 vim /usr/local/etc/php/7.4/php.ini 把938行添加进去 然后重启一下 php7.4 brew services restart ph…...

Redis 内存管理

Redis 内存管理 1. Redis 给缓存数据设置过期时间的作用 给缓存数据设置过期时间(TTL, Time-To-Live)有以下几个重要作用: (1) 自动释放内存 避免缓存数据无限增长,导致 Redis 内存溢出。例如,在 会话管理、短连接…...

学习CSS滤镜属性 `filter: invert()`

一、核心机制 数学原理 invert(1) 对每个像素的RGB通道执行 颜色反相计算: 新通道值 255 - 原通道值 例如 rgb(255,0,0)(纯红)会转换为 rgb(0,255,255)(青色)。 透明度处理 该滤镜会保留元素的Alpha通道(…...

网络空间安全专业发展历程及开设院校

一、专业发展历程 1. 早期探索阶段(1990年代末—2000年代初) (1)背景: 1990年代互联网进入中国,计算机病毒、黑客攻击等问题逐渐显现,社会对信息安全人才的需求开始萌芽。 (2&…...

Linux中mutex机制

在Linux中,mutex是一种用于多线程编程的同步机制,用于保护共享资源,防止多个线程同时访问或修改这些资源,从而避免竞态条件的发生。mutex 是“mutual exclusion”的缩写,意为“互斥”。 1. Mutex 的基本概念 互斥锁&…...

Web网页

1.结构与表现分离 HTML用于结构 css用于表现,增加了丰富的样式效果,极大满足了开发者的需求 选择器;用于指定css样式作用的html对象{}选择某个属性 p标签 color;本颜色 font-size:子属性 字大小 font-family;字体 font-…...

Redis 在windows下的下载安装与配置

参考链接:https://developer.aliyun.com/article/1395346 下载 Redis 访问 Redis 下载地址:https://github.com/tporadowski/redis/releases 下载 Redis 时,你可以选择 ZIP 包或 MSI 安装: ZIP包:需要手动解压、初始化、配置和…...

基于随机森林回归预测葡萄酒质量

基于随机森林回归预测葡萄酒质量 1.作者介绍2.随机森林算法与数据集介绍2.1定义2.2核心思想2.3主要步骤2.4数据集介绍 3.算法实现3.1数据加载与探索3.2数据可视化3.3数据预处理(标准化、划分训练/测试集)3.4模型训练与优化(随机森林回归 超参…...

在大数据开发中ETL是指什么?

hello宝子们...我们是艾斯视觉擅长ui设计和前端数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字经济时代,数据已成为企业最核心的资产。然而,分散在业务系统、日志文件…...

Centos操作系统安装及优化

Centos操作系统安装及优化 零、环境概述 主机名 centos版本 cpu 内存 Vmware版本 ip地址 test CentOS Linux release 7.6.1810 (Core) 2C 2G 15.5.1 10.0.0.10 一、介质下载 1、7.6版本下载 CentOS7.6标准版下载链接: https://archive.kernel.org/centos-vault/7.6.1810/i…...

2025年03月10日人慧前端面试(外包滴滴)

目录 普通函数和箭头函数的区别loader 和 plugin 的区别webpack 怎么实现分包,为什么要分包webpack 的构建流程变量提升react 开发中遇到过什么问题什么是闭包vue 开发中遇到过什么问题vue中的 dep 和 watcher 的依赖收集是什么阶段什么是原型链react setState 是同…...