标签: database-deadlocks

Mysql事务等待锁已经被授予..这导致死锁

如果下面的情况是mysql中的一个bug?

Mysql版本:mysql.x86_64 5.0.77-4.el5_4.1

内核:Linux box2 2.6.18-128.el5#1 SMP Wed Jan 21 10:41:14 EST 2009 x86_64 x86_64 x86_64 GNU/Linux

------------------------
LATEST DETECTED DEADLOCK
------------------------
100125  4:24:41
*** (1) TRANSACTION:
TRANSACTION 0 210510625, ACTIVE 155 sec, process no 28125, OS thread id 1243162944 starting index read
mysql tables in use 1, locked 1
LOCK WAIT 5 lock struct(s), heap size 1216, undo log entries 1
MySQL thread id 162928579, query id 527252744 box22 172.16.11.105 user updating
delete from user_grid_items where user_id = 669786974 …
Run Code Online (Sandbox Code Playgroud)

mysql deadlock database-deadlocks

10
推荐指数
2
解决办法
3155
查看次数

如何正确处理Java/JDBC中的InnoDB死锁?

我在这里从理论上讲,我想确保我的所有基础都被覆盖.

我已经阅读了很多关于使用Java的InnoDB以及无论您运行什么查询都会发生死锁的情况.虽然我对理论和最佳实践非常了解,但我对如何在发生死锁时实现重新发布事务的catch all机制几乎一无所知.

是否有特定的例外来听取意见?我只是在我打电话后抛出异常,connection.commit()或者一旦我执行了它就会发生PreparedStatement吗?事情是否应该循环运行,并且限制循环运行的次数?

我基本上只需要一个简单的Java代码示例,说明如何处理这个问题.因为我不确定在哪些因素,例如,我是否重新实例化PreparedStatement对象或先关闭它们等等,这一切都非常令人困惑.同去的ResultSet对象了.

编辑:我应该提到我正在处理事务,将自动提交设置为0等.

编辑2:我是否使用这个伪代码在正确的轨道上?我没有线索

do
{
    deadlock = false

    try
    {
        // auto commit = 0
        // select query
        // update query
        // delete query
        // commit transaction
    }
    catch (DeadLockSpecificException e)
    {
        deadlock = true
    }
    finally
    {
        // close resources? statement.close(), resultset.close() etc?
        // or do I reuse them somehow and close them after the do/while loop?
        // this stuff confuses me a lot too …
Run Code Online (Sandbox Code Playgroud)

java mysql deadlock innodb database-deadlocks

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

postgres日志文件中的"元组(0,79)"是什么意思发生了死锁?

在postgres日志中:

2016-12-23 15:28:14 +07 [17281-351 trns: 4280939, vtrns: 3/20] postgres@deadlocks HINT:  See server log for query details.
2016-12-23 15:28:14 +07 [17281-352 trns: 4280939, vtrns: 3/20] postgres@deadlocks CONTEXT:  while locking tuple (0,79) in relation "account"
2016-12-23 15:28:14 +07 [17281-353 trns: 4280939, vtrns: 3/20] postgres@deadlocks STATEMENT:  SELECT id FROM account where id=$1 for update;
Run Code Online (Sandbox Code Playgroud)

当我挑起僵局时,我可以看到文字:tuple (0,79).

据我所知,元组只是表中的几行.但我不明白是什么(0,79)意思.我在表帐户中只有2行,它只是游戏和自学应用程序.

(0,79)意味着什么呢?

postgresql deadlock database-deadlocks

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

如何识别SQL Azure中的死锁?

我有一个Windows Azure角色,包含两个实例.偶尔,事务将失败并SqlException带有以下文本

事务(进程ID N)在锁资源上与另一个进程死锁,并被选为死锁牺牲品.重新运行该交易.

现在我已经用Google搜索了一段时间,并阅读了有关使用SQL Server日志识别死锁的帖子.

问题是...

我如何在SQL Azure中执行此操作?我可以使用哪些工具来访问SQL Azure的内部并获取足够的数据?

sql-server deadlock azure database-deadlocks azure-sql-database

9
推荐指数
2
解决办法
7978
查看次数

如何在Sql Server 2008上终止/终止所有正在运行的进程

在主数据库上执行此查询后,它在所有数据库上给我所有正在运行的进程,是否有任何查询将终止在数据库上运行的所有进程.

USE
Master
GO

SELECT
SPID,DBID FROM SYSPROCESSES
WHERE
DBID NOT IN (1,2,3,4) AND SPID >50 AND SPID<> @@spid   
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 database-deadlocks

9
推荐指数
1
解决办法
6万
查看次数

Magento陷入僵局

我正在使用Magento 1.7.0.2社区版,我遇到了一个大问题 - 死锁和"锁定等待超时超时"错误.执行特定CRON任务时 存在问题

  • 导入/更新产品(尺寸,颜色,制造商).大约有5000个产品,但在90%的脚本中会出现"超出锁定等待超时"错误或死锁错误.脚本是使用Magento指南开发的,如果没有其他进程正在运行,它可以正常工作.例如,如果reindex正在运行,我们肯定会收到错误.由于表锁而导致接缝
  • 在某些情况下,Magento会设置读锁定功能.我已经阅读了几个关于这个的主题,并且唯一合适的解决方案是改变/lib/Zend/Db/Statement/Pdo.php _execute函数.由于我们期待将Magento升级到最新的稳定版本,我们无法承受不断变化的核心文件.

所以我的问题 - 有没有办法如何避免这种情况(无论是在PHP,MySQL还是服务器(我们使用nginx)级别)?

magento database-deadlocks

9
推荐指数
1
解决办法
1万
查看次数

如何在PostgreSQL中模拟死锁?

我是PostgreSQL的新手.我想为这个时间表模拟死锁: 在此输入图像描述

如何在PostgreSQL中模拟死锁?有可能吗?如何锁定特定列?
编辑:

    BEGIN;
UPDATE deadlock_demonstration
SET salary1=(SELECT salary1 
FROM deadlock_demonstration
WHERE worker_id = 1 
FOR UPDATE)+100
WHERE worker_id=1;
SELECT pg_sleep(5);
commit;
SELECT salary2 FROM deadlock_demonstration WHERE worker_id = 1 FOR UPDATE;
Run Code Online (Sandbox Code Playgroud)

在另一个屏幕中,我已经运行了这个

    BEGIN;
UPDATE deadlock_demonstration
SET salary2=(SELECT salary1 
FROM deadlock_demonstration
WHERE worker_id = 1
FOR UPDATE)+200
WHERE worker_id=1;
SELECT pg_sleep(5);
commit;
SELECT salary1 FROM deadlock_demonstration WHERE worker_id = 1 FOR UPDATE;
Run Code Online (Sandbox Code Playgroud)

为什么没有发生死锁?你能给出一个建议,我应该改变什么来刺激僵局?

postgresql concurrency deadlock database-deadlocks

9
推荐指数
1
解决办法
4820
查看次数

在 PostgreSQL 中 DROPping 时避免对引用表的独占访问锁

为什么删除 PostgreSQL 中的表需要ACCESS EXCLUSIVE锁定任何引用的表?如何将其减少到ACCESS SHARED锁定或根本不锁定?即有没有办法在不锁定引用表的情况下删除关系?

我在文档中找不到任何关于需要哪些锁的提及,但是除非我在并发操作期间删除多个表时以正确的顺序明确获取锁,否则我可以看到死锁在日志中等待 AccessExclusiveLock,并获取此限制当表被删除时,对常用表的锁定会导致其他进程的暂时延迟。

澄清,

CREATE TABLE base (
    id SERIAL,
    PRIMARY KEY (id)
);
CREATE TABLE main (
    id SERIAL,
    base_id INT,
    PRIMARY KEY (id),
    CONSTRAINT fk_main_base (base_id)
        REFERENCES base (id)
        ON DELETE CASCADE ON UPDATE CASCADE
);
DROP TABLE main; -- why does this need to lock base?
Run Code Online (Sandbox Code Playgroud)

postgresql drop-table database-deadlocks

9
推荐指数
1
解决办法
3243
查看次数

在MySQL Hibernate JPA事务期间未检测到死锁

警告!!!TL; DR

MySQL 5.6.39  
mysql:mysql-connector-java:5.1.27
org.hibernate.common:hibernate-commons-annotations:4.0.5.Final  
org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final  
org.hibernate:hibernate-core:4.3.6.Final
org.hibernate:hibernate-entitymanager:4.3.6.Final  
org.hibernate:hibernate-validator:5.0.3.Final
Run Code Online (Sandbox Code Playgroud)

HTTP方法:POST,API路径:/ reader

实体“ 读者 ”引擎:innoDB

id
name
total_pages_read
Run Code Online (Sandbox Code Playgroud)

类映射:

@Entity
@Table(name = "reader")
public class Reader{
    @Column(name = "id")
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "total_pages_read")
    private Long total_pages_read;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "reader", orphanRemoval = true)
    private Set<Book_read> book_reads;

    ...
}
Run Code Online (Sandbox Code Playgroud)

我在Reader写入服务类中使用方法createEntity()和recalculateTotalPageRead():

@Service
public class ReaderWritePlatformServiceJpaRepositoryImpl{
    private final ReaderRepositoryWrapper readerRepositoryWrapper;

    ...

    @Transactional
    public Long createEntity(final Long id, final String name, final …
Run Code Online (Sandbox Code Playgroud)

java mysql hibernate jpa database-deadlocks

9
推荐指数
1
解决办法
287
查看次数

SQL Server死锁修复:强制连接顺序,还是自动重试?

我有执行连接的一个存储过程TableBTableA:

 SELECT <--- Nested <--- TableA
             Loop   <--
                      |
                      ---TableB
Run Code Online (Sandbox Code Playgroud)

同时,在事务中,行插入TableA,然后插入TableB.

这种情况偶尔会导致死锁,因为存储过程选择从TableB中获取行,而insert将行添加到TableA,然后每个都希望另一个放弃另一个表:

INSERT     SELECT
=========  ========
Lock A     Lock B
Insert A   Select B
Want B     Want A
....deadlock...
Run Code Online (Sandbox Code Playgroud)

逻辑要求INSERT首先向A添加行,然后向B添加行,而我个人并不关心SQL Server执行其连接的顺序 - 只要它加入.

修复死锁的一般建议是确保每个人以相同的顺序访问资源.但在这种情况下,SQL Server的优化器告诉我相反的顺序是"更好".我可以强制执行另一个连接顺序,并且查询效果更差.

但是我应该吗?

我应该使用我希望它使用的连接顺序现在和永远覆盖优化器吗?

或者我应该只是捕获错误本机错误1205,并重新提交select语句?

问题不是当我覆盖优化器并且它做非理想的事情时,查询可能会执行多么糟糕.问题是:自动重试是否更好,而不是运行更糟糕的查询?

sql-server error-handling deadlock sql-server-2000 database-deadlocks

8
推荐指数
2
解决办法
8846
查看次数