Mysql Lock wait timeout 锁等待坑
发表于|更新于|数据库
问题复盘 :
客户端服务A -> 中转服务B -> 终端服务C. |
- 服务A 请求 服务B (超时 6秒) 没有拿到回包数据 , 连续请求8次 耗时48秒
- 服务B 请求 服务C (无超时) nginx 日志查出 有8条请求超时 分别为 50秒 43秒 37秒 …
- 服务C 存在Mysql 锁等待, 原因在于 http服务 和 cli脚本服务 同时操作同一条数据 锁等待默认50秒超时.
一. 发生问题 锁等待时间太久 导致重复请求
解 : 锁等待问题 缩短调整锁等待超时时间30秒, 调大超时请求时间至15秒
二. 锁等待超时后 拿数据方法返回null 导致脏读问题
解 : 判断返回值null 抛出异常防止脏读问题
文章作者: Leon
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Leon!
相关推荐
2019-03-12
MySQL 查询数据导出为 INSERT 格式文件
在 MySQL 中,您可以将查询结果导出为 INSERT 语句格式的文件。这可以通过多种方法实现,以下是几种常见的方法。 1. 使用 mysqldumpmysqldump 工具可以导出整个数据库或表,并生成 INSERT 语句。 导出整个数据库mysqldump -u username -p --no-create-info --skip-triggers database_name > output.sql 导出特定表mysqldump -u username -p --no-create-info --skip-triggers database_name table_name > output.sql 选项说明 -u username:指定数据库用户名。 -p:提示输入密码。 --no-create-info:不生成 CREATE TABLE 语句。 --skip-triggers:不导出触发器。 2. 使用 SQL 查询和 INTO OUTFILE如果您想导出特定查询的结果,可以使用 SELECT ... INTO OUTFILE 语句。 示例SEL...
2019-09-21
MySQL 字符串截取
在 MySQL 中,字符串截取可以通过多种函数来实现。以下是一些常见的字符串截取方法及其用法。 1. 使用 SUBSTRING() 函数SUBSTRING() 函数用于从指定位置开始截取字符串。 1.1 语法SUBSTRING(str, start, length) str: 要截取的字符串。 start: 开始位置(从 1 开始)。 length: 要截取的长度(可选)。 1.2 示例SELECT SUBSTRING('Hello, World!', 1, 5); -- 输出 'Hello'SELECT SUBSTRING('Hello, World!', 8); -- 输出 'World!' 2. 使用 LEFT() 函数LEFT() 函数用于从字符串的左侧开始截取指定长度的字符串。 2.1 语法LEFT(str, length) 2.2 示例SELECT LEFT('Hello, World!', 5); -- 输出 'Hello'...
2018-09-01
MySQL 事务锁等待超时时间
在使用 MySQL 数据库进行事务处理时,锁的管理是至关重要的。锁可以确保数据的一致性和完整性,但在高并发环境下,锁等待可能会导致性能下降甚至死锁。因此,了解 MySQL 事务的锁等待超时时间及其配置方法,能够帮助开发者更好地管理数据库操作。 什么是锁等待?锁等待是指某个事务请求一个锁,但该锁被其他事务持有,导致当前事务进入等待状态。MySQL 提供了机制来处理这种情况,以避免长时间的等待和潜在的死锁。 锁等待超时时间MySQL 中的锁等待超时时间是指一个事务在尝试获取锁时,如果等待时间超过设定的阈值,则会自动放弃请求并返回错误。这个超时时间可以通过系统变量 innodb_lock_wait_timeout 来配置。 默认值 MySQL 的默认超时时间为 50 秒。即,如果一个事务在等待锁时超过 50 秒,MySQL 会返回一个错误。 配置超时时间你可以通过以下 SQL 语句来查看当前的锁等待超时时间: SHOW VARIABLES LIKE 'innodb_lock_wait_timeout'; 要修改该超时时间,可以使用如下语句: SET GLOB...
2025-01-18
Database Error: Conversion from collation utf8mb3_general_ci into utf8mb4_general_ci impossible ....
今天 程序遇到下述 : Database Error: Conversion from collation utf8mb3_general_ci into utf8mb4_general_ci impossible for parameter3988 场景时 我的接口程序需要插入 emoji 😅😅😉😉😉, 但插入时代码抛错. 我这边也是 DBA 将 Mysql5.7 才升级到 mysql8 之前就遇到很多默认编码不同的问题. DBA 批量将我们的表字段编码都改为 utf8mb4 字符集排序 utf8mb4_general_ci CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci PHP 程序连接 mysql 的 chatset = ‘utf8’; 因为之前有遇到个类似问题. 之前排故 都是各种找 表 / 库 / 字段 的编码字符集是否正常.最后找到的原因是 连接时字符集出了问题. 升级了mysql8, PHP mysql 客户端 utf8 对应的字符集 在mysql服务端那边变成了 ut...
2022-12-13
关于MySql中explain结果filtered的理解
MySql explain语句的返回结果中,filtered字段要怎么理解? MySql5.7官方文档中描述如下: The filtered column indicates an estimated percentage of table rows filtered by the table condition. The maximumvalue is 100, which means no filtering of rows occurred. Values decreasing from 100 indicate increasing amounts of filtering. rows shows the estimated number of rows examined and rows × filtered shows the number of rows joined with the following table. For example, if rows is 1000 and filtered is 50.00 (50%), the number of...
2024-06-20
如何获取 MySQL 中通过指定用户连接的客户端信息
如何获取 MySQL 中通过指定用户连接的客户端信息在 MySQL 数据库管理过程中,我们经常需要了解当前正在连接数据库的客户端信息,比如客户端的 IP 地址、连接的用户等。这些信息可以帮助我们更好地监控和管理数据库的使用情况。本文将介绍如何在 MySQL 中获取这些信息。 查看当前连接的客户端信息首先,我们可以使用以下 SQL 语句查看当前所有正在执行的查询的相关信息: SELECT HOST, USER, DB FROM INFORMATION_SCHEMA.PROCESSLIST; 这个语句会返回以下信息: HOST: 连接的主机名,通常就是客户端的 IP 地址 USER: 连接的用户名 DB: 连接的数据库 查看指定用户的连接信息如果我们只想查看某个指定用户的连接信息,可以在上述语句的条件中加上 WHERE 子句: SELECT HOST, USER, DB FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'your_username'; 将 'your_username' ...
评论
公告
记录技术实践,分享学习与思考。



