问题标签 [database-concurrency]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2697 浏览

sql-server - SQL Server 意图锁是如何工作的?

我读过一些关于意图锁的文章,有很多意图锁,它们是意图共享 (IS)、意图独占 (IX)、与意图独占共享 (SIX)、意图更新 (IU)、共享意图更新 (SIU)、更新意图独占 (UIX)。有时我在锁统计信息中发现了这些锁,但我很难识别每个锁,因为有时会出现许多性能问题

意图锁实际用于什么?这些意图锁中的每一个如何在数据库并发中相互锁定?

谢谢你

0 投票
0 回答
52 浏览

django - 并发问题?与 django 服务器共享 settings.py 和 ORM 的独立 python 脚本对 DB 对象的视图不可靠?

我遇到了一个难以重现的奇怪问题(两天前一切正常,但从那时到现在的一段时间内不再起作用——在此期间没有任何变化!)

我有一个 django 服务器程序,我们通过 gunicorn 运行该程序,该程序具有多个工作子进程和一个单独的小型 REST Web 服务,它共享服务器程序的 settings.py 并作用于相同的 DB 对象。这个服务器程序的代码大致如下:

与 django 服务器程序共享相同 settings.py 的另一个程序(小型 REST Web 服务)如下所示:

正如我所提到的,几天前一切正常,然后当我今天再次尝试时,当我尝试使用它的“id”“get()”TestExecution 对象时,我在第二个程序中得到了一个 DoesNotExist。

0 投票
1 回答
26 浏览

sqlite - 事务是否确保不会发生脏读?

我最近读了很多书,现在我很困惑事务和锁定是如何工作的,以及它们是如何相互关联的。

使用 SQLite 时,想象以下流程:

  1. 开始 SQLite 事务
  2. 在 SQLite 连接上运行 select 语句以返回值
  3. 如果返回值满足条件,则转到步骤#4,否则转到步骤#5
  4. 做更新
  5. 提交 SQLite 事务

如果两个线程运行相同的代码,是否有可能在一个线程中获得所谓的“脏读”含义,在步骤 #3 和步骤 #4 之间,另一个线程可以运行更新(步骤 #4 )?

0 投票
1 回答
129 浏览

transactions - Django:在 select_for_update(nowait=True) 之后需要什么 len(queryset)

我正在通过一段遗留代码(Python2.6 和 Django1.3.3)来获取锁。后端是甲骨文。

参考引用的代码块。第 8 行需要 len(query set) 是什么?由于第 7 行的注释,我特别困惑。这一行在遍历查询集中的大量记录时非常耗时。我想知道在删除它之前有这条线的原因。

我将测试此代码并在此处更新。我将尝试不使用此行,并尝试将 len 替换为 .count() 方法。

0 投票
1 回答
30 浏览

mysql - 当网络如此缓慢时如何将相同的数据停止到数据库中

我使用以下代码接受regsiter来自客户端的呼叫

如果访问者的网络很好,这个功能会很好,但是如果访问者的网络很慢,没有足够的响应时间,它会向数据库中插入一些相同的数据,result.length总是===0,我该如何停止这个,任何想法?

0 投票
1 回答
6302 浏览

mongodb - MongoDB中的事务锁

我正在尝试开发一个预订系统,在检查其可用性后预订不同的资产。系统首先尝试从数据库中读取记录并检查被预订的插槽是否可用。如果是这样,系统通过将新记录插入系统来为他们预订插槽。

现在的问题是,如果有多个用户请求预订,并且由于对 db 的多个请求可以交错,这种情况就有可能发生。

为了避免这种情况,理想情况下我必须在读取操作开始之前获取集合级别的锁,并且只有在最终写入完成后才释放锁。

我的理解正确吗?如果是这样,这可以在 MongoDB 中完成吗?

非常欢迎使用 MongoDB、Mongoose 或@tsed/mongoose的任何解决方案。

0 投票
1 回答
473 浏览

postgresql - 基于 api 调用或单个应用程序到数据库连接的 PostgreSQL 最大连接数?

我正在使用 ElephantSQL 的小乌龟计划(5 个并发连接)。“并发连接”是指应用程序在应用程序启动时打开连接(我正在使用 Gorm so gorm.Open()),还是意味着基于每个查询?

我已经缩小了范围,在进行多个异步 API 调用时,有时会出现错误(pq: too many connections for role "x"),所以这让我认为罪魁祸首是一次太多的异步 API 调用。但是,我还读到它是基于应用程序连接的,例如gorm.Open()用于打开连接。

只是想澄清一下,以防我管理不善。还应该说我gorm.Open()在应用程序启动期间只使用过一次。

谢谢!

0 投票
1 回答
3013 浏览

multithreading - How to set different header for the group thread request in apache jmeter?

I want to test concurrency of application, I'm using apache Jmeter for that, the endpoint I'm requesting, needs to have authorization header for authentication, in apache Jmeter HTTP Header Manager i have added a header with the name Authorization with the token value, now lets say I have 5 number of threads (users), when the test runs all the 5 users request with the same authorization token, I want each thread to request with the different token, to simulate the different users and not multiple instances of one user, I hope the question makes sense, How can I make each thread request the api with different token? that is unique header value for each thread's request. Thanks love you guys.

0 投票
1 回答
183 浏览

php - 数据库锁和 Web 服务器如何在数据库会话方面协作?

这个问题的范围很广,例如 web 服务器、数据库服务器、php 应用程序等,因此我怀疑它是否属于 stackoverflow,但是由于这个问题将帮助我们如何编写应用程序代码,所以我决定问它这里。

我对数据库会话和 Web 服务器如何协同工作感到困惑。如果我是对的,当为客户端建立连接时,只会为该连接创建一个会话,并且该会话将持续到连接断开连接或由于长时间不活动而重新连接。

现在,如果我们考虑一个 Web 服务器,特别是 Apache 2.4 运行一个 PHP 7.2 应用程序(在虚拟主机中)和一个由 MariaDB 10.3.10 支持的数据库(如果这很重要的话,在 Fedora 28 上),我假设以下场景(请更正如果我错了,我):

  • 对于每个 Web 应用程序,现在我们使用 Laravel,只要第一个查询命中它所服务的 URL,就会建立一个数据库连接。
  • 随后,它将只有一个数据库会话。提供查询时,连接将保持活动状态,以供应用程序接收的其他查询重用。这意味着如果应用程序最有可能连续接收 24 x 7 的 Web 请求,连接也将保持活动状态,并且只有在我们重新启动 mysqld 或 httpd 时才会断开连接,这甚至可能在几个月内都不会发生。
  • 由于应用程序的所有用户,比如 20 个用户,使用相同的 Apache 服务器和 Laravel 应用程序文件(我假设我可以称之为应用程序实例)所有 20 个用户将通过相同的数据库连接提供服务和数据库会话。

如果上面提到的所有用例都是正确的,那么数据库锁定的概念似乎很混乱。假设我们会发布一个排他锁,例如lock tables t1 write;,它会阻塞其他会话的读写,以避免并发会话的脏读写操作。但是,由于所有 20 个用户同时使用相同的会话和连接,我们将无法从数据库锁定机制中获得所需的并发安全性。

问题:

  1. 数据库锁定、显式排他锁定在 Web 应用程序中如何工作?
  2. Laravel 应用程序收到的每个 Web 请求都会创建一个新的连接和会话,还是只重用一个连接和会话?
  3. 每个数据库连接一次是否只有一个会话?
  4. 此命令会显示当前活动会话或连接show status wherevariable_name= 'Threads_connected'吗?如果它显示当前活动连接,我们如何获得当前活动的数据库会话?
0 投票
2 回答
538 浏览

mysql - MySQL查询同步/锁定问题

我有一个快速的问题,我似乎无法在网上找到,不确定我是否使用了正确的措辞。

MySql 数据库是否自动同步查询或同时进入?例如,如果我发送查询以向数据库插入某些内容,同时另一个连接发送查询以从数据库中选择某些内容,MySQL 是否会在插入发生时自动锁定数据库,然后在完成时解锁允许选择查询来访问它?谢谢