

# synch/mutex/innodb/fil\$1system\$1mutex
<a name="ams-waits.innodb-fil-system-mutex"></a>

当会话等待访问表空间内存缓存时，会发生 `synch/mutex/innodb/fil_system_mutex` 事件。

**Topics**
+ [支持的引擎版本](#ams-waits.innodb-fil-system-mutex.context.supported)
+ [上下文](#ams-waits.innodb-fil-system-mutex.context)
+ [等待次数增加的可能原因](#ams-waits.innodb-fil-system-mutex.causes)
+ [操作](#ams-waits.innodb-fil-system-mutex.actions)

## 支持的引擎版本
<a name="ams-waits.innodb-fil-system-mutex.context.supported"></a>

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

## 上下文
<a name="ams-waits.innodb-fil-system-mutex.context"></a>

InnoDB 使用表空间来管理表和日志文件的存储区域。*表空间内存缓存*是一种全局内存结构，用于维护有关表空间的信息。MySQL 使用 `synch/mutex/innodb/fil_system_mutex` 等待控制对表空间内存缓存的并发访问。

事件 `synch/mutex/innodb/fil_system_mutex` 表示当前有多个操作需要检索和操作同一表空间的表空间内存缓存中的信息。

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

当 `synch/mutex/innodb/fil_system_mutex` 事件的发生率超过正常（可能表示性能问题）时，该情况通常会在以下所有条件均存在时发生：
+ 更新或删除同一表中的数据的并发数据操作语言 (DML) 操作增加。
+ 此表的表空间非常大，有很多数据页面。
+ 这些数据页面的填充系数很低。

## 操作
<a name="ams-waits.innodb-fil-system-mutex.actions"></a>

根据等待事件的原因，我们建议采取不同的操作。

**Topics**
+ [确定导致事件的会话和查询](#ams-waits.innodb-fil-system-mutex.actions.identify)
+ [在非高峰时段重新组织大型表](#ams-waits.innodb-fil-system-mutex.actions.reorganize)

### 确定导致事件的会话和查询
<a name="ams-waits.innodb-fil-system-mutex.actions.identify"></a>

通常，具有中等到大量负载的数据库都会有等待事件。如果性能最佳，等待事件可能是可以接受的。如果性能不佳，请检查数据库花费最多时间的位置。查看导致最高负载的等待事件，并了解是否可以优化数据库和应用程序以减少这些事件。

**查找负责高负载的 SQL 查询**

1. 登录 Amazon Web Services 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择**性能详情**。

1. 选择一个数据库实例。该数据库实例的性能详情控制面板出现。

1. 在 **Database load**（数据库负载）图表中，选择 **Slice by wait**（按等待切片）。

1. 在页面底部，选择 **Top SQL**（热门 SQL）。

   该图表列出了负责加载的 SQL 查询。排在列表前面的负载负有最大的责任。为了解决瓶颈，请关注这些语句。

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

找出哪些查询导致了大量 `synch/mutex/innodb/fil_system_mutex` 等待的另一个方法是检查 `performance_schema`，如以下示例所示。

```
mysql> select * from performance_schema.events_waits_current where EVENT_NAME='wait/synch/mutex/innodb/fil_system_mutex'\G
*************************** 1. row ***************************
            THREAD_ID: 19
             EVENT_ID: 195057
         END_EVENT_ID: 195057
           EVENT_NAME: wait/synch/mutex/innodb/fil_system_mutex
               SOURCE: fil0fil.cc:6700
          TIMER_START: 1010146190118400
            TIMER_END: 1010146196524000
           TIMER_WAIT: 6405600
                SPINS: NULL
        OBJECT_SCHEMA: NULL
          OBJECT_NAME: NULL
           INDEX_NAME: NULL
          OBJECT_TYPE: NULL
OBJECT_INSTANCE_BEGIN: 47285552262176
     NESTING_EVENT_ID: NULL
   NESTING_EVENT_TYPE: NULL
            OPERATION: lock
      NUMBER_OF_BYTES: NULL
                FLAGS: NULL
*************************** 2. row ***************************
            THREAD_ID: 23
             EVENT_ID: 5480
         END_EVENT_ID: 5480
           EVENT_NAME: wait/synch/mutex/innodb/fil_system_mutex
               SOURCE: fil0fil.cc:5906
          TIMER_START: 995269979908800
            TIMER_END: 995269980159200
           TIMER_WAIT: 250400
                SPINS: NULL
        OBJECT_SCHEMA: NULL
          OBJECT_NAME: NULL
           INDEX_NAME: NULL
          OBJECT_TYPE: NULL
OBJECT_INSTANCE_BEGIN: 47285552262176
     NESTING_EVENT_ID: NULL
   NESTING_EVENT_TYPE: NULL
            OPERATION: lock
      NUMBER_OF_BYTES: NULL
                FLAGS: NULL
*************************** 3. row ***************************
            THREAD_ID: 55
             EVENT_ID: 23233794
         END_EVENT_ID: NULL
           EVENT_NAME: wait/synch/mutex/innodb/fil_system_mutex
               SOURCE: fil0fil.cc:449
          TIMER_START: 1010492125341600
            TIMER_END: 1010494304900000
           TIMER_WAIT: 2179558400
                SPINS: NULL
        OBJECT_SCHEMA: NULL
          OBJECT_NAME: NULL
           INDEX_NAME: NULL
          OBJECT_TYPE: NULL
OBJECT_INSTANCE_BEGIN: 47285552262176
     NESTING_EVENT_ID: 23233786
   NESTING_EVENT_TYPE: WAIT
            OPERATION: lock
      NUMBER_OF_BYTES: NULL
                FLAGS: NULL
```

### 在非高峰时段重新组织大型表
<a name="ams-waits.innodb-fil-system-mutex.actions.reorganize"></a>

重新组织您在生产时间之外的维护时段内识别为大量 `synch/mutex/innodb/fil_system_mutex` 等待事件的来源的大型表。这样做可以确保在快速访问表至关重要时不会进行内部表空间映射清理。有关重新组织表的信息，请参阅 *MySQL 参考*中的 [OPTIMIZE TABLE 语句](https://dev.mysql.com/doc/refman/5.7/en/optimize-table.html)。