现象说明

  • 实例基本信息页实例状态为锁定中
  • 实例为锁定中时,无法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日志文件不支持手动删除。
      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操作。

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

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