mysql - MySQL 5.7 上的元数据锁,找不到锁定进程?

标签 mysql

所以我有一个 python 服务器(当前处于休眠状态)连接到 MySQL 数据库。我转到 phpMyAdmin 并尝试截断“工具”表,它是“组织”数据库的一部分。但它不起作用。问题是,我似乎无法找到实际锁定它的查询。

mysql> show full processlist;
+-----+------+-----------+----------+---------+------+---------------------------------+------------------------+
| Id  | User | Host      | db       | Command | Time | State                           | Info                   |
+-----+------+-----------+----------+---------+------+---------------------------------+------------------------+
| 175 | user | localhost | organize | Sleep   | 1235 |                                 | NULL                   |
| 244 | user | localhost | NULL     | Query   |    0 | starting                        | show full processlist  |
| 307 | user | localhost | organize | Query   |  272 | Waiting for table metadata lock | TRUNCATE TABLE `tools` |
| 308 | user | localhost | NULL     | Sleep   |  272 |                                 | NULL                   |
+-----+------+-----------+----------+---------+------+---------------------------------+------------------------+
4 rows in set (0.00 sec)

mysql>

SHOW ENGINE INNODB STATUS 给出以下内容:

mysql> SHOW ENGINE INNODB STATUS;
---------------------------------------------------------------------------+
| InnoDB |      |
=====================================
2017-03-16 14:18:08 0x7fa0da508700 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 6 seconds
-----------------
BACKGROUND THREAD
-----------------
srv_master_thread loops: 46 srv_active, 0 srv_shutdown, 4115 srv_idle
srv_master_thread log flush and writes: 4161
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 2
OS WAIT ARRAY INFO: signal count 2
RW-shared spins 0, rounds 4, OS waits 2
RW-excl spins 0, rounds 0, OS waits 0
RW-sx spins 0, rounds 0, OS waits 0
Spin rounds per wait: 4.00 RW-shared, 0.00 RW-excl, 0.00 RW-sx
------------
TRANSACTIONS
------------
Trx id counter 5384
Purge done for trx's n:o < 0 undo n:o < 0 state: running but idle
History list length 0
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 421804127426384, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
--------
FILE I/O
--------
I/O thread 0 state: waiting for completed aio requests (insert buffer thread)
I/O thread 1 state: waiting for completed aio requests (log thread)
I/O thread 2 state: waiting for completed aio requests (read thread)
I/O thread 3 state: waiting for completed aio requests (read thread)
I/O thread 4 state: waiting for completed aio requests (read thread)
I/O thread 5 state: waiting for completed aio requests (read thread)
I/O thread 6 state: waiting for completed aio requests (write thread)
I/O thread 7 state: waiting for completed aio requests (write thread)
I/O thread 8 state: waiting for completed aio requests (write thread)
I/O thread 9 state: waiting for completed aio requests (write thread)
Pending normal aio reads: [0, 0, 0, 0] , aio writes: [0, 0, 0, 0] ,
 ibuf aio reads:, log i/o's:, sync i/o's:
Pending flushes (fsync) log: 0; buffer pool: 0
229 OS file reads, 390 OS file writes, 13 OS fsyncs
0.00 reads/s, 0 avg bytes/read, 0.00 writes/s, 0.00 fsyncs/s
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 0 merges
merged operations:
 insert 0, delete mark 0, delete 0
discarded operations:
 insert 0, delete mark 0, delete 0
Hash table size 69257, node heap has 0 buffer(s)
Hash table size 69257, node heap has 0 buffer(s)
Hash table size 69257, node heap has 0 buffer(s)
Hash table size 69257, node heap has 0 buffer(s)
Hash table size 69257, node heap has 0 buffer(s)
Hash table size 69257, node heap has 0 buffer(s)
Hash table size 69257, node heap has 0 buffer(s)
Hash table size 69257, node heap has 0 buffer(s)
0.00 hash searches/s, 0.00 non-hash searches/s
---
LOG
---
Log sequence number 2232766
Log flushed up to   2232766
Pages flushed up to 2232766
Last checkpoint at  2232757
0 pending log flushes, 0 pending chkp writes
10 log i/o's done, 0.00 log i/o's/second
----------------------
BUFFER POOL AND MEMORY
----------------------
Total large memory allocated 274857984
Dictionary memory allocated 317906
Buffer pool size   16384
Free buffers       16129
Database pages     255
Old database pages 0
Modified db pages  0
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 0, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 203, created 52, written 370
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
No buffer pool page gets since the last printout
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 255, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
--------------
ROW OPERATIONS
--------------
0 queries inside InnoDB, 0 queries in queue
0 read views open inside InnoDB
Process ID=25594, Main thread ID=140328678156032, state: sleeping
Number of rows inserted 2782, updated 0, deleted 0, read 2792
0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s
----------------------------
END OF INNODB MONITOR OUTPUT
============================

