当前位置:首页 > 数码 > MySQL-隔离级别解析-数据一致性与高并发之间的平衡术! (mysql-bin文件可以删除吗)

MySQL-隔离级别解析-数据一致性与高并发之间的平衡术! (mysql-bin文件可以删除吗)

admin4个月前 (05-11)数码7
数据库事务和隔离机制 HTML 格式文章 数据库事务 事务是数据库操作中的一组逻辑处理单元,具有以下 ACID 属性: - 原子性:事务中的所有操作要么全部执行成功,要么全部失败回滚。 - 一致性:事务执行前後,数据库始终处于一致状态,遵循所有数据规则。 - 隔离性:事务独立执行,不受其他并发的操作影响,中间状态对外部不可见。 - 持久性:事务提交后,对数据的修改是永久性的,即使系统故障也不受影响。 并发事务带来的问题 多个事务并发操作同一批数据时,可能会导致以下问题: - 脏写:多个事务选择同一行并更新,最后一个更新覆盖了其他更新。 - 脏读:一个事务读取另一个未提交的事务所修改的数据。 - 不可重复读:同一个事务中,两次相同查询返回不同结果,因为其他事务修改了数据。 - 幻读:同一个事务中,两次相同查询返回不同记录数,因为其他事务插入或删除了记录。 事务隔离机制 为了解决并发事务带来的问题,数据库设计了事务隔离机制,包括: - 隔离级别:定义事务中修改的可见性。 - 锁机制:防止其他事务修改已加锁的资源。 - MVCC(多版本并发控制):为每个事务提供特定数据版本,保证隔离性。 事务隔离级别 MySQL 中的事务隔离级别由 InnoDB 引擎实现,分为四个级别,从低到高: - READ UNCOMMITTED:允许脏读,提供最高并发性。 - READ COMMITTED:禁止脏读,但允许不可重复读和幻读。 - REPEATABLE READ:禁止不可重复读,但允许幻读。 - SERIALIZABLE:最严格的隔离级别,禁止所有并发问题,但性能最差。 查看和设置隔离级别 查看当前隔离级别: sql SHOW VARIABLES LIKE 'tx_isolation'; 设置隔离级别: sql SET tx_isolation = ISOLATION_LEVEL; 其中 ISOLATION_LEVEL 可以是以下值: - READ UNCOMMITTED - READ COMMITTED - REPEATABLE READ - SERIALIZABLE 查询长事务 sql SELECT FROM information_schema.innodb_trx WHERE TIME_TO_SEC(TIMEDIFF(NOW(), start)) > 60;

关于MySQL中的表锁和行锁

MySQL

mysql行锁和表锁

锁是计算机协调多个进程或纯线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所在有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。

概述

相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。

MySQL大致可归纳为以下3种锁:

MySQL 是如何实现四大隔离级别的

SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。

Read Uncommitted(读取未提交内容)

在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。

Read Committed(读取提交内容)

这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。

Repeatable Read(可重读)

这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。

Serializable(可串行化)

这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。

这四种隔离级别采取不同的锁类型来实现,若读取的是同一个数据的话,就容易发生问题。例如:

脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。

不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。

幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。在MySQL中,实现了这四种隔离级别,分别有可能产生问题如下所示:

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: MySQL

“MySQL-隔离级别解析-数据一致性与高并发之间的平衡术! (mysql-bin文件可以删除吗)” 的相关文章

MySQL-一探究竟-核心模块揭秘 (mysql-bin文件可以删除吗)

MySQL-一探究竟-核心模块揭秘 (mysql-bin文件可以删除吗)

Undo Segment Caching To improve the efficiency of undo segmentallocation, InnoDB caches some un...

实战-MySQL-数据库压力测试与性能评估方法-Java (实战篮球鞋排名)

实战-MySQL-数据库压力测试与性能评估方法-Java (实战篮球鞋排名)

压力测试的目的和重要性 压力测试是模拟真实环境中并发用户访问数据库的场景,通过增加负载来测试数据库系统的性能表现。压力测试的目的是发现数据库在高负载下的性能瓶颈、资源利用情况和响应时间等指...

如何在MySQL中成功数据的版本治理和回滚操作 (如何在mysql数据库中添加数据)

如何在MySQL中成功数据的版本治理和回滚操作 (如何在mysql数据库中添加数据)

成功数据的版本治理和回滚操作在中可以经过以下几种模式成功,包含经常使用事务、备份恢复、日志和版本控制工具等。上方将详细引见这些方法。 1.经常使用事务: MySQL允许事务操作,可以经...

使用-数据库并自动发送备份文件到指定邮箱-K8s-定期备份-MySQL (使用数据库的命令)

使用-数据库并自动发送备份文件到指定邮箱-K8s-定期备份-MySQL (使用数据库的命令)

简介 本文档描述了一个使用脚本来监控服务器高占用率进程并通过电子邮件发送警报的项目。本文还探讨了使用相同机制备份数据库的可能性。 技术 Python psuti...

обеспечение-и-данных-MySQL锁机制-предотвращение-конфликтов-согласованности (翻译)

обеспечение-и-данных-MySQL锁机制-предотвращение-конфликтов-согласованности (翻译)

锁机制是一种通过对数据进行加锁来防止数据冲突和不一致的技术。MySQL 采用了两种类型的锁:共享锁和排他锁,以实现并发访问数据的同时保证数据的一致性。 共享锁 (SharedLock)...

EXPLAIN-代价模型-MySQL-浅析-提早预知索引优化战略-优化查问性能-告别自觉经常使用 (explain)

EXPLAIN-代价模型-MySQL-浅析-提早预知索引优化战略-优化查问性能-告别自觉经常使用 (explain)

背景 在中,当咱们为表创立了一个或多个索引后,通常须要在索引定义成功后,依据详细的数据状况口头EXPLN命令,才干观察到数据库实践经常使用哪个索引、能否经常使用索引。这使得咱们在参与新索引之...

MySQL-实现非中断亿级数据处理的秘密 (mysql-bin文件可以删除吗)

MySQL-实现非中断亿级数据处理的秘密 (mysql-bin文件可以删除吗)

MySQL 在海量数据管理方面表现得非常出色,能够存储上亿级别的数据,同时还具有极高的数据可靠性,几乎不会发生数据丢失的情况。这一强大的特性离不开 MySQL 的两大日志系统:binlog 和 r...

运行系统 (列车自动运行系统)

运行系统 (列车自动运行系统)

作者:徐良,现任中国移动智慧家庭经营中心数据库初级经理,多年数据库运维优化阅历,历任华为、一线互联网公司初级DBA。目前关键担任中移智家基于规模的价值经营场景下数据库稳固性、容灾优化、他乡多活等相...