- 论坛徽章:
- 0
|
手头上有个系统,mysql的记录大概达到几千万的级别,每日新增几百万条记录。可以将过时的记录清除,但库中要保存的记录肯定有几千万条,未来会过亿。现时已经分为100个表,但由于select,insert,update都非常频繁,现时show processlist看,经常出现lock表的情况。已经做了一部分select的cache,但是update和insert与及一部select还是不可避免。现时觉得压力很大,应该怎样去优化呢?现时用的表类型是myisam的,当频繁select,insert,update的时候,无可避免经常出现lock表的情况。我想到的优化的方法有以下几个,大家觉得哪个好一点呢?或者还有什么其它建议。
1、将表类型由myisam转为innodb。innodb是行级锁的,可能会解决频繁锁表的问题。但是据以前我的实验证明,innodb无论是insert,select,update的速度,都比不上myisam,尤其是insert,差得很远,这样虽然不锁表,但速度是否会变得更慢呢?
2、在同一台机装多个mysql,分别listen多个端口。这样可以分更多的表,比如分为1000个,将锁表的机率再调低。
3、将update和insert打平,限制并发的粒度。如将update和insert都放到N个队列中,由一些独立的线程专门去做update和insert工作。这样可以避免频繁地update和insert 。
4、换成文件系统,不用DB。但是如果是差不多一亿个小文件,一台机占一亿个inode,无论是维护等各方面都不是一件容易的事情。
5、换其它DB,感觉mysql好像有点力不从心了。另外,这个系统的表结构已经经过了高度优化,单纯从表结构方面想,很难再优化了。 |
|