首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >旁路MyISAM表锁

旁路MyISAM表锁
EN

Database Administration用户
提问于 2013-03-13 22:09:22
回答 2查看 3.1K关注 0票数 1

我有一个大的MyISAM表,有一个全文索引可供搜索。问题是,将数据插入该表将导致表锁,同时,由于整个表被锁定,其他sql查询无法执行任何操作。

是否有可能或变通办法绕过该表锁而不获取损坏的表?InnoDB似乎是正确的方式(因为行锁定),但是InnoDB只包含大于5.6的mysql版本的全文搜索,而且这并不包括在当前的debian存储库中,更多的是新的debian没有包含MySQL5.6。

在我的情况下我能做些什么?

EN

回答 2

Database Administration用户

发布于 2013-03-14 19:02:48

由于您的主要问题是全文索引,所以我有两个存储引擎建议。

建议#1:MyISAM

MyISAM存储引擎对以下内容执行完整的表锁:

  • 变更表
  • 删除
  • 更新
  • 插入

表锁阻塞一切的唯一例外是设置并发性。(见关于并发插入的MySQL文档)

尝试在my.cnf中设置这个

代码语言:javascript
复制
[mysqld]
concurrent_insert = ALWAYS

代码语言:javascript
复制
[mysqld]
concurrent_insert = 2

仅在这种情况下,向MyISAM表添加新行时才会绕过表锁定。在更新表的另一行中的全文索引列时,必须尝试将行添加到表中。

建议#2:InnoDB

截至2013年2月5日,MySQL 5.6还未脱离测试版,现已成为GA.。InnoDB在MySQL 5.6中支持全文索引。由于在兼容酸的数据库中执行此操作是您本质上所需要的,因此请查看升级。如果预先安装的MySQL 5.6包早于2013年2月5日,则不要加载它们。

票数 2
EN

Database Administration用户

发布于 2013-03-13 22:34:43

也许对某些列使用InnoDB表,并使用触发器将文本数据复制到单独的MyISAM表中进行全文搜索?

全文在mysql中是比较新的,它的实现不如其他RDBMs中的特性丰富。听起来,您似乎遇到了mysql的一些基本限制,从长远来看,如果您期望您的应用程序进一步扩展,那么它可能值得研究另一个工具,而不是mysql。例如,Postgres提供了对锁定的更多控制,并提供了更好的全文实现。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/36666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档