怎么判断一个主库出了问题
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,这样显然是不合理的,反之将