

# synch/mutex/innodb/aurora\$1lock\$1thread\$1slot\$1futex
<a name="ams-waits.waitsynch"></a>

当一个会话锁定了一个行以进行更新，而另一个会话尝试更新同一行时，将会发生 `synch/mutex/innodb/aurora_lock_thread_slot_futex` 事件。有关更多信息，请参阅 *MySQL 参考*中的 [InnoDB 锁定](https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html)。



## 支持的引擎版本
<a name="ams-waits.waitsynch.versions"></a>

以下引擎版本支持此等待事件信息：
+ Aurora MySQL 版本 2

## 等待次数增加的可能原因
<a name="ams-waits.waitsynch.causes"></a>

多个数据操作语言 (DML) 语句同时访问相同的一行或多行。

## 操作
<a name="ams-waits.waitsynch.actions"></a>

根据您看到的其他等待事件，我们建议采取不同的操作。

**Topics**
+ [查找并响应负责此等待事件的 SQL 语句](#ams-waits.waitsynch.actions.id)
+ [查找并响应阻止会话](#ams-waits.waitsynch.actions.blocker)

### 查找并响应负责此等待事件的 SQL 语句
<a name="ams-waits.waitsynch.actions.id"></a>

使用性能详情可识别应对此等待事件负责的 SQL 语句。请考虑以下策略：
+ 如果行锁定是持续存在的问题，请考虑重写应用程序以使用乐观锁。
+ 使用多行语句。
+ 将工作负载分散到不同的数据库对象上。您可以通过分区执行此操作。
+ 检查 `innodb_lock_wait_timeout` 参数的值。它控制事务在生成超时错误之前需要等待多长时间。

有关使用性能详情进行故障排除的有用概览，请参阅博客文章[利用性能详情分析 Amazon Aurora MySQL 工作负载](https://aws.amazon.com/blogs/database/analyze-amazon-aurora-mysql-workloads-with-performance-insights/)。

### 查找并响应阻止会话
<a name="ams-waits.waitsynch.actions.blocker"></a>

确定阻止会话处于空闲状态还是活动状态。另外，了解会话是来自应用程序还是活跃用户。

要识别持有锁的会话，您可以运行 `SHOW ENGINE INNODB STATUS`。下面的示例显示了示例输出。

```
mysql> SHOW ENGINE INNODB STATUS;

---------------------TRANSACTION 302631452, ACTIVE 2 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 2 lock struct(s), heap size 376, 1 row lock(s)
MySQL thread id 80109, OS thread handle 0x2ae915060700, query id 938819 10.0.4.12 reinvent updating
UPDATE sbtest1 SET k=k+1 WHERE id=503
------- TRX HAS BEEN WAITING 2 SEC FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 148 page no 11 n bits 30 index `PRIMARY` of table `sysbench2`.`sbtest1` trx id 302631452 lock_mode X locks rec but not gap waiting
Record lock, heap no 30 PHYSICAL RECORD: n_fields 6; compact format; info bits 0
```

或者，您可以使用以下查询来提取有关当前锁定的详细信息。

```
mysql> SELECT p1.id waiting_thread,
              p1.user waiting_user,
              p1.host waiting_host,
              it1.trx_query waiting_query,        
              ilw.requesting_trx_id waiting_transaction, 
              ilw.blocking_lock_id blocking_lock, 
              il.lock_mode blocking_mode,
              il.lock_type blocking_type,
              ilw.blocking_trx_id blocking_transaction,
              CASE it.trx_state 
                WHEN 'LOCK WAIT' 
                THEN it.trx_state 
                ELSE p.state 
              END blocker_state, 
              il.lock_table locked_table,        
              it.trx_mysql_thread_id blocker_thread, 
              p.user blocker_user, 
              p.host blocker_host 
       FROM information_schema.innodb_lock_waits ilw 
       JOIN information_schema.innodb_locks il 
         ON ilw.blocking_lock_id = il.lock_id 
        AND ilw.blocking_trx_id = il.lock_trx_id
       JOIN information_schema.innodb_trx it 
         ON ilw.blocking_trx_id = it.trx_id
       JOIN information_schema.processlist p 
         ON it.trx_mysql_thread_id = p.id 
       JOIN information_schema.innodb_trx it1 
         ON ilw.requesting_trx_id = it1.trx_id 
       JOIN information_schema.processlist p1 
         ON it1.trx_mysql_thread_id = p1.id\G

*************************** 1. row ***************************
      waiting_thread: 3561959471
        waiting_user: reinvent
        waiting_host: 123.456.789.012:20485
       waiting_query: select id1 from test.t1 where id1=1 for update
 waiting_transaction: 312337314
       blocking_lock: 312337287:261:3:2
       blocking_mode: X
       blocking_type: RECORD
blocking_transaction: 312337287
       blocker_state: User sleep
        locked_table: `test`.`t1`
      blocker_thread: 3561223876
        blocker_user: reinvent
        blocker_host: 123.456.789.012:17746
1 row in set (0.04 sec)
```

当您识别会话时，您的选项包括：
+ 联系应用程序拥有者或用户。
+ 如果阻止会话处于空闲状态，请考虑结束阻止会话。此操作可能会触发长时间回滚。要了解如何结束会话，请参阅[结束会话或查询](mysql-stored-proc-ending.md)。

有关识别阻止事务的更多信息，请参阅 *MySQL 参考手册*中的[使用 InnoDB 事务和锁定信息](https://dev.mysql.com/doc/refman/5.7/en/innodb-information-schema-examples.html)。