以后读取 性能原产地/PHP/MySQL:交易对直接执行 关于性能的问题,我想我做了一些研究,在锁定的表MySQL.

http://dev.mysql.com/doc/refman/5.0/en/table-locking.html

表锁使得许多会议 从表在同一时间, 但是,如果一届会议希望编写一个 表,它必须首先获得专属的 访问。在更新,所有其他的 会议希望访问这个 特别表格必须等到 更新完成。

这一部分让我吃惊,尤其是因为我们大部分的查询将更新而不是插入。我想知道,如果创建了一个表叫做foo在其所有更新/插入进行,然后视称为foo_view(一个副本foo,或者也许foo和联系的其他几个表格加foo)在其所选择的发生,这将锁定问题仍然发生的?

这是会选择查询foo_view仍然需要等待一种更新的完成上foo?

另一个简短的问题,我的同事要求。这不会影响缓存?I.e。如果选择的是缓存将它击中了缓和返回的结果,或者它将等待锁定先完成?

有帮助吗?

解决方案

你的观点将体验到同样的锁定为基础的表格。

从MySQL的参考页上 锁定:

MySQL赠款表写锁 下:

  1. 如果没有锁在桌子上,把一个写锁。
  2. 否则,把锁请求在编写锁的队列。

MySQL赠款表读锁 下:

  1. 如果没有写锁在桌子上,把一读锁定它。
  2. 否则,把锁请求在读锁的队列。

值得一提的是,这取决于数据库引擎的使用。 将按照上述步骤,并锁定整个表格(即使它被分成多个分区)其中一个引擎喜欢 将执行一级锁定来代替。

如果你没有达到必要的业绩基准,有些和你展示了你的瓶颈是在等待上表锁,通过更新,我建议改变储存引擎你的表至少.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top