嘿.我使用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
我正在玩我的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)
并且没有延迟但选择总是成功的.有任何想法吗?
我正在读这本书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放置表锁?有人可以解释一下吗?
在这里找到:
通常,考虑在以下任何一种情况下在列上创建索引:
我不明白为什么在这种情况下会发生全表锁.我想如果我试图删除/更新父表中的主键,那么将对子表执行全表扫描.
锁从哪里来?
是否可以通过 shell 脚本或 sql 文件运行 psql 命令来将 PostgreSQL 数据库中的表锁定指定时间?
如果我们运行 LOCK TABLE 命令,当脚本退出时锁也将消失,所以这还不够。
查询:
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语法有错误;
有什么想法吗?
table-lock ×6
mysql ×2
database ×1
delayed-job ×1
indexing ×1
locking ×1
myisam ×1
oracle ×1
postgresql ×1
psql ×1
sql ×1
sql-server ×1