存档

文章标签 ‘同步’

Mysql的innodb同步管理

2010年5月2日 admin 没有评论

innodb的同步管理

数据库是支持多客户端同时连接和处理的, 因此多线程是必然的,多线程编码很重要的一个方面是处理同步和互斥,innodb的互斥机制有两个:mutex和rw-lock; 当某个线程需要获取一个mutex或rw-lock时,有两种结果可能发生, 一是直接获得了mutex从而继续处理;一个是无法获得mutex只得等待拥有线程释放mutex. 多线程编码技术中, 是通过信号量来通知等待线程mutex的可用性的, mysql在处理时并没有直接使用操作系统提供的信号量机制, 而是实现了自己的信号量机制,之所以不用操作系统的信号量机制而自己实现的主要原因是操作系统的信号量机制比较慢,其次一个原因是(某些)操作系统的信号量处理往往导致线程切换,而在很多时候, 有比不做线程切换更高效的事情:在多处理器系统上,通过循环等待旋转锁(spin lock), 当然, 在只有单处理器的系统上,循环等待明显是低效的事情。再一个原因是, 便于分析同步情况, 从而避免死锁, 因为当所有的同步信息交给操作系统处理时, 就难以分析死锁情况了,如果有自己的数据结构来管理这些信息, 死锁情况就容易分析。

阅读全文…

相关日志

分类: MySQL 标签: , ,

Mysql主从同步延迟受到机器系统时间的影响

2010年4月30日 admin 没有评论

Mysql主从同步延迟受到多种因素影响, 比如大事务, 从库查询压力, 网路延迟等; 这些比较常见; 但还受到主从机器系统时钟差的影响,这一点可能容易被忽视。

上周, 就遇到了这样的情况, 主库的系统时间由于某种原因落后于从库几十秒, 结果频繁的出现大的主从延迟同步 ,查了N久业务方面的问题, 都找不出原因; 在和同事的交流中,发现大家对参数Seconds_Behind_Master的理解有点补一样,基本有两种理解:

一种理解是来源于Mysql手册上的描述, 大体意思是这个时间是从库SQL线程处理的最近的日志事件的时间戳减去从库IO线程处理的最近一条日志记录的时间戳得到的, 可以简单理解为从库SQL线程与IO线程所处理的最近的日志事件的时间戳差;这个计算方式给人的感觉不是在计算主从延迟,而是在计算从库上两个线程的处理 的日志的时差。

阅读全文…

相关日志

分类: MySQL 标签: , ,
Easy AdSense by Unreal