如何判断一个数据库是否出了问题

本文探讨了多种判断数据库是否出问题的方法,包括使用`select 1`、查表判断、更新判断和利用MySQL的内部统计。强调了在并发线程限制、磁盘利用率、IO请求时间等方面的问题,提出通过`performance_schema`库监测IO请求时间来更准确地评估数据库状态。
摘要由CSDN通过智能技术生成

怎么判断一个主库出了问题

select 1

-- 用select 1 只能说明数据库的进程正常,并不能证明主库是没有问题的;如(innodb_thread_concurrency=3)设置并发线程为3,表示InnoDB只允许三个线程并行执行,可以此种方式来模仿大查询。启动三个session每一个都执行select  sleep(100) from t,再执行select 1时发现可以正常返回;但是执行查询表的语句会block,所以select 1是无法检测出实例是否正常的。

-- InnoDB中innodb_thread_concurrency的默认值是0,表示不限制线程并发数,但是机器的核数是有限的大量线程都进来之后,上下文切换的成本还是很大的。所以建议innodb_thread_concurrency设置为64-128之间,这里说的并发指的是并发查询,而不是并发连接。

-- 并发连接和并发查询:这俩并不是一个概念,show processlist可以看到的连接是并发连接,可达到几千个;而当前正在执行的语句才是我们说的并发查询,它才是cpu有时过高的原因,这也是需要设置innodb_thread_concurrency参数的原因;而大量并发连接只是多占一些内存。

-- 当出现同一行热点更新的问题时,就会出现很多线程进入锁等待状态,等待某一线程释放对应行的行锁;然而当出现锁等待时,并发线程数就会减1,即锁等待的线程不会算在并发线程数中;如果不减一那当更新同一行数据的线程数达到innodb_thread_concurrency设置的上限值时,后面的数据库操作就会被堵住InnoDB不会响应任何请求,而cpu的利用率确是0,这样显然是不合理的,反之将

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值