- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我们有一个(当前为 InnoDB)表,其中包含大约 500,000 行。这表示要运行的任务队列。它存储在 MySQL 数据库中。
在持续的基础上,至少每秒一次但有时更频繁,我们从中选择数据并随后更新一些行。每天一次,我们从表中删除旧行。
我们开始在表上出现死锁,这使我们的任务处理陷入停顿。这些死锁是在夜间修剪运行期间造成的。 DELETE、SELECT 和 UPDATE 的组合意味着基本上不会发生任何有成效的事情。不幸的是,我没有 SHOW ENGINE INNODB STATUS 的输出。
我想知道处理这个问题的最佳选择。请注意,我们的代码检测到死锁并重新发出查询。此外,我们很久以前就发现,一次删除所有匹配的行对一个有大量事件的数据库表来说太费力了,所以我们将一次删除限制为 10,000 行,并继续重新发出查询,直到所有必要的行都被删除修剪。
我看到了以下选项,想知道哪些是最好的,或者对其他选项的建议:
最佳答案
执行 DML
时操作,InnoDB
锁定所有扫描的、不匹配的行。
考虑这个表格布局:
DROP TABLE t_tran;
CREATE TABLE t_tran (id INT NOT NULL PRIMARY KEY, data INT NOT NULL, KEY ix_tran_data (data)) Engine=InnoDB;
DROP TABLE t_tran;
CREATE TABLE t_tran (id INT NOT NULL PRIMARY KEY, data INT NOT NULL, KEY ix_tran_data (data)) Engine=InnoDB;
INSERT
INTO t_tran
VALUES
(1, 1),
(2, 2),
(3, 3),
(4, 4),
(5, 5),
(6, 6),
(7, 7),
(8, 8);
START TRANSACTION;
DELETE
FROM t_tran
WHERE data = 2
AND id <= 5;
在这种情况下,MySQL
选择RANGE
id
上的访问路径, 它认为比 REF
便宜在 data
.
在并发事务中,您将能够删除或更新行 6
, 7
, 8
但不是行 1
至5
因为它们被锁定(尽管只有行 2
受到影响)。
如果您删除 id <= 5
根据上述条件,您将能够删除除行 3
之外的任何行.
很遗憾,您无法控制 MySQL
DML
中的访问路径操作。
您能做的最好的事情就是正确索引您的条件并希望 MySQL
将选择这些索引。
关于mysql - MySQL 删除行的死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1306896/
我有类似下面的代码: ... id: myComponent signal updateState() property variant modelList: [] Repeater { mo
我正在处理一些我无法展示的私有(private)代码,但我已经制作了一些示例代码来描述我的问题: 主.c: #include #include #include #include typede
这个问题在这里已经有了答案: 关闭10 年前。 Possible Duplicate: what are the differences in die() and exit() in PHP? 我想
在编写 Perl 模块时,在模块内部使用 croak/die 是一个好习惯吗? 毕竟,如果调用者不使用 eval block ,模块可能会使调用它的程序崩溃。 在这些情况下,最佳做法是什么? 最佳答案
我有一些搜索线程正在存储结果。我知道当线程启动时,JVM native 代码会代理在操作系统上创建新 native 线程的请求。这需要 JVM 之外的一些内存。当线程终止并且我保留对它的引用并将其用作
我刚刚花了很多时间调试一个我追溯到 wantarray() 的问题。 .我已将其提炼为这个测试用例。 (忽略 $! 在这种情况下不会有任何有用信息的事实)。我想知道为什么wantarray在第二个示例
我看到一些代码是这样做的: if(something){ echo 'exit from program'; die; } ...more code 和其他只使用 die 的人: if
我正在尝试将此表格用于: 如果任何 $_POST 变量等于任何其他 $_POST 变量抛出错误。 如果只有几个,那不是问题,但我有大约 20 个左右所以如果我想这样做,我将不得不像这样 但这
每次我运行: hadoop dfsadmin -report 我得到以下输出: Configured Capacity: 0 (0 KB) Present Capacity: 0 (0 KB) DFS
我是一名优秀的程序员,十分优秀!