在MYSQL表上选择耗时长且超时的查询



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

我已经尝试过从Mysql工作台和终端运行select查询,这是同样的问题。

下表:

`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 table object_master
modify column object_name varchar(1096) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;

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

所以我解决了这个问题:

有一个Java批处理程序在同一个表上执行查询很长一段时间,并在表上持有一个锁。我是通过";进程列表";信息表_方案。

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

mysql> kill <processlist_id> ; 

然后它松开了那张桌子上的锁,一切都解决了。

从下面得到帮助SO答案:

  1. 如果线程丢失则解锁表
  2. 我如何找到哪个交易正在引起";等待表元数据锁定";州

最新更新