全部产品
Search
文档中心

云数据库 RDS:实例状态显示“锁定中”时如何解决?

更新时间:Nov 24, 2023

现象说明

  • 实例基本信息页实例运行状态为锁定中

  • 实例为锁定中时,无法INSERTUPDATE数据。

    说明
    • 以RDS MySQL 5.6、5.7、8.0中20190815及之后的小版本为例,实例的锁定状态有以下三种:

      • LOCK_WRITE_GROWTH:禁止磁盘增长锁,一般由于主实例磁盘满,禁止会使磁盘用量上升的操作。DELETE语句会产生大量binlog,会导致磁盘用量上升,如需清理数据,可使用DROP和TRUNCATE语句。

      • LOCK_READ:禁读锁,一般由于只读实例磁盘满,禁止执行查询和写入。

      • LOCK_WRITE:禁写锁,可能是由于实例过期、主机过期(仅MyBase产品有的状态)、实例迁移等产生,除LOCK_WRITE_GROWTH限制外,额外禁止了其他数据写入,如DROP和TRUNCATE等。

      在实例锁定时,执行部分SQL语句会报ERROR 1290 (HY000): The MySQL server is running with the LOCK_WRITE_GROWTH option so it cannot execute this statement的错误提示。

    • 对于RDS MySQL 5.1、5.5所有小版本以及5.6、5.7、8.0中20190815之前的小版本,各种原因导致实例一旦被锁定,锁定后将无法进行任何操作。

常见原因

  • 实例存储空间已满。

  • 账号欠费或实例到期。

实例存储空间已满处理方法

在实例基本信息页左下角查看实例存储空间是否已满。存储空间使用量

