【问题标题】:why mysql queries takes table lock in isolation read uncommitted?为什么mysql查询需要隔离读取未提交的表锁?
【发布时间】: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


【解决方案1】:

似乎 mysql 查询总是对 myisam 表进行读锁。

我的问题的解决方案是在 my.cnf 的 [mysqld] 部分中设置 low-priority-updates = 1。

我仍然想知道是否有一种方法可以在 mysql 中进行查询而不使用读锁,但我会打开另一个问题,并为此提供更好的标题。

谢谢!

【讨论】:

    猜你喜欢
    • 2015-05-20
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 2020-05-01
    • 1970-01-01
    相关资源
    最近更新 更多