高并发场景下的MySQL几类死锁事故案例分析
12其乐融融 发布于 2023/07/19 03:20:12
通俗一些来说,A线程持有B锁,然后想要访问A锁,此时B线程持有A锁,想要访问B锁,这种情况下就容易出现死锁。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/07/19 03:20:12
通俗一些来说,A线程持有B锁,然后想要访问A锁,此时B线程持有A锁,想要访问B锁,这种情况下就容易出现死锁。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/07/15 03:20:14
他们改造了MySQL数据库,让同一个热点行的更新语句,在执行层进行排队。这样的排队相比update的排队,要轻量级很多,因为他不需要自旋,不需要抢锁。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/07/14 03:20:15
Docker 容器启动时,WebAPI 程序启动的速度比 MySQL 快,导致程序去连接 MySQL 时,MySQL 服务器还没有启动完成,自然是连不上。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/07/11 03:20:16
从 8.0.17(含)版本开始,直到目前的最新版本(8.0.33),如果表中有二级索引,explain 输出的执行计划也表示会使用二级索引,然而,实际执行过程中,InnoDB 却会强制进行全表扫描,以使用主键索引的并行扫描能力。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/07/06 03:20:07
在一次开发中在sp中使用MySQL PREPARE以后,使用match AGAINST语句作为prepare stmt的参数后,发现执行第二遍call会导致数据库crash,于是开始动手调查问题发生的原因。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/07/04 03:20:10
本文基于 MySQL 8.0.32 源码,存储引擎为 InnoDB,事务隔离级别为可重复读。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/07/04 03:20:07
mysql版本大于5.6的话,增加的安全提醒机制,则会出现警告:Warning: Using a password on the command line interface can be insecure. 使用 mysqldump 命令备份 MySQL 数据库时,我们使用了 -p 参数带上了密码,这样虽然可以快速备份,但是密码会在命令行中明文可见,容易被窃取。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/07/03 03:20:14
本文我们介绍了使用 XORM 操作 MySQL 时,新手读者朋友们可能会遇到的陷阱,希望可以给大家带来一些帮助。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/06/30 03:20:07
数据库触发器是一种解决MySQL和Redis数据一致性的方案。通过在数据库中设置触发器,可以实现在数据发生变动时自动触发相应的操作,从而保持数据库和缓存之间的数据一致性。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/06/28 03:20:16
将解析binlog和执行SQL语句的两个过程分别由两个线程来执行。其中,解析binlog的线程每次解析完一个事件后通过队列将SQL语句传给SQL执行线程,SQL执行线程从队列中取出SQL语句并按顺序依次执行,这样就保证了SQL语句的串行执行。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/06/27 03:20:11
最近我在配置一个监控面板,其中的数据由 Prometheus 和 MySQL 组成;简单来说就是一个指标的查询条件是从数据库中来的。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/06/26 03:20:06
保证所有的操作都作为 一个工作单元来执行,即使出现了异常,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事务都被提交( commit ),这些修改永久地保存下来;要么放弃所有的修改 ,整个事务回滚( rollback )到最初状态。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/06/24 03:20:31
日前,Stack Overflow面向90000名开发人员进行的一项调查显示,PostgreSQL在数据库引擎的选择上领先于MySQL,这与往年的调查相比有了显著变化。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/06/24 03:20:28
让我们从客户端(Client)开始。当你在应用程序中执行一个插入操作时,客户端就会发送一个SQL语句给MySQL服务器,告诉它你想要插入什么样的数据。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/06/24 03:20:26
要想在项目中操作数据库, 首先要安装操作 MySQL 数据库的第三方模块(mysql), 借助mysql 模块连接到 MySQL 数据库, 执行 SQL 语句,具体的流程如下图所示。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/06/24 03:20:22
在 DDL 执行前或执行时,其他事务可以获取 MDL。由于需要用到 exclusive MDL,所以必须要等到其他占有 metadata lock 的事务提交或回滚后才能执行上面两个涉及到 MDL 的地方。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/06/24 03:20:17
MySQL 8.0.29 引入了 instant add/drop column 功能,支持在任意位置添加 column, drop column 也不需要表数据的任何形式的移动, 只需要修改表的元数据就可以完成 add/drop column,所以 instant add/drop column 的操作是轻型操作,速度快,资源需求量少。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/06/24 03:20:14
触发器,就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段,但是触发器无需调用,当对数据库表中的数据执行DML操作时自动触发这个SQL片段的执行,无需手动调用。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/06/24 03:20:12
我们先来了解一下什么是分库分表。分库分表是指将原本存储在单一数据库中的数据,拆分到多个数据库或者多个数据表中。这样做的目的是为了提高数据库的扩展性和性能,解决单一数据库在数据量和并发访问上的瓶颈。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/06/24 03:20:09
如果 MySQL 服务器在崩溃恢复时发现二进制日志比应有的短,则它至少缺少一个成功提交的 InnoDB 事务。如果 sync_binlog=1 并且磁盘/文件系统在请求时进行实际同步(有些则没有),则不会发生这种情况,所以服务器打印一条错误消息日志。在这种情况下,此二进制日志不正确,应从源数据的新快照重新启动复制。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/06/24 03:20:06
数据按需取用。有时候我们会忽略多拿数据对查询性能的影响,然而优化是一个锱铢必较的事情,需要多少数据就查询多少,要尽量避免数据库查询 100 条,结果前端只展示 10 条这种情况。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/06/24 03:20:03
Innodb是MySQL的执行引擎,MySQL是一种关系型数据库,而Redis是一种非关系型数据库。这两者之间比较大的区别是:关系型数据库以表的形式进行存储数据,而非关系型数据库以Key-value的形式存储数据。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/06/23 03:20:42
索引可以帮助我们快速搜索数据,innodb 存储引擎用的是 b+树索引,叶子节点存放的是索引+数据,非叶子节点只存放索引。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/06/23 03:20:37
我在 MySQL 8.0.32 复现了问题,并调试了加锁流程,写下来和大家分享。了解完整的加锁流程,有助于我们更深入的理解 InnoDB 的记录锁,希望大家有收获。
阅读()评论(0)赞 ()
其乐融融 发布于 2023/06/23 03:20:35
幻读是MySQL数据库中常见的一个问题,但是通过使用适当的方法,我们可以解决这个问题。在本文中,我介绍了两种常用的解决方法:间隙锁和一致性非锁定读。
阅读()评论(0)赞 ()