google了大部分資料,結合自己的理解,總結下lock0lock.c文件裏函數
死鎖相關函數
lock_deadlock_recursive():死鎖判斷 死鎖日誌產生
lock_deadlock_trx_print():死鎖中事務信息處理打印
lock_deadlock_lock_print():每個事務持有、等待的鎖信息
lock_rec_print():記錄被鎖的信息
lock_sys_create(): db啓動時創建鎖系統
一致性讀檢查記錄
lock_clust_rec_cons_read_sees(): 在一致性讀情況下,查找某記錄是否能被看到。能被查找到返回true;如果更早期版本被檢索,返回false 。 主要參數
lock_sec_rec_cons_read_sees():在一致性讀情況下,非聚簇索引記錄是否能被查到
鎖相關的幾個重要函數:
lock_table (): 負責加表鎖
lock_rec_lock():鎖記錄的重要函數
row0mysql.cc::row_lock_table_autoinc_for_mysql(): 負責管理表auto increment自增鎖的重要函數。自增鎖 是表基本鎖。
(ps: auto_increment 自增鎖 因爲是表鎖,鎖粒度高,在高併發情況下,會大大影響insert性能)
死鎖回滾的事務:姜承堯《mysql核心內幕 innodb引擎》中說redo產生量少的事務被選中回滾;有的說根據事務的權重,權重小的事務被選中回滾,這個需要再仔細看看源碼
row0sel.c::row_search_for_mysql():重要函數,預防死鎖處理邏輯,比較複雜。
後續繼續補充