暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL tips(十七)——判断数据库是否正常

爱可可的人生记录仪 2020-01-30
1185

1.select 1判断

select 1 成功返回,只能说明这个库的进程还在,并不能说明主库没问题。innodb_thread_concurrency,该参数控制 InnoDB 的并发线程上限。也就是说,一旦并发线程数达到这个值,InnoDB 在接收到新请求的时候,就会进入等待状态,直到有线程退出。并发连接数达到几千个影响并不大,就是多占一些内存而已。应该关注的是并发查询,因为并发查询太高才是 CPU 杀手。通常情况下,建议把 innodb_thread_concurrency 设置为 64~128 之间的值。在线程进入锁等待以后,并发线程的计数会减一,不会计入并发线程数中。当同时在执行的语句超过了设置的 innodb_thread_concurrency 的值中,select 1还是返回成功的,但系统已经不行了。


2.查表判断

为了避免线程过多的问题,可以在系统库(mysql 库)里创建一个表,里面只放一行数据,然后定期执行查询,但无法检测空间的问题。


3.更新判断

常见做法是放一个 timestamp 字段,用来表示最后一次执行检测的时间,但外部检测都需要定时轮询,所以系统可能已经出问题了,但是却需要等到下一个检测发起执行语句的时候,我们才有可能发现问题。而且,如果你的运气不够好的话,可能第一次轮询还不能发现,这就会导致切换慢的问题。


4.内部统计

MySQL 5.6 版本以后提供的 performance_schema 库,在 file_summary_by_event_name 表里统计了每次 IO 请求的时间。这样你就可以通过 MAX_TIMER 的值来判断数据库是否出问题了。但如果打开所有的 performance_schema 项,性能大概会下降 10% 左右。可以只打开自己需要的项进行统计。比如要打开redo log的时间监控:

    update setup_instruments set ENABLED='YES', Timed='YES' where name like '%wait/io/file/innodb/innodb_log_file%';


    目前使用非常广泛的 MHA(Master High Availability),默认使用的还是select 1。推荐方案:优先考虑 update 系统表,然后再配合增加检测 performance_schema 的信息。


    参考资料:丁奇,MySQL实战45讲



    部分内容来自网络,如有侵权请联系作者删除。


    文章转载自爱可可的人生记录仪,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论