AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-5660

Alan's questions

Martin Hope
Alan
Asked: 2012-06-01 17:33:17 +0800 CST

随机写入冻结

  • 3

我有一个 MySQL 5.5.23 数据库,它执行大约 3k qps,其中 5% 是写入。最近,我遇到了随机写入冻结的大问题。一切都进行得很顺利,然后突然间任何写入都停止在“更新”或“正在更新”状态。他们在这种状态下停留大约一两分钟,然后终于完成。问题是连接数量如此之多,当它们像这样随机冻结时,连接保持打开状态,然后我不可避免地会遇到太多连接错误。

在 INSERT 和 UPDATE 查询期间,它发生在所有表上。

有没有人见过这个?有什么可以做的吗?

我将 Amazon RDS 与他们提供的最大实例一起使用。我非常乐意提供你们需要的任何信息,请告诉我那是什么。

更新:我要插入的主表是:

CREATE TABLE `mytable` (
 `hash` varchar(5) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
 `name` varchar(256) DEFAULT NULL,
 `ip` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
 `deletehash` char(15) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
 `datetime` datetime NOT NULL,
 `api_key` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_cs DEFAULT NULL,
 `account_id` int(10) unsigned DEFAULT NULL,
 `type` varchar(15) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
 `width` int(10) unsigned NOT NULL DEFAULT '0',
 `height` int(10) unsigned NOT NULL DEFAULT '0',
 `size` int(10) unsigned NOT NULL DEFAULT '0',
 `animated` tinyint(1) NOT NULL DEFAULT '0',
 `views` int(10) unsigned NOT NULL DEFAULT '0',
 `lastviewed` datetime NOT NULL,
 PRIMARY KEY (`hash`),
 UNIQUE KEY `deletehash` (`deletehash`),
 KEY `datetime` (`datetime`),
 KEY `account_id` (`account_id`),
 KEY `ip` (`ip`),
 KEY `api_key` (`api_key`),
 KEY `views` (`views`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

样本插入:

insert into mytable (hash, name, ip, deletehashe, datetime, api_key, account_id, type, width, height, size, animated, views, lastviewed) values('abcde', 'file name', '127.0.0.1', 'abcdefghijklmn', '2012-05-31 00:00:00', NULL, NULL, 'mime/type', 0, 0, 0, 0, 0, '0000-00-00 00:00:00');

示例更新:

update mytable set views = views+1, lastviewed = NOW() where hash = 'abcde';

“更新中”

mysql amazon-rds
  • 1 个回答
  • 832 Views
Martin Hope
Alan
Asked: 2012-01-08 18:07:54 +0800 CST

并发 MySQL 更新与 InnoDB 挂起(在 Amazon RDS 上)

  • 7

我遇到了一个问题,即同时执行多个 MySQL 更新将锁定并需要几分钟才能完成。我正在使用 InnoDB,所以我很困惑为什么会发生这种情况,因为每次更新只更新 1 行。我还使用了一个 m2.4xlarge RDS 实例(它们是最大的)。

卡住更新

这就是我正在做的事情:我有一个包含大约 100M 行的表,其中“视图”是一列(已编入索引),我想更新大约 1M 行的视图。在几个不同的服务器上,我有一个这样的循环,其中每个服务器都有自己的一组要更新的行(伪代码):

mysql("set autocommit=0");
mysql("start transaction");

foreach($rows as $row) {
    mysql("update table set views=views+1 where id=$row[id]");
}

mysql("commit");

这将遍历所有需要更新的行。当服务器数量很少时(例如 4 台左右),它可以完美运行,但是当它增加到 10 台以上时,更新开始同时处于“正在更新”状态。没有什么说它正在等待锁定,它只是“更新”。这发生了大约 5 分钟,它最终将进行更新并继续循环并最终再次发生。

我不是在寻找其他方法来进行更新。拥有像 tmp 表和

update table,tmp_table set table.views = table.views+tmp_table.views where
  table.id = tmp_table.id

锁定所有正在更新的行,直到它们全部完成(可能是几个小时),这对我不起作用。他们必须在这些可怕的循环中。

我想知道为什么他们会陷入“更新”状态,以及我能做些什么来防止它。

tldr; 拥有 10 多个“更新”循环最终将同时锁定所有正在完成的更新,原因不明,直到他们决定最终进行更新并继续通过循环,只是为了它在几秒钟后再次发生。

显示变量:http : //pastebin.com/NdmAeJrz

显示引擎 INNODB 状态: http: //pastebin.com/Ubwu4F1h

mysql innodb
  • 3 个回答
  • 11816 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve