标签: table-lock

运行多个delayed_job的Rails - 锁定表

嘿.我使用delayed_job进行后台处理.我有8个CPU服务器,MySQL和我启动7个delayed_job进程

RAILS_ENV=production script/delayed_job -n 7 start 
Run Code Online (Sandbox Code Playgroud)

Q1: 我想知道是否有可能2个或更多个delayed_job进程开始处理相同的进程(数据库delayed_jobs中的相同记录行).我检查了delayed_job插件的代码但是找不到它应该的方式的锁定指令(没有锁定表或SELECT ... FOR UPDATE).

我认为每个进程都应该在lock_by列上执行UPDATE之前锁定数据库表.他们只需更新locked_by字段即可锁定记录(UPDATE delayed_jobs SET locked_by ...).真的够了吗?不需要锁定?为什么?我知道UPDATE的优先级高于SELECT,但我认为这在这种情况下没有效果.

我对多线程情况的理解是:

Process1: Get waiting job X. [OK]
Process2: Get waiting jobs X. [OK]
Process1: Update locked_by field. [OK]
Process2: Update locked_by field. [OK]
Process1: Get waiting job X. [Already processed]
Process2: Get waiting jobs X. [Already processed]
Run Code Online (Sandbox Code Playgroud)

我认为在某些情况下,更多的工作可以获得相同的信息,并可以开始处理相同的过程.

Q2: 对于8CPU服务器,7个delayed_jobs是否是一个好的数字?为什么是/否.

这是10倍!

multithreading ruby-on-rails table-lock delayed-job table-locking

10
推荐指数
1
解决办法
4368
查看次数

TABLOCKX无法正常工作

我正在玩我的SQL Server 2012试图抓住锁.根据我看到的教程,我尝试测试获取表上的独占锁,以便其他任何查询都无法从中读取信息,直到事务未结束,但它只是不起作用.即使它在视频中工作,这是我在第一个窗口中的查询:

use TSQL2012

BEGIN transaction

update tele with (TABLOCKX, holdlock) 
set cor = '12'

waitfor delay '00:05'
go
Run Code Online (Sandbox Code Playgroud)

然后在第二个查询窗口中我尝试了:

select * from tele
Run Code Online (Sandbox Code Playgroud)

它工作得很好,虽然理论上应该有"排他性"锁定防止这种情况.为什么会这样?我也尝试过

set transaction isolation level serializable on
Run Code Online (Sandbox Code Playgroud)

并且没有延迟但选择总是成功的.有任何想法吗?

sql-server table-lock sql-server-2012

5
推荐指数
1
解决办法
533
查看次数

即使在处理'select'查询时,myisam也会将表锁定在表上?

我正在读这本书High Performance MySQL,它提到:

performing one query per table uses table locks more efficiently: the queries 
will lock the tables invididually and relatively briefly, instead of locking 
them all for a longer time.
Run Code Online (Sandbox Code Playgroud)

selecting什么东西,MyISAM放置表锁?有人可以解释一下吗?

mysql myisam table-lock

4
推荐指数
1
解决办法
4788
查看次数

Oracle索引 - 全表扫描/锁定

在这里找到:

通常,考虑在以下任何一种情况下在列上创建索引:

  • 索引的一列或多列上存在参照完整性约束.索引是一种避免全表锁定的方法,如果更新父表主键,合并到父表或从父表中删除,则需要使用该表.

我不明白为什么在这种情况下会发生全表锁.我想如果我试图删除/更新父表中的主键,那么将对子表执行全表扫描.

锁从哪里来?

oracle indexing table-lock full-table-scan

2
推荐指数
1
解决办法
1403
查看次数

锁定 postgresql 表

是否可以通过 shell 脚本或 sql 文件运行 psql 命令来将 PostgreSQL 数据库中的表锁定指定时间?

如果我们运行 LOCK TABLE 命令,当脚本退出时锁也将消失,所以这还不够。

database postgresql locking table-lock psql

2
推荐指数
1
解决办法
1369
查看次数

Mysql语法帮助

查询:

select t1.col1
  from table1 t1
inner join with (nolock) table2 t2 on t1.col2 = t2.col1
Run Code Online (Sandbox Code Playgroud)

我试图在mySQL数据库中使用nolock选项进行优化查询,但由于某种原因上述查询不起作用,我收到的错误是

您的SQL语法有错误;

有什么想法吗?

mysql sql table-lock mysql-error-1064

0
推荐指数
1
解决办法
205
查看次数