始创于2000年 股票代码:831685
咨询热线:0371-60135900 注册有礼 登录
  • 挂牌上市企业
  • 60秒人工响应
  • 99.99%连通率
  • 7*24h人工
  • 故障100倍补偿
您的位置: 网站首页 > 帮助中心>文章内容

MySQL源代码:如何对读写锁进行处理

发布时间:  2012/8/31 17:12:24

4.监控读写锁

为了防止mysqld被hang住导致的长时间等待rw锁,error监控线程会对长时间等待的线程进行监控。这个线程每1秒loop一次

(os_event_wait_time_low(srv_error_event, 1000000, sig_count);)

函数入口:srv_error_monitor_thread

函数sync_array_print_long_waits()用于处理长时间等待信号量的线程,流程如下:
-
 

1. 查看sync_primary_wait_array数组中的所有等待线程。

->大于240秒时,向错误日志中输出警告,设置noticed = TRUE;

->大于600秒时,设置fatal =TRUE;

2.当noticed为true时,打印出innodb监控信息,然后sleep30秒

3. 返回fatal值

 

当函数sync_primary_wait_array返回true时,对于同一个等待线程还会有十次机会,也就是300 + 1*10(监控线程每次loop sleep 1s)秒的时间;如果挺不过去,监控线程就会执行一个断言失败:


[cpp]
1.if (fatal_cnt > 10) { 
2.                   fprintf(stderr, 
3.                            "InnoDB:Error: semaphore wait has lasted"  4.                            "> %lu seconds\n"  5.                            "InnoDB:We intentionally crash the server,"  6.                            "because it appears to be hung.\n",  7.                             (ulong) srv_fatal_semaphore_wait_threshold); 
8.  
9.                            ut_error; 
10.                   } 
ut_error是一个宏:


[cpp]
1.#define ut_error      assert(0) 
断言失败导致mysqld crash
 


本文出自:亿恩科技【www.enkj.com】

服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]

  • 您可能在找
  • 亿恩北京公司:
  • 经营性ICP/ISP证:京B2-20150015
  • 亿恩郑州公司:
  • 经营性ICP/ISP/IDC证:豫B1.B2-20060070
  • 亿恩南昌公司:
  • 经营性ICP/ISP证:赣B2-20080012
  • 服务器/云主机 24小时售后服务电话:0371-60135900
  • 虚拟主机/智能建站 24小时售后服务电话:0371-60135900
  • 专注服务器托管17年
    扫扫关注-微信公众号
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 亿恩科技 版权所有  地址:郑州市高新区翠竹街1号总部企业基地亿恩大厦  法律顾问:河南亚太人律师事务所郝建锋、杜慧月律师   京公网安备41019702002023号
      1
     
     
     
     

    0371-60135900
    7*24小时客服服务热线