查看 performance_schema.meta_locks 会得到:

mysql> select * from metadata_locks;
+-------------+--------------------+------------------+-----------------------+---------------------+---------------+-------------+-------------------+-----------------+----------------+
| OBJECT_TYPE | OBJECT_SCHEMA      | OBJECT_NAME      | OBJECT_INSTANCE_BEGIN | LOCK_TYPE           | LOCK_DURATION | LOCK_STATUS | SOURCE            | OWNER_THREAD_ID | OWNER_EVENT_ID |
+-------------+--------------------+------------------+-----------------------+---------------------+---------------+-------------+-------------------+-----------------+----------------+
| TABLE       | organize           | AccessMatrixView |              72627408 | SHARED_READ         | TRANSACTION   | GRANTED     | sql_parse.cc:6030 |             334 |              4 |
| TABLE       | organize           | access_matrix    |              80700416 | SHARED_READ         | TRANSACTION   | GRANTED     | sql_parse.cc:6030 |             334 |              4 |
| TABLE       | organize           | people           |              81091984 | SHARED_READ         | TRANSACTION   | GRANTED     | sql_parse.cc:6030 |             334 |              4 |
| TABLE       | organize           | tools            |              79476128 | SHARED_READ         | TRANSACTION   | GRANTED     | sql_parse.cc:6030 |             334 |              7 |
| GLOBAL      | NULL               | NULL             |       140327657064288 | INTENTION_EXCLUSIVE | STATEMENT     | GRANTED     | sql_base.cc:5496  |             335 |            170 |
| SCHEMA      | organize           | NULL             |       140327657360976 | INTENTION_EXCLUSIVE | TRANSACTION   | GRANTED     | sql_base.cc:5481  |             335 |            170 |
| TABLE       | organize           | tools            |       140327657150944 | EXCLUSIVE           | TRANSACTION   | PENDING     | sql_parse.cc:6030 |             335 |            170 |
| TABLE       | performance_schema | metadata_locks   |       140327923115360 | SHARED_READ         | TRANSACTION   | GRANTED     | sql_parse.cc:6030 |             351 |             94 |
+-------------+--------------------+------------------+-----------------------+---------------------+---------------+-------------+-------------------+-----------------+----------------+
8 rows in set (0.00 sec)

mysql>

谁能帮我诊断这里的问题?

最佳答案

所以为了扩展其他答案,今天我发现 TRUNCATE 不等同于 DELETE FROM table。傻我。

根据 documentation :

Logically, TRUNCATE TABLE is similar to a DELETE statement that deletes all rows, or a sequence of DROP TABLE and CREATE TABLE statements. To achieve high performance, it bypasses the DML method of deleting data. Thus, it cannot be rolled back, it does not cause ON DELETE triggers to fire, and it cannot be performed for InnoDB tables with parent-child foreign key relationships.

Although TRUNCATE TABLE is similar to DELETE, it is classified as a DDL statement rather than a DML statement.`

本质上,处于SLEEP 状态的进程正在读取表,但是TRUNCATE 正在尝试执行 DDL 语句,因此它被阻塞直到另一个 >SLEEP-ing 进程被杀死。

关于mysql - MySQL 5.7 上的元数据锁,找不到锁定进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42835275/

相关文章:

php - 传递字符串或日期时 MySQL 查询问题

mysql - 如何从mysql导入数据到solr

mysql多对多关系查询

mysql - 哪些软件可以将mysql套接字文件转发到远程服务器?

php - 无法以注册用户身份登录(php 和 mysql)

mysql - 创建表语法错误

mysql - 如何避免在更新重复键时自动递增?

Mac 上的 MySQL 表 "in use",可在 Windows 上使用

c# - asp.net paypal重定向设置值到mysql

mysql - 使用mysql和flask显示多条记录