我有一个大的MyISAM表,有一个全文索引可供搜索。问题是,将数据插入该表将导致表锁,同时,由于整个表被锁定,其他sql查询无法执行任何操作。
是否有可能或变通办法绕过该表锁而不获取损坏的表?InnoDB似乎是正确的方式(因为行锁定),但是InnoDB只包含大于5.6的mysql版本的全文搜索,而且这并不包括在当前的debian存储库中,更多的是新的debian没有包含MySQL5.6。
在我的情况下我能做些什么?
发布于 2013-03-14 19:02:48
由于您的主要问题是全文索引,所以我有两个存储引擎建议。
MyISAM存储引擎对以下内容执行完整的表锁:
表锁阻塞一切的唯一例外是设置并发性。(见关于并发插入的MySQL文档)
尝试在my.cnf中设置这个
[mysqld]
concurrent_insert = ALWAYS或
[mysqld]
concurrent_insert = 2仅在这种情况下,向MyISAM表添加新行时才会绕过表锁定。在更新表的另一行中的全文索引列时,必须尝试将行添加到表中。
截至2013年2月5日,MySQL 5.6还未脱离测试版,现已成为GA.。InnoDB在MySQL 5.6中支持全文索引。由于在兼容酸的数据库中执行此操作是您本质上所需要的,因此请查看升级。如果预先安装的MySQL 5.6包早于2013年2月5日,则不要加载它们。
发布于 2013-03-13 22:34:43
也许对某些列使用InnoDB表,并使用触发器将文本数据复制到单独的MyISAM表中进行全文搜索?
全文在mysql中是比较新的,它的实现不如其他RDBMs中的特性丰富。听起来,您似乎遇到了mysql的一些基本限制,从长远来看,如果您期望您的应用程序进一步扩展,那么它可能值得研究另一个工具,而不是mysql。例如,Postgres提供了对锁定的更多控制,并提供了更好的全文实现。
https://dba.stackexchange.com/questions/36666
复制相似问题