`
maishj
  • 浏览: 84046 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

mysql master_thread

    博客分类:
阅读更多

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 跳到主循环
    }    

 

分享到:
评论

相关推荐

    MySQL-Master_Slave_repl.txt

    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 ...

    MySQL 两种恢复数据的方法

    一 前言 前一段时间接二连三的出现开发人员在测试环境和生产误操作导致数据库误删除/更新,对DBA而言,回滚数据着实是一件头疼的事情,凡涉及到恢复线上...START SLAVE [SQL_THREAD] UNTIL MASTER_LOG_FILE = ‘log_n

    MySQL主从复制配置心跳功能介绍

    waiting for the slave I/O thread to update it ,看起来状态都正常,但实际却滞后于主,Master_Log_File 和 Read_Master_Log_Pos 也不是实际主上最新的位置。一种可能是 Master 上的 binlog dump 线程挂了。但有...

    mysql数据库my.cnf配置文件

    innodb_thread_concurrency = 0 # 默认设置为 0,表示不限制并发数,这里推荐设置为0,更好去发挥CPU多核处理能力,提高并发量 innodb_purge_threads = 1 # InnoDB中的清除操作是一类定期回收无用数据的操作。在之前...

    MySQL技术内幕 InnoDB存储引擎.pdf

    2.3 Master Thread工作方式 2.4 InnoDB关键特性 3. 文件 3.1 参数文件 3.2 日志文件 3.3 套接字文件 3.4 pid文件 3.5 表结构定义文件 3.6 InnoDB存储引擎文件 4. 表 4.1 索引组织表 4.2 InnoDB逻辑存储...

    master and slave have equal MySQL server ids

    代码如下:Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the –replicate-same-...

    master and slave have equal MySQL server UUIDs 解决方法

    Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. 首先检查:mysql&gt; show variables like ‘server_id...

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    5.6.1 per_thread_buffers优化 198 5.6.2 global_buffers优化 200 5.6.3 query cache在不同环境下的使用 201 5.6.4 tuning-primer.sh性能调试工具的使用 205 5.6.5 72 gb内存的my.cnf配置文件 208 5.6.6 谨慎...

    详解监听MySQL的binlog日志工具分析:Canal

    Canal是阿里巴巴旗下的...MySQL master启动binlog机制,将数据变更写入二进制日志(binary log, 其中记录叫做二进制日志事件binary log events,可以通过show binlog events进行查看)MySQL slave(I/O thread)将mast

    mysql主从同步复制错误解决一例

    Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids

    MySQL主从延迟现象及原理分析详解

    根据 MySQL 官方文档 MySQL Replication Implementation Details 中的描述,MySQL 主从复制依赖于三个线程:master一个线程(Binlog dump thread),slave两个线程(I/O thread和SQL thread)。主从复制流程如下图: ...

    基于MySQL的数据库中间件Meituan-DBProxy.zip

    backend-max-thread-running用于指定每个MySQL后台的最大thread running数 thread-running-sleep-delay用于指定在thread running数超过backend-max-thread-running时,客户端连接等待的时间 添加...

    mysql同步问题之Slave延迟很大优化方法

    简单说,在master上是并发模式(以InnoDB引擎为主)完成事务提交的,而在slave上,复制线程只有一个sql thread用于binlog的apply,所以难怪slave在高并发时会远落后master。  ORACLE MySQL 5.6版本开始支持多线程复制...

    MySQL主库binlog(master-log)与从库relay-log关系代码详解

    主库binlog: ...#170814 11:07:18 server id 1882073306 end_log_pos 2528 CRC32 0x40774a4b Query thread_id=92 exec_time=0 error_code=0 SET TIMESTAMP=1502680038/*!*/; BEGIN /*!*/; # at 2528

    MySQL InnoDB存储引擎的深入探秘

    前言 在MySQL中InnoDB属于存储引擎层,并以插件的形式集成在数据库中。从MySQL5.5.8开始,InnoDB成为其默认的存储引擎...Master Thread是最核心的一个后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一

    解决MySQL中的Slave延迟问题的基本教程

    简单说,在master上是并发模式(以InnoDB引擎为主)完成事务提交的,而在slave上,复制线程只有一个sql thread用于binlog的apply,所以难怪slave在高并发时会远落后master。 ORACLE MySQL 5.6版本开始支持多线程复制,...

    基于python的多线程爬虫程序

    可以通过配置config.ini文件下的[sys] sleep_time 控制爬虫速度(尽量使用推荐值,过快容易被知乎封禁),thread_num配置线程数目 3.向数据库导入init.sql Run 开始抓取数据:python get_user.py 查看抓取数量:...

Global site tag (gtag.js) - Google Analytics