高并发时候的表类型如何选择?"MyISAM" OR "innoDB"
千叶_V 2012-06-11 12:29:33 目前在捣鼓一个小型的互联网项目,从项目开始到现在,mysql一直是系统性能的瓶颈。我之前没有很系统的接触过或仔细的研究过mysql,一直都是遇到问题,解决问题,也不知道是否会给后期项目带来什么风险。
我分享几次调优的经验,希望版主以及达人们能够给点建议。
第一阶段:
这个阶段表的数据量还不算很大,只是有个别的表开始超过百万,这时候的瓶颈主要体现sql上
解决方法:我写了个shell,作为mysql的性能监控。当cpu超标时,记录正在执行的sql。同时分析数据库慢查询日志。针对速度可能会慢的sql,挨个排查。有些是由于索引引起,有些将业务逻辑简化,有些将表关联打散,有些做冗余表。
第二阶段:
这个阶段表的数据量扩展了一个数量级,特别是几个主表【用户表】、【动态表】、【用户关系表】等,都达到了百万级的数据量,经常性出现sql locked的情况,已经不是单个sql的问题
解决方法:再多次优化sql无果的情况下,我将几个大表的类型都从myisam改成了innoDB,将表锁改成行锁。
现在的问题:
这个项目对数据的完整性要求不是很严格,所以不需要实现事务。看网上的几个帖子都说:当需要事务的时候才用的上innoDB,其他时候还是myisam性能更高。我想请教如何在myisam的基础上,尽可能的支持高并发,这是数据库层面的问题,还是业务逻辑的问题?
@ACMAIN_CHM