【发布时间】:2011-01-02 02:12:50
【问题描述】:
有没有办法让 mysql 查询不对 myisam 表进行任何锁定?
我的问题似乎是我的 Sphinx Search 索引器在我的一个 myisam 表上锁定了 60 多秒,这似乎使更新语句等待锁被释放,这反过来又使其他查询等待更新语句完全的。索引器使用 mysql_use_result 并在调用 mysql_free_result 之前完成大部分索引工作。至少这是我对正在发生的事情的最佳猜测,但如果这对您来说似乎是错误的,请告诉我。
解决问题的一种方法似乎是按 id 范围细分索引器查询。但似乎我不应该这样做,因为我真的不需要这个查询来防止任何其他查询同时运行。在这个用例中,性能比一致性重要得多。
谢谢!
【问题讨论】:
-
我想我找到了一个潜在的解决方案,即“设置全局变量 low_priority_updates = 1”。这应该导致选择查询不必等待更新语句。如果它有效,我会报告。
-
隔离级别对 myisam 表意义不大,如果需要事务支持,请使用 innodb
-
这似乎解决了我的问题。这是描述一般问题和解决方案的好文章:dev.mysql.com/doc/refman/5.0/en/table-locking.html 如果我愿意接受不一致的情况,我仍然想知道为什么无法执行忽略锁定的查询,就像我的索引一样场景。
-
nos:我不需要事务支持——我只是想让查询忽略所有锁,而不是阻止并发写入。
标签: mysql performance transactions isolation