2012-02-09 109 views
0

因此,我有一个集中的CMS,其中包含从单个数据库运行的多个站点。最近我们偶尔会收到一个我们以前见过的max_user_connections错误(在一个非常慢的服务器上)。mysql max_user_connections以及innodb vs myisam

现在主机已经建议innodb的行锁定而不是myisam的表锁定可以解决这个问题。听起来可能是这样,但我会尽管增加联系将是一个更安全的赌注。

我已经对innodb和myisam做了一些阅读,我不相信全文索引的损失会成为一个问题,但是我不确定外键的问题。

所以我的问题是,与生产数据库上运行,具有巨大的CMS和前端代码的各种实例,是否有可能在转换为innodb的任何主要问题?特别是什么类型的查询将不再起作用?

+0

http://stackoverflow.com/questions/2006053/converting-myisam-to-innodb-beneficial-consequences http://stackoverflow.com/questions/20148/myisam-versus-innodb – vulkanino 2012-02-09 10:44:17

回答

1

两点:

  • Increasing the connections - 虽然具有这样的“停止这世界”方案,这不会解决你的问题。增加连接只会给你更多的并行连接,但具有这样的问题通常意味着表中的操作频繁发生,并且在单个操作之间一个或多个类似的请求在阻塞状态中运行。所以,即使您大幅增加连接池,它也只是一个临时解决方案。

  • InnoDB是一个完全不同的存储引擎。所以你需要在不同的配置属性和备份场景中投入一些时间。从查询的角度来看,你可能有更多的选择与innodb,而不是与myisam。 Afaik唯一不可能的是全文索引。请看这里的优点和缺点的综合列表:http://www.kavoir.com/2009/09/mysql-engines-innodb-vs-myisam-a-comparison-of-pros-and-cons.html。一个提示:获取与不同的工具集进行恢复,故障保护和备份

替代方案:你可能比通过切换无论是行级锁定机制或切换到解决锁定问题没有其他选择完全不同的东西。

还有一个选项不能完全切换。您可以基于表配置存储引擎。因此,如果您确定发生锁定问题的表,您可能只需将此表迁移到其他存储引擎。