隨筆:MYSQL_BIN_LOG::COND_done 是什麼
一、問題
是什麼
歡迎關注我的《深入理解MySQL主從原理 32講 》,如下:
二、找到影響位置
整個尋找過程應該找到key_BINLOG_COND_done這個取值,然後去看他是在那裡被定義到相應的mutex/cond上,然後查詢mutex/cond的作用即可。
-
定義:
static PSI_cond_info all_server_conds[]=
{
{ &key_PAGE_cond, “PAGE::cond”, 0},
{ &key_COND_active, “TC_LOG_MMAP::COND_active”, 0},
{ &key_COND_pool, “TC_LOG_MMAP::COND_pool”, 0},
{ &key_BINLOG_COND_done, “MYSQL_BIN_LOG::COND_done”, 0},
{ &key_BINLOG_update_cond, “MYSQL_BIN_LOG::update_cond”, 0}, -
註冊:
register_cond_class -
初始化:
MYSQL_BIN_LOG::set_psi_keys
- 建立條件變數:
Stage_manager::init
- 使用:
*/
if (!leader) //如果不是 leader
{
mysql_mutex_lock(&m_lock_done);//加鎖
while (thd->get_transaction()->m_flags.pending) //喚醒時 設定每個事物的狀態 為ture
mysql_cond_wait(&m_cond_done, &m_lock_done);//釋放鎖 等待條件滿足 pending=false
mysql_mutex_unlock(&m_lock_done);//解鎖
}
- 棧幀
Breakpoint 2, MYSQL_BIN_LOG::set_psi_keys (this=0x2e83640, key_LOCK_index=7, key_LOCK_commit=3, key_LOCK_commit_queue=4, key_LOCK_done=5, key_LOCK_flush_queue=6,
key_LOCK_log=8, key_LOCK_binlog_end_pos=9, key_LOCK_sync=10, key_LOCK_sync_queue=11, key_LOCK_xids=12, key_COND_done=4, key_update_cond=5, key_prep_xids_cond=6,
key_file_log=2, key_file_log_index=4, key_file_log_cache=3, key_file_log_index_cache=5) at /mysqldata/percona-server-locks-detail-5.7.22/sql/binlog.h:539
539 m_key_COND_done= key_COND_done;
(gdb) bt
#0 MYSQL_BIN_LOG::set_psi_keys (this=0x2e83640, key_LOCK_index=7, key_LOCK_commit=3, key_LOCK_commit_queue=4, key_LOCK_done=5, key_LOCK_flush_queue=6,
key_LOCK_log=8, key_LOCK_binlog_end_pos=9, key_LOCK_sync=10, key_LOCK_sync_queue=11, key_LOCK_xids=12, key_COND_done=4, key_update_cond=5, key_prep_xids_cond=6,
key_file_log=2, key_file_log_index=4, key_file_log_cache=3, key_file_log_index_cache=5) at /mysqldata/percona-server-locks-detail-5.7.22/sql/binlog.h:539
#1 0x0000000000edcee4 in init_common_variables () at /mysqldata/percona-server-locks-detail-5.7.22/sql/mysqld.cc:2974
#2 0x0000000000ee117f in mysqld_main (argc=82, argv=0x2f26738) at /mysqldata/percona-server-locks-detail-5.7.22/sql/mysqld.cc:4938
#3 0x0000000000ed8504 in main (argc=4, argv=0x7fffffffe3f8) at /mysqldata/percona-server-locks-detail-5.7.22/sql/main.cc:25
建立條件變數
Breakpoint 3, Stage_manager::init (this=0x2e84858, key_LOCK_flush_queue=6, key_LOCK_sync_queue=11, key_LOCK_commit_queue=4, key_LOCK_done=5, key_COND_done=4)
at /mysqldata/percona-server-locks-detail-5.7.22/sql/binlog.h:156
156 mysql_mutex_init(key_LOCK_done, &m_lock_done, MY_MUTEX_INIT_FAST);
(gdb) bt
#0 Stage_manager::init (this=0x2e84858, key_LOCK_flush_queue=6, key_LOCK_sync_queue=11, key_LOCK_commit_queue=4, key_LOCK_done=5, key_COND_done=4)
at /mysqldata/percona-server-locks-detail-5.7.22/sql/binlog.h:156
#1 0x000000000187cbea in MYSQL_BIN_LOG::init_pthread_objects (this=0x2e83640) at /mysqldata/percona-server-locks-detail-5.7.22/sql/binlog.cc:3601
#2 0x0000000000edcef3 in init_common_variables () at /mysqldata/percona-server-locks-detail-5.7.22/sql/mysqld.cc:2983
#3 0x0000000000ee117f in mysqld_main (argc=82, argv=0x2f26738) at /mysqldata/percona-server-locks-detail-5.7.22/sql/mysqld.cc:4938
#4 0x0000000000ed8504 in main (argc=4, argv=0x7fffffffe3f8) at /mysqldata/percona-server-locks-detail-5.7.22/sql/main.cc:25
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-2653864/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【前端筆記】Vuex 是什麼,為什麼需要前端筆記Vue
- Docker筆記(一):什麼是DockerDocker筆記
- 偽隨機數是什麼?偽隨機數生成方法有哪些?隨機
- Android伍什小隨筆(一)Android
- 讀材料後筆記:什麼是DevOps筆記dev
- 什麼是好的筆譯服務?
- 筆記本千萬不要用固態硬碟是為什麼 買筆記本不要加固態硬碟是什麼原因筆記硬碟
- 什麼是cookie,什麼是sessionCookieSession
- 這是什麼這是什麼
- 什麼是分而治之?什麼是WBS?
- 什麼是DNS,什麼是HostsDNS
- 什麼是WebAuthn、FIDO 是什麼?Web
- Android伍什小隨筆(二)- 更新中Android
- 電腦無法識別隨身碟是什麼原因,怎麼解決?
- 《Spring揭祕》學習筆記——IOC是什麼Spring筆記
- ###什麼是Linux核心###什麼是MMULinux
- ITIL是什麼意思?ITIL是什麼?
- SNP全稱是什麼? SNP是什麼公司? SNP是什麼意思?
- 隨筆
- 人是什麼?人生是什麼?人為什麼會變?
- ftp是什麼,ftp是什麼東西?FTP
- 什麼是正向代理?什麼是反向代理?
- NLA是什麼?NLA的原理是什麼?
- Java是什麼_Java是做什麼的?Java
- 以太坊學習筆記————1、以太坊是什麼?筆記
- webpack筆記——hook執行時call的是什麼Web筆記Hook
- 什麼是this
- 為什麼要有 Servlet ,什麼是 Servlet 容器,什麼是 Web 容器?ServletWeb
- 什麼是框架?為什麼說 Angular 是框架?框架Angular
- IDFA、IMEI、OAID 是什麼,區別是什麼AI
- GNU是什麼?和Linux是什麼關係?Linux
- 什麼是SSRF攻擊?SSRF用途是什麼?
- 什麼是API介面,具體是什麼意思?API
- DRBD是什麼意思?優缺點是什麼?
- 什麼是塊元素?什麼是行內元素?
- 什麼是Tornado?它的特點是什麼?
- 華為帳號服務學習筆記(一):什麼是HMS,什麼是華為帳號服務筆記
- MySQL 隨筆MySql