数据库无法插入表数据故障排查

故障现象:
  在向数据库表插入数据的时候,报没有空间或不能创建新的 extent,其返回错误码可能是:

-131 ISAM error: no free disk space.
-136 ISAM error: no more extents.
-271 Could not insert new row into the table.

故障分析:
  一般来说,该类问题是由于以下3 种可能原因造成的:
  1、由于表所存在的 dbspace 上没有足够的连续空间来创建新的 extent;
  2、每个表(或者每个分片\分区)的 extents 个数达到上限;
  3、每个表(或者每个分片\分区)page数达到上限;

故障处理:
  在出现这种问题以后,首先应该查看应用日志、应用程序,也可以通过查看当前正在执行并返回错误的 SQL 以确定到底是哪张表不能插入数据。在定位受到影响的表以后,应该确定表所存在的 dbspace 是否有足够的连续空闲空间,如果没有请相应的增加 chunk 空间以扩充其数据库存储空间。在确认存在足够的连续空闲空间以后,再检查表的extent数和page数是否达到上限。在确认问题的原因以后,理想的解决方法是为数据库表提供更多的使用空间,例如增加 chunk、将表进行重建、将表进行合理的分片等;应急的处理原则是:小批量、小批量地删除部分数据,尽量将需要处理的数据限制在较小的范围内,通过多次的操作来达到删除数据的目的,避免出现大事务、长时间不能完成的情况出现。最后对整个数据库做一次巡检,以便发现是否有其他表可能会存在这样的问题。