mysql master thread 工作内容
伪代码:
void master_thread(){ goto loop; loop://主循环begin for(int i=0;i<10;i++){ thread_sleep(1); //休眠1秒 do log_buffer flush to disk; //将日志缓冲刷新到磁盘文件 if (last_one_second_io < 5%*innodb_io_capacity)//如果前一秒的io操作次数小于(5%的磁盘io吞吐量参数innodb_io_capacity),合并(5%的磁盘io吞吐量参数)个插入缓冲inser_buffer do merge 5%*innodb_io_capacity insert_buffer; if (buf_get_modified_ratio_pct > innodb_max_dirty_pages_pct)//如果当前缓冲区的脏页比例超过配置文件innodb_max_dirty_pages_pct参数值,将innodb_io_capacity个脏页刷新到磁盘文件 do buffer_pool (100%*innodb_io_capacity) dirty_page flush to disk; else enable adaptive flush do buffer pool flush desired amount dirty page //??? if (no user activity) goto background loop; } if (last_ten_second_io < innodb_io_capacity) //前10秒的io操作次数小于innodb_io_capacity(就是前面for循环) do buffer_pool 100%*innodb_io_capacity dirty_page flush to disk; //将innodb_io_capacity个脏页刷新到磁盘文件 do merge at most 5%*innodb_io_capacity insert_buffer; //合并最多5%*innodb_io_capacity个插入缓冲inser_buffer do log_buffer flush to disk; //将日志缓冲刷新到磁盘文件 do full purge; //删除无用undo页 if (buf_get_modified_ratio_pct > 70%) //如果当前缓冲内存的脏页比例超过70% do buffer_pool 100%*innodb_io_capacity dirty_page flush to disk; //将innodb_io_capacity个脏页刷新到磁盘文件 else do buffer_pool 10%*innodb_io_capacity dirty_page flush to disk; //将10%*innodb_io_capacity个脏页刷新到磁盘文件 do fuzzy checkpoint; goto loop; //主循环end background loop: //后台循环begin do full purge; //删除无用undo页 do merge 100%*innodb_io_capacity insert_buffer; //合并innodb_io_capacity个插入缓冲inser_buffer if (not idle) //如果不是空置的,跳回主循环 goto loop; else goto flush loop;//后台循环end 跳到刷新循环 flush loop://刷新循环begin do buffer_pool 100%*innodb_io_capacity dirty_page flush to disk; //将innodb_io_capacity个脏页刷新到磁盘文件 if (buf_get_modified_ratio_pct > innodb_max_dirty_pages_pct) { goto flush loop;//跳到刷新循环 } goto suspend loop; //刷新循环end 跳到暂停循环 suspend loop://暂停循环begin suspend_thread();//开启挂起线程 waiting event; //等待事件触发 goto loop;//暂停循环end 跳到主循环 }
相关推荐
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs This error generally occur when we clone the master to slaver. Delete auto.cnf of mysql, and then ...
2. **thread_cache_size**:线程缓存允许MySQL快速为新连接创建服务线程,减少每次新建线程的开销。根据并发连接数量进行调整,避免过多或过少的线程浪费资源。 3. **max_connections**:设定服务器允许的最大并发...
项目可能使用Thread、Runnable、ExecutorService等工具来处理并发问题,确保系统能高效处理大量用户请求。 4. **IO流**:对于读写文件、网络通信等操作,Java的IO流API不可或缺。在电商系统中,可能涉及到日志记录...
6. **多线程**:如果项目包含并行处理,如异步加载数据或并发操作,那么理解Java的线程和同步机制(如Thread、Runnable、synchronized关键字)就很重要。 7. **设计模式**:为了保持代码的可维护性和扩展性,开发者...
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so'; mysql> show plugins; # 查看是否加载成功 mysql> SET GLOBAL rpl_semi_sync_master_enabled=1; # 开启半同步复制,默认是关闭的 ``` ...
- 启动:`START SLAVE IO_THREAD | SQL_THREAD FOR CHANNEL 'master-65303306';` - 停止:`STOP SLAVE IO_THREAD | SQL_THREAD FOR CHANNEL 'master-65303306';` - **监控复制状态**: - 使用`SHOW SLAVE STATUS...
在一个典型的MySQL复制设置中,主要包括以下三个角色:插入客户端(Insert Client),发送线程(Sender thread),接收线程(Receiver thread)以及应用线程(Applier Thread)。在复制过程中,主服务器(Master)上...
./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-assembler --with-charset=utf8 --with-collation=utf8_general_ci --with-secure-auth --with-zlib-...
一 前言 前一段时间接二连三的出现开发人员在测试环境和生产误操作导致数据库误删除/更新,对DBA而言,回滚数据着实是一件头疼的事情,凡涉及到恢复线上...START SLAVE [SQL_THREAD] UNTIL MASTER_LOG_FILE = ‘log_n
mysql> change master to master_host='192.168.36.150', master_user='slave', master_password='123456', master_log_file='mysql-bin.000004', master_log_pos=595; mysql> start slave; ``` - **服务器B上:...
在MTS环境下,MySQL使用`slave_worker_info`表来跟踪每个工作线程的进度,即使在系统崩溃后,也能通过比较`Exec_Master_Log_Pos`和`slave_worker_info`表中的`Master_log_pos`来决定哪些事务需要重新执行。...
* 查看锁死锁:使用 `mysql> select r.trx_id waiting_trx_id,r.trx_mysql_thread_id waiting_thread,b.trx_query waiting_query,b.trx_id blocking_trx_id,b.trx_mysql_thread_id blocking_thread,b.trx_query ...
[root@MySQL-Master mysql-5.1.45]# ./configure --prefix=/usr/local/mysql \ --localstatedir=/data/mysql --enable-assembler \ --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static \ --...
shell> mysql -e "stop slave sql_thread;" ``` - 使用mysqldump命令导出数据库: ``` shell> mysqldump --all-databases > fulldb.dump ``` - 导出数据库后,重启复制进程以继续同步: ``` shell> ...
./configure --prefix=/usr/local/mysql --localstatedir=/opt/data --with-extra-charsets=utf8,gb2312,gbk --with-pthread --enable-thread-safe-client # 编译 make # 安装 make install ``` ##### 2. 初始化...
MySQLMonitor是404团队中的一环,如果对MySQLMonitor有任何疑问又或是想要找小伙伴交流,可以参考星链计划的加群方式。 MySQL监视器 MySQL实时监控工具(黑盒测试辅助工具) 更新: 2020-10-18:使用Java重构,...
MySQL的半同步复制模式(Semi-Synchronous Replication)是一种增强型的复制策略,旨在解决传统异步复制中数据丢失的问题。在半同步复制中,主库确保至少有一个从库接收到并写入了事务日志(二进制日志,binlog)后...
./configure --prefix=/usr/local/mysql --localstatedir=/opt/data --with-extra-charsets=utf8,gb2312,gbk --with-pthread --enable-thread-safe-client ``` - 编译安装: ``` make && make install ``` - ...