29 | 如何判断一个数据库是不是出问题了?

一主一备的双 M 架构里,客户端流量切到备库;主多从,还需要把从库接到新主库上。

两种场景,主动,被动切换。主库出问题 HA 系统发起。

一、select 1 判断

1.1innodb_thread_concurrency 并发线程上限( 建议64~128 )

=3 个线程并行执行。三个 session 中sleep(100)三个语句都“执行”状态,模拟大查询

select 1成功(检测不出问题),t 被堵住

=0,不限制。不行:CPU 核数有限,线程全来,上下文切换成本高。

并发连接:show processlist 几千个连接(影响不大,占内存)。

并发查询:“当前正在执行”,CPU 杀手。

第 7 篇文章热点更新和死锁检测的时候, 128 热点更消耗完了,系统是不是就挂了?

线程进入锁等待以后,并发线程的计数会减一等行锁(也包括间隙锁)线程是不算 128 里,不吃 CPU ;避免系统锁死。否则现象:

1.  线程 1 执行 begin; update t set c=c+1 where id=1, 启动事务 trx1,空闲状态,不算并发

2.  2 到129 执行 update t set c=c+1 where id=1; 等行锁,128 个线程等待

3.  线程计数不减一用满阻止其他执行, 1 不能提交。另外128 等待堵住(占用 CPU 0,不合理)

图 2 系统锁死状态(假设等行锁的语句占用并发计数)

锁等待,并发线程计数减 1 必要的

等锁线程不算并发线程计数里, select sleep(100) from t 算

二、查表判断

创建表 health_check定期执行:mysql> select  * from mysql.health_check;

检测并发线程过多导致不可用空间满不好使

binlog 占用率100%,更新和 commit 堵住。正常读

三、更新判断

主、备库放 timestamp 最后一次执行检测时间)mysql> update  mysql.health_check set t_modified=now();

备库检测也写 binlog 。双 M 结构,B 上执行检测命令,发回给主库 A。

AB相同更新命令,行冲突,主备同步停止。mysql.health_check要存多行, A、B server_id 做主键。

insert into  mysql.health_check(id, t_modified) values (@@server_id, now()) on duplicate  key update t_modified=now();

主库和备库的 server_id 必须不同(否则创建主备关系报错),保证检测不冲突。

更新语句,失败或者超时,发起主备切换了,为什么会判定慢?

IO 资源分配问题:

如果update 超过 N (超时时间)不返回,判定系统不可用。

场景:IO 利用率100% 。响应非常慢,需要主备切换。update 需资源少,提交成功, N 秒未到达之前返回

结果:判定正常(不准确),update 没有超时,正常SQL慢,HA 系统正常

不准确原因:基于外部检测,随机性。定时轮询,第一次轮询还不能发现,切换慢

四、内部统计

内部每次 IO 请求时间:performance_schema 库file_summary_by_event_name (多行数据)

event_name='wait/io/file/innodb/innodb_log_file’这一行。

图 3performance_schema.file_summary_by_event_name 的一行

统计redo log 的写入时间,EVENT_NAME 表示统计的类型。

redo log 操作时间统计。

第一组五列,IO 类型统计(单位是皮秒)。COUNT_STAR 所有 IO 的总次数,总和、最小值、平均值和最大值。

第二组六列,读操作统计。最后列SUM_NUMBER_OF_BYTES_READ 总共从 redo log 里读了多少个字节。

第三组六列,统计写操作

最后第四组数据,其他类型数据统计。redo log 对 fsync 的统计

binlog 对应 event_name = "wait/io/file/sql/binlog"与 redo log 各个字段完全相同。

performance_schema额外统计,性能损耗(打开所有下降 10% 左右)。

redo log 时间监控:

mysql> update  setup_instruments set ENABLED='YES', Timed='YES' where name like  '%wait/io/file/innodb/innodb_log_file%';开启 redo log 和 binlog 统计信息,用在状态诊断上:

MAX_TIMER 判断数据库是否出问题。单次 IO 请求时间超过 200 毫秒异常,

mysql> select  event_name,MAX_TIMER_WAIT  FROM  performance_schema.file_summary_by_event_name where event_name in  ('wait/io/file/innodb/innodb_log_file','wait/io/file/sql/binlog') and  MAX_TIMER_WAIT>200*1000000000;

发现异常:mysql>  truncate table performance_schema.file_summary_by_event_name;

清空统计信息。再次出现,加入监控累积值。

小结

MySQL 检测健康几种方法,各种问题和演进逻辑。

select 1是不是已被淘汰,实际使用非常广泛 MHA(Master High Availability)默认方法

MHA 中另可选方法:只做连接(很少),“连接成功,主库没问题”。

改进方案,增加额外损耗,实际情况做权衡。

优先考虑 update 系统表,配合增加检测performance_schema

开发和维护中,怎么判断服务有没有问题?

评论1

一台服务器update方式。主从架构一条语句,双主两条update。弊端,单点判断。超半监控进程认为出问题,才切

1.innodb_thread_concurrency跟计算机核数成正比,2倍最好.创建虚拟机分1~2个核,设置成4

2.空间满了,连接都连不上,更不用select,这个是什么原因啊?

空间满本身不会导致连不上。但空间满,无法提交,接外部重试(堵在提交),持续累积把连接数用满

评论2

dubbo 存活检测三个层面

(1)服务端注册中心(zookeeper)链接状态

服务端注册临时节点客户端注册这个节点watch事件,一但服务端失联,客户端移除该服务(多个提供者,只移除失联)。

zookeeper心跳发现失联,固定频率(比如每秒)发送检测数据包;

(2)客户端注册中心的链接状态

客户端与zookeeper失联,用缓存服务提供者列表。多次调不通移除

(3)客户端服务端的链接状态

定时调用。亚健康状态,超过阀值,降级

移除一定时间后重试,恢复或继续降级。

状态监控,用外部系统;质量监控,接口响应时间来统计

评论3

1.基础监控,硬盘,CPU,网络,内存等。

2.服务监控,包括jvm,服务端口,接入上下游服务的超时监控等。

3.业务监控,监控业务流程是否出现问题。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容