schack8888
风云使者
风云使者
  • 注册日期2010-12-06
  • 发帖数686
  • QQ
  • 火币3641枚
  • 粉丝161
  • 关注102
阅读:2859回复:0

[mysql]同步mysql slave锁表问题

楼主#
更多 发布于:2011-07-26 22:20
 问题描述:
  如图:
  slave 上的日志更新的updata 与 web 请求过来的select 表互相锁表,导致同步堵塞
  mysql slave 负载飙升,网站防问巨慢。
  
  问题分析:
  那么,为何从库在处理日志时会发生lock的状态呢?
  一般我们都将主从库读写分离,主库负责写操作,从库负责读操作。而一般的web应用读数据的操作要远远大于写数据的量,所以我们在主库上几乎看不到因为更新数据导致的lock。那么从库的lock怎么发生的呢?
  网上查了一下是这么说的:
  对MyISAM表的读操作(加读锁),不会阻塞其他进程对同一表的读请求,但会阻塞对同一表的写请求。只有当读锁释放后,才会执行其它进程的写操作。
  对MyISAM表的写操作(加写锁),会阻塞其他进程对同一表的读和写操作,只有当写锁释放后,才会执行其它进程的读写操作。
  从上面可以看出,我们在select的时候默认是会阻塞写请求的,当一个表数据量到达了千万级别,那么执行一个select很有可能就会变得比较费劲,再加上一定的压力,不断地select操作,虽然读数据不会受到影响,但是却阻塞了从库处理同步日志的操作。到目前为止还没找到真正的解决方法
  问题处理:
  1.优化查询时间长的sql
  2.压力较大的情况下使用几个从库值得考量,如果使用多个从库也是可以适当缓解上面lock的情况发生。(目前已经加了2个salve 来分散salve的压力)
  3.到目前为止还没找到真正的解决方法。进一步优化中。
  如果谁有好的解决方法,请告诉我一下。

喜欢0 评分0
兼职版主
游客

返回顶部