时间:2021-07-01 10:21:17 帮助过:2人阅读
【什么是事务】
事务是逻辑上的一组操作,要么全部执行,要么全部放弃。最典型的例子就是银行转账,此消彼长是原则,全部的操作必须是一个事务,中间环节若失败,则回滚至最初状态。
【事务的特性】
事务的特性即:ACID
【事务在并发下的问题】
并发场景下,多个事务操作同样的数据。可能带来以下问题:
【解决事务并发问题:事务隔离】
为了解决以上并发导致的问题,SQL标准定义了四种隔离级别(从低到高):
隔离级别 | 防止脏读 | 防止不可重复读 | 防止幻读 |
---|---|---|---|
READ-UNCOMMITTED | × | × | × |
READ-COMMITTED | √ | × | × |
REPEATABLE-READ | √ | √ | × |
SERIALIZABLE | √ | √ | √ |
可以在SQL中使用以下命令来查看隔离级别:
SELECT @@transaction_isolation
【SQL执行慢的原因】
一、偶尔很慢:
1、数据库正在刷新脏页,占用资源。
数据库更新时,首先是刷新内存,而不是即刻持久化(IO操作比较耗时);然后把更新的操作写入到redo log中,待数据库空闲时再刷新到磁盘。因为redo log模块容量有限,当它被写满后,数据库就不得不停止其他操作,优先完成数据到磁盘的持久化。这个过程就是刷新脏页。此时客户端提交的SQL操作因为资源问题,执行速度会变慢。
2、数据库在做并发操作,无法获取到锁。
多个客户端请求在操作同一张表或同一行数据时,因为数据库的锁机制,后来的操作必须等到前序操作完成释放锁之后,才能进行。因此速度可能也会变慢。使用show processlist命令可以判断当前操作是否在等待锁。
二、一直很慢:
SQL一直很慢多数情况下,就必须考虑SQL的用法是否存在问题了。
1、未使用索引。没有建立索引,或者因为字段运算、函数操作未能使用索引。
2、数据库的优化器选错了索引。
参考文献:(文章仅做交流学习,侵权即删!!)
1、https://github.com/Snailclimb/JavaGuide
2、https://www.cnblogs.com/myseries/p/10719074.html
数据库基础
标签:style 并发 text 优化 inno hub logs atom 写入