mysql 锁隔离级别_Mysql 的隔离级别与锁

1.MySQL参数autocommit生产环境设1还是0?为什么?

在生产环境中,为了事务一致性,需要把autocommit 设置为 0

这样可以进行事务全部成功后,在最后一次性提交,如果某一步出错,可以rollback。

在会话进修改参数命令为:

set @@autocommit=0;

为了永久设置为手动提交,可以在 my.cnf 中添加以下参数

[mysqld]

autocommit=0

重启mysqld 即可生效

mysql> select @@autocommit;

+--------------+

| @@autocommit |

+--------------+

|            0 |

+--------------+

1 row in set (0.00 sec)

mysql> show variables like 'autocommit'

-> ;

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| autocommit    | OFF   |

+---------------+-------+

1 row in set (0.01 sec)

mysql>

2.MySQL参数tx_isolation生产环境上大多数是设什么值,为什么?

mysql 系统默认隔离级别为 REPEATABLE-READ

mysql> select @@global.tx_isolation;

+-----------------------+

| @@global.tx_isolation |

+-----------------------+

| REPEATABLE-READ       |

+-----------------------+

1 row in set (0.00 sec)

mysql 支持以下4种隔离级别:

1.末提交读 (read uncommited);

2.已提交读 (read commited);

3.可重复读 (Repeatable read);

4.可序列化 (Serializable);

在生产环境中,可以按照实际环境要求,进行配置,一般情况下:

1.以读为主的业务应用场景下,可以配置成

transaction-isolation=read-commited

2.非读为主的业务应用场景,可以配置为:

transaction-isolation=Repeatable-read

而另外两种情况,一般应用比较少,如果是为了减少并行和追求稳定性,可以选择配置为

transaction-isolation=Serializable

3.与MySQL锁相关的有哪些因素?

在mySQL 数据库中,不同的存储引擎,使用不同的锁机制。

MyISAM,MEMORY 存储引擎,采用的是表级锁(table-level locking),

BDB 存储引擎采用了页面锁(Page-level locking),它也支持表级锁;

InnoDB存储引擎,采用的是行级锁(row-level locking),当然也支持表级锁。

在4种不同的隔离级别下,为了实现事务中的ACID属性,锁的应用也不一样,

INNODB 存储引擎的行锁模式中,是通过给索引加索引锁来实现的,所以出现以下3种锁方式:

1.record lock :对索引项加锁

2.Gap lock :对索引项之间的间隙加锁,

3.Next-key lock:对记录及前后的间隙加锁;

在应用中,如果有个表没有索引,虽然只访问了部分范围的数据,可能也会引起其它会话插入,修改的阻塞现象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值