利用InnoDB实施序列化隔离级别的方法

利用InnoDB实施序列化隔离级别的方法
串行化的实现

innodb的序列化的实现的实现方式主要有两种。

首先,当SELECT语句显式事务中的块,如1号的11-9表的实现,将应用于表11-6按(lock_s锁,锁记录事务锁兼容性表显示,lock_s)锁互斥写锁,所以序列化隔离级别只允许并发读写操作的并发访问是禁止的,因此,实现序列化。

相应的代码如下所示:
ha_innobase::external_lock(…)

{…

如果(lock_type!= f_unlck){

MySQL正在设置一个新表



如果(TRX -> isolation_level = = trx_iso_serializable / / SERIALIZABLE隔离级别

m_prebuilt -> select_lock_type = = lock_none

thd_test_options(THD,option_not_autocommit)和option_begin |){ / /显式事务中的块
获取序列化我们/执行让InnoDB概念add'lock股票mode'to所有选择

否则将是一致的读取。例外是一致的读取。

我们知道它们是只读事务,如果一致读取,它们也可以序列化。

m_prebuilt -> select_lock_type = lock_s; / /读锁,以共享方式namely'lock

m_prebuilt -> stored_select_lock_type = lock_s;

}否则,不要锁定(这很重要)



{人}

TrxInInnoDB::end_stmt(TRX);

debug_sync_c(ha_innobase_end_statement );

}

}…
其次,当SELECT语句不是显式事务中的数据块,通过获取最新的快照读取(在事务开始)。在这一点上,因为基于快照的一致性不需要锁定,锁定的情况下对应的表11-9数为2的情况。

表11-9序列化隔离级别的锁
解释uff1a

S0:SELECT * FROM蓝海C1 = 2; / /使用主键索引条件

另外,为了冲水…读锁语句序列化隔离级别也需要加锁lock_s

代码如下:
ha_innobase::store_lock(



检查带有* * *锁定的刷新表…

如果(TRX -> isolation_level = = trx_iso_serializable){

m_prebuilt -> select_lock_type = lock_s;

m_prebuilt -> stored_select_lock_type = lock_s;

{人}

m_prebuilt -> select_lock_type = lock_none;

m_prebuilt -> stored_select_lock_type = lock_none;

}



}
序列化是相关的innobase_query_caching_of_table_permitted()函数,和序列化隔离级别不允许缓冲区查询。

总结

以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一定的帮助。如果有任何疑问,您可以留言交流,谢谢您的支持。

tag:序列化方法隔离级电脑软件InnoDB

相关内容