MySQL中的SELECT FOR UPDATE是否有限制?

时间:2019-03-21 19:38:21

标签: mysql

在我们的应用程序中,我们使用SELECT FOR UPDATE语句来确保从其他线程锁定我们的实体。我们的一位实施此逻辑的原始架构师在我们的Wiki中评论说,MySQL的select限制为200。我在互联网上的任何地方都找不到这样的东西。有谁知道这是真的吗,如果有的话,我们有什么办法可以增加限额?

1 个答案:

答案 0 :(得分:0)

使用SELECT FOR UPDATE的主要原因是为了在两个用户当前试图同时访问同一数据的情况下进行并发预防。但是,如果用户尝试更新数据,则数据库中将出现严重问题。

在某些数据库系统中,此问题会严重影响数据库的完整性。为了帮助防止并发问题,某些数据库管理系统(例如SQL Server和MySQL)在大多数情况下使用锁定来防止发生严重的数据完整性问题。

如果该锁与已在运行的事务冲突,则会延迟已提交事务的执行。

在SQL Server或MySQL中,提交或回滚事务时使用SELECT FOR UPDATE查询。

但是,在MySQL中,将事务记录分配给各个MySQL服务器,以使集群中的事务总数最少。

MySQL使用构成此公式的高级datbase算法:

TotalNoOfConcurrentTransactions =(在任何单个事务中访问的最大表数+ 1)* SQL节点数。 每个数据节点可以处理TotalNoOfConcurrentTransactions /数据节点数。每个网络数据库(NDB)群集都有4个数据节点。

以上公式的结果表示为MaxNoOfConcurrentTransactions /4。

在MySQL文档中,他们提供了一个示例,该示例使用10个SQL节点,在11个事务中的10个表中使用群集,结果为275,即MaxNoOfConcurrentTransactions。

SELECT FOR UPDATE中的

LIMIT可能用于更新期间受影响的行数。

我不确定您的架构师是否可能根据MySQL文档使用了上图。

请查看下面的链接以获取更多信息。

https://dev.mysql.com/doc/refman/8.0/en/mysql-cluster-ndbd-definition.html#ndbparam-ndbd-maxnoofconcurrentoperations