释放存储空间

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 单击左侧导航栏的监控与报警,查看实例各类数据占用的磁盘空间信息。空间使用量

  3. 根据不同数据类型,清理对应磁盘空间。

    警告

    数据无价,请您谨慎清理,如非必要,不推荐清理数据,请采用扩容存储空间方式解除锁定,如果必须清理,请在清理前对数据库进行备份,避免数据丢失。

    • 数据文件

      数据库引擎

      处理方法

      MySQL

      1. 通过DMS连接实例,详情请参见通过DMS登录RDS数据库

      2. 执行以下SQL语句,查看数据库的表大小,确认其中可以删除的历史数据或无用数据。

        SELECT
            TABLE_NAME,
            concat(round((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024,2),'MB') AS DATA
        FROM
            information_schema. TABLES
        WHERE
            TABLE_SCHEMA = '<数据库名>'
        ORDER BY
            DATA + 0 DESC;
      3. 在对应数据库下使用DROP TABLE <表名>;命令清理数据。

      4. 清理后需要耐心等待一段时间(5分钟左右),RDS实例才会解锁。

      PostgreSQL

      1. 通过DMS连接实例,详情请参见通过DMS登录RDS数据库

      2. 执行以下SQL语句,查看数据库的表大小,确认其中可以删除的历史数据或无用数据。

        SELECT 
            table_schema || '.' || table_name AS table_full_name,
            pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') AS size
        FROM
            information_schema.tables
        ORDER BY
            pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') 
        DESC;
      3. 在对应数据库下使用DROP TABLE <表名>;命令清理数据。

      4. 清理后需要耐心等待一段时间(5分钟左右),RDS实例才会解锁。

      SQL Server

      1. 通过DMS连接实例,详情请参见通过DMS登录RDS数据库

      2. 执行以下SQL语句,查看数据库的表大小,确认其中可以删除的历史数据或无用数据。

         SELECT
              t.NAME AS TableName,
              CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB
         FROM
             sys.tables t
         INNER JOIN
             sys.indexes i ON t.OBJECT_ID = i.object_id
         INNER JOIN
             sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
         INNER JOIN
             sys.allocation_units a ON p.partition_id = a.container_id
         LEFT OUTER JOIN
             sys.schemas s ON t.schema_id = s.schema_id
         WHERE 1=1
             AND t.is_ms_shipped = 0
             AND i.OBJECT_ID > 255
         GROUP BY
             t.Name, s.Name, p.Rows
         ORDER BY
             t.Name
      3. 在对应数据库下使用DROP TABLE <表名>;命令清理数据。

      4. 清理后需要耐心等待一段时间(5分钟左右),RDS实例才会解锁。

    • 日志文件

      引擎

      处理办法

      MySQL

      删除本地日志(Binlog)

      PostgreSQL

      RDS PostgreSQL日志文件不支持手动删除。

      您可以通过手动删除非活跃的Replication Slot来让RDS PostgreSQL内核自动清理WAL日志。具体方法,请参见WAL日志管理

      SQL Server

      RDS SQL Server日志文件不支持手动删除。

    • 临时文件:RDS MySQL临时文件导致实例磁盘空间满且出现“锁定中”状态

    • 系统文件:系统文件不支持清理。

扩容存储空间

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 基本信息页面的配置信息区域单击变更配置

    扩容实例存储空间,更多信息,请参见变更配置

  3. 完成支付后,在实例基本信息页右上角单击按钮按钮页面跳转至任务列表页面查看变配进度。

    扩容时长与存储类型相关,具体如下:

    存储类型

    扩容时长

    说明

    本地盘

    以实际情况为准。

    • 本地无资源可用的情况下会触发跨机迁移,扩容时长受较多因素影响,推荐在业务低峰期进行扩容。

    • 变配会出现约30秒的闪断,请在业务低峰期进行变配,并确保您的应用有自动重连机制。闪断期间,与数据库、账号、网络等相关的大部分操作都无法执行。

    云盘

    5分钟左右。

    • MySQL、PostgreSQL云盘实例扩容期间不会发生业务闪断。

    • SQL Server云盘实例扩容期间会出现一次约30秒的闪断,而且与数据库、账号、网络等相关的大部分操作都无法执行,请尽量在业务低峰期执行变配操作,或确保您的应用有自动重连机制。

账号欠费或实例到期处理方法

  • 包年包月:如果实例已到期且未续费,为实例续费后,等待5分钟查看实例状态是否为运行中。续费操作具体请参见手动续费

  • 按量付费:如果账号已欠费,为账号充值后,等待5分钟查看实例状态是否为运行中

更多运维建议

建议您配置如下内容,避免实例被锁定。

  • 设置实例到期欠费预警提醒通知。

    1. 访问RDS管理控制台

    2. 单击页面右上方的通知图标,进入消息中心页面。

    3. 在左侧导航栏,单击基本接收管理

    4. 基本接收管理页面的消息类型中勾选产品的欠费、停服、即将释放相关信息通知,单击修改

    5. 修改消息接收人对话框, 勾选需通知的联系人,单击保存,即可完成设置。

  • 设置实例存储空间报警,建议设置存储空间大于90%时报警。具体操作请参见管理报警

  • 开启SQL洞察与审计,当存储空间突增时,结合监控与报警,查询存储空间增长期间的历史SQL语句,对SQL进行优化。SQL审计的更多信息,请参见SQL洞察和审计

  • 设置自动扩容存储空间,当资源不足时,系统将自动扩容。详情请参见设置RDS MySQL存储空间自动扩容设置RDS PostgreSQL存储空间自动扩容

  • 对于临时文件较大的场景,应优化SQL语句,避免频繁使用ORDER BY、GROUP BY操作。

实例已经有充足空间或者已续费,为什么实例仍然被锁定?

因为实例当前有任务(如变更配置)在运行,需要等待任务结束后才会自动解锁。您可以在实例基本信息页右上角单击按钮按钮页面跳转至任务列表页面查看任务进度。

实例显示“锁定中”,此时是否可以升降配?

只有实例因磁盘满导致的锁定可以升降配,欠费导致的锁定只能先续费后再升降配。

待解锁的实例是历史规格,如何通过扩容存储空间的方式解锁?

先将实例规格变更为在售实例规格,然后再扩容实例的存储空间。在售的实例规格,请参见主实例规格列表