溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MYSQL innodb中的只讀事物以及事物id的分配方式

發(fā)布時(shí)間:2020-08-12 18:30:30 來源:ITPUB博客 閱讀:246 作者:gaopengtttt 欄目:MySQL數(shù)據(jù)庫
原創(chuàng)水平有限,如果有誤請(qǐng)指出


一、只讀事物
也許有人要問一個(gè)select算不算一個(gè)事物。其實(shí)在innodb中一個(gè)innodb的select是一個(gè)事物,他有trx_t結(jié)構(gòu)體,并且放到了mysql_trx_list鏈表中,關(guān)于
innodb事物系統(tǒng)一級(jí)的事都做了,但是這種事物叫做只讀事物
bool read_only; /*!< true if transaction is flagged
as a READ-ONLY transaction.
if auto_commit && will_lock == 0
then it will be handled as a
AC-NL-RO-SELECT (Auto Commit Non-Locking
Read Only Select). A read only
transaction will not be assigned an
UNDO log. */
在實(shí)際的使用中他沒有自己的鎖結(jié)構(gòu)也沒有自己的undo segment,這一點(diǎn)很好理解因?yàn)檫@個(gè)操作
始終是非鎖定的,至少在innodb一級(jí)是這樣(lock0lock.cc lock_table 都沒調(diào)用),但是在MYSQL中,我們會(huì)發(fā)現(xiàn)實(shí)際上select語句也會(huì)
獲得MDL LOCK。(再次聲明這里只是說innodb select沒有表級(jí)別鎖存在,但是MYSQL上層會(huì)有MDL LOCK)
對(duì)于只讀事物源碼注釋給出的流程如下:
Auto-commit non-locking read-only:
* NOT_STARTED -> ACTIVE -> NOT_STARTED
而我們一般的2pc TRX流程如下:
XA (2PC):
* NOT_STARTED -> ACTIVE -> PREPARED -> COMMITTED -> NOT_STARTED
可以看到他實(shí)際上就是沒有commit的步驟,沒有undo reodo這些當(dāng)然是不需要的。但是不可否認(rèn)它是一個(gè)事物
另外當(dāng)需要一個(gè)事物的時(shí)候在現(xiàn)在innodb版本中調(diào)用如下:
trx_allocate_for_mysql --> trx_allocate_for_background --> trx_create_low 
這里涉及到一個(gè)innodb 事物池的概念,trx_create_low 從事物池中取出一個(gè)事物TRX_T結(jié)構(gòu)體指針給調(diào)用者
這個(gè)步驟完成后事物處于NOT_STARTED階段,這個(gè)時(shí)候TRX_T結(jié)構(gòu)各種屬性都處于初始化階段,為什么要說一下
事物池的概念因?yàn)楹竺嬲f事物號(hào)分配的時(shí)候會(huì)用到這個(gè)概念。
然后根據(jù)調(diào)用者的需求適時(shí)激活事物。實(shí)際上會(huì)調(diào)用,而調(diào)用會(huì)通過
trx_start_if_not_started_low->trx_start_low完成,在trx_start_low做好事物結(jié)構(gòu)的準(zhǔn)備工作,我們來看一
下關(guān)于源碼中重點(diǎn)的部分


Optimizing InnoDB Read-Only Transactions  我就不在說明什么了。


作者微信:

MYSQL innodb中的只讀事物以及事物id的分配方式


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI