【问题标题】:Select query on MYSQL table taking long time and getting timed out在 MYSQL 表上选择查询需要很长时间并超时
【发布时间】:2020-11-18 10:58:53
【问题描述】:

我有一个包含 200 万行的 mysql 表,当我在表上运行任何选择查询时,它需要很长时间才能执行并且最终它不会返回任何结果。

我已经尝试从 Mysql Workbench 和终端运行选择查询,这是同样的问题。

下表是:

`object_master` 
  `key` varchar(300) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `bucket` varchar(255) DEFAULT NULL,
  `object_name` varchar(300) DEFAULT NULL,
  `object_type` varchar(50) DEFAULT NULL,
  `last_modified_date` datetime DEFAULT NULL,
  `last_accessed_date` datetime DEFAULT NULL,
  `is_deleted` tinyint(1) DEFAULT '0',
  `p_object` varchar(300) DEFAULT NULL,
  `record_insert_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `record_update_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`key`)
ENGINE=InnoDB DEFAULT CHARSET=latin1

下面是我正在运行的选择查询:

select `key` from object_master;

即使使用limit 1 也需要很长时间并且没有返回结果,它会超时:

select `key` from object_master limit 1;

谁能告诉我这里的真正原因是什么?

另外我想提一下:在我运行这些选择查询之前,在这个表上执行了一个 alter table 语句,它在 10 分钟后超时并且表保持不变。

下面是alter语句:

alter table object_master
modify column object_name varchar(1096) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;

注意:使用 MYSQL 版本 5.7.24 和在 Linux Docker 容器上运行的 Mysql。

【问题讨论】:

  • 只是那张桌子吗? SELECT 1 FROM dual; 是否返回一行?可能是任何事情,从您的桌子上未释放的锁到网络问题
  • keymysql dev.mysql.com/doc/refman/8.0/en/… 的保留字...你不能通过键命名任何列。
  • @ash:你可以如果你在它周围加上刻度,就像 OP 所做的那样。但你是对的,你可能不应该,因为它只会让处理它变得比它需要的更难。
  • @all:我解决了这个问题。有一个 Java 批处理程序在同一个表上执行了很长时间的查询并持有该表的锁。我通过 information_schema 的“processlist”表找到了这个。不得不通过终端终止长时间运行的查询。然后它释放了对该表的锁定,一切都得到了解决。

标签: mysql sql mysql-workbench


【解决方案1】:

所以我解决了这个问题:

有一个 Java 批处理程序在同一个表上执行了很长时间的查询并持有该表的锁。我是通过 information_schema 的“processlist”表找到的。

不得不通过终端终止长时间运行的查询:

mysql> kill <processlist_id> ; 

然后它释放了对该表的锁定,一切都解决了。

从以下 SO 答案中获得帮助:

  1. Unlocking tables if thread is lost
  2. How do I find which transaction is causing a "Waiting for table metadata lock" state?

【讨论】:

    猜你喜欢
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    相关资源
    最近更新 更多