表设计
1.动静分表的使用场合?
动静分表核心在于锁竞争,如何分表后不会显著改善缓解锁竞争,分表后效果不会好。分开来说,如果使用行锁的话,innodb引擎不需要动静分表,因为读写,写写之间都不存在锁竞争;myisam引擎需要分表,因为写操作是表锁,读写会相互竞争,在竞争激烈时,使用动静分表会提高性能;
最佳实践:
1. 如果是Innodb,只有在使用表锁时才考虑动静分离,把锁表操作放在动表中操作,读操作从静表读;
2. 如果是myisam引擎,只有在表的并发量较大,监控显示表锁竞争激烈时才使用;
分表后是否会提高并发量受多个因素影响:
1. 磁盘,cpu,网络,内存是否跑满。
2. 单事物处理时间。分表后单表的索引缓存命中减少,如果减少锁竞争较少的处理时间不能抵消查询索引的时间消耗,可能会适得其反。
如果不是必须使用事务,写并发量大时,可以考虑使用多张myisam表替代一张innodb表,每张myisam表承担一部分写任务,性能也会有所提高。一般单事务处理时间在0.3mm时有必要考虑分表了,具体如何推算请看我的文章。