在Mysql (Amazon RDS)上,当我尝试运行以下SQL查询
UPDATE
table1 INNER JOIN table2 USING (CommonColumn)
SET
table1.col1 = table2.x,
table1.col2 = table2.y
我一直在大约52秒后得到这个错误:
Error Code: 1205. Lock wait timeout exceeded; try restarting transaction
我该如何解决这个问题?
table2有大约1700万条记录,table2是table1的子集,有400万条记录。可能是表的大小是问题还是我的查询有问题?
如果您使用的是InnoDB引擎,请尝试增加IO线程的默认数量。RDS默认值为可怜的4。您需要重新启动DB实例,以便Parameter Group使用新值,因为它们不是"动态的"(需要重新启动)。
show variables like 'innodb_%io_threads';
+-------------------------+-------+
| Variable_name | Value |
+-------------------------+-------+
| innodb_read_io_threads | 4 |
| innodb_write_io_threads | 4 |
+-------------------------+-------+
在AWS RDS上,我有一个DB实例被填满了,这导致了客户端的这个错误。
我重新启动MySQL实例,相同的查询工作