我有一个mysql错误,直到现在才在互联网上找到答案:“等待锁定由于挂起的独占锁定而中止” 我在同一时间有很多交易。这些基于innodb表,有一些触发器。这些触发器读写其他innodb和myisam表。 我知道什么是“等待锁定”,但我没有足够的关于“独占锁定”的信息。我该怎么做才能终止此错误,因为这些事务没有完成,也没有更新此表中的行。
我有一个Windows Server 2012 R2 Standard和一个MySQL 5.6.15。数据库位于SSD驱动器上,日志位于简单的HDD上。
这是我的ini文件:
[mysqld]
port=3306
basedir="C:/MySQL/mysql-5.6.15-winx64/"
datadir="C:/DB/myCustomer/data"
innodb_data_home_dir="C:/DB/myCustomer/innodb/"
log-bin = "E:/Log/mysqldblog/myCustomer/mysql-bin/log"
log-error = "E:/Log/mysqldblog/myCustomer/errorlog/error"
tmpdir ="E:/MySQLTEMP/"
innodb_buffer_pool_size=1024M
join_buffer_size = 4M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
innodb_log_buffer_size = 4M
innodb_flush_log_at_trx_commit=1
max_allowed_packet = 100M
tmp_table_size=64M
max_heap_table_size=64M
innodb_log_file_size = 256M
innodb_thread_concurrency = 16
federated=1
default-storage-engine=INNODB
event-scheduler = ON
max_sp_recursion_depth = 50
character-set-server=utf8
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
binlog_format=mixed
transaction-isolation = READ-COMMITTED
log-warnings = 0
如果有人能帮我解决这个问题,我会说。 谢谢你的到来。
亲切的问候, 安德拉什答案 0 :(得分:0)
MySQL glossary中描述了独占锁:
一种阻止任何其他事务锁定同一行的锁。根据事务隔离级别,这种锁可能会阻止其他事务写入同一行,或者也可能阻止其他事务读取同一行。默认的InnoDB隔离级别REPEATABLE READ通过允许事务读取具有独占锁的行来实现更高的并发性,这种技术称为一致读取。
我们无法告诉您如何避免特定的错误实例,我们只能提供有关如何调试它的一般指导以及MySQL设置可以帮助您降低接收此类错误的风险。具体的解决方案可能需要重组您的数据,或更改应用程序逻辑,甚至升级您的hw - 您必须拨打电话。
要调试错误,请使用SHOW ENGINE INNODB STATUS语句(来自MySQL v5.7.4,而不是使用innodb information_schema tables,但问题适用于v5.6。)
在LATEST DETECTED DEADLOCK
部分下,您将找到有关导致死锁的事务和语句的信息。
在众多MySQL设置中,innodb_lock_wait_timeout对这类错误的影响最为直接,因为您可以给MySQL留出更多时间等待情况得到解决。但是,您需要小心,因为增加此超时设置可能会导致应用程序速度变慢,并且可能只是掩盖应用程序所面临的问题。