[转帖]金仓数据库KingbaseES V8R6索引坏块故障处理

数据库,kingbasees,v8r6,索引,坏块,故障,处理 · 浏览次数 : 0

小编点评

**案例说明:** 在执行表数据查询时,出现下图所示错误,索引故障导致表无法访问: ``` ERROR: index "test1_name_ind" contains unexpected zero page at block 0 HINT: Please REINDEX it. ``` **复现过程:** 1. 查看索引文件存储路径: ``` prod=# select pg_relation_filepath('test1_name_ind'); ``` 2. 模拟数据文件被破坏: ``` [kingbase@node102 data]$ ls -lh base/16385/26800-rw------- 1 kingbase kingbase 240K Nov 1715:01 base/16385/26800 [kingbase@node102 data]$ ``` 3. 重建索引解决故障: ``` # 索引重建 reindex index test1_name_ind; ``` **重建索引后,表数据访问正常:** ``` id | v_name----+--------1| usr1 2| usr2 3| usr3(3rows) ``` **总结:** 对于 KingbaseES 数据库,索引块的损坏会影响到表数据的正常访问,而索引故障处理比较简单,直接重建索引一般可以解决此类问题。

正文

案例说明:

在执行表数据查询时,出现下图所示错误,索引故障导致表无法访问,后重建索引问题解决。本案例复现了此类故障解决过程。

适用版本:

KingbaseES V8R3/R6

一、创建测试环境

  1. # 表结构信息
  2. prod=# \d+ test1
  3. Table "public.test1"
  4. Column| Type |Collation| Nullable |Default| Storage | Stats target | Description
  5. --------+---------+-----------+----------+---------+----------+--------------+-------------
  6. id |integer||notnull|| plain ||
  7. v_name |varchar|||| extended ||
  8. Indexes:
  9. "test1_pkey" PRIMARY KEY, btree (id)
  10. "test1_name_ind" btree (v_name)
  11. Access method: heap
  12. # 插入测试数据
  13. prod=# insertinto test1 values (generate_series(1,10000),'usr'||generate_series(1,10000));
  14. INSERT010000
  15. prod=# selectcount(*) from test1;
  16. count
  17. -------10000
  18. (1row)
  19. # 查看索引应用
  20. prod=# explain analyze select*from test1 where v_name='usr2';
  21. QUERY PLAN
  22. -----------------------------------------------------------------------------------------------------------------------
  23. Index Scan using test1_name_ind on test1 (cost=0.29..8.30rows=1 width=11) (actual time=0.023..0.024rows=1 loops=1)
  24. Index Cond: ((v_name)::text ='usr2'::text)
  25. Planning Time: 0.055 ms
  26. Execution Time: 0.038 ms
  27. (4rows)

二、模拟数据文件故障

1、查看索引文件存储路径

  1. prod=# select pg_relation_filepath('test1_name_ind');
  2. pg_relation_filepath
  3. ----------------------
  4. base/16385/26800
  5. (1row)

2、模拟数据文件被破坏

  1. [kingbase@node102 data]$ ls -lh base/16385/26800
  2. -rw------- 1 kingbase kingbase 240K Nov 1715:01 base/16385/26800
  3. [kingbase@node102 data]$ dd if=/dev/zero of=/data/kingbase/v8r6_c6/data/base/16385/26800 bs=8k count=22+0 records in2+0 records out
  4. 16384 bytes (16 kB) copied, 0.000147959 s, 111 MB/s
  5. [kingbase@node102 data]$ ls -lh base/16385/26800
  6. -rw------- 1 kingbase kingbase 16K Nov 1715:04 base/16385/26800# 如下所示索引故障导致表访问错误
  7. prod=# select * from test1;ERROR: index "test1_name_ind" contains unexpected zero page at block 0HINT: Please REINDEX it.

三、重建索引解决故障

1、查看表索引信息

  1. prod=# \d+ test1;
  2. Table"public.test1"Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
  3. --------+---------+-----------+----------+---------+----------+--------------+-------------
  4. id | integer | | not null | | plain | |
  5. v_name | varchar | | | | extended | |
  6. Indexes:
  7. "test1_pkey"PRIMARYKEY, btree (id)
  8. "test1_name_ind" btree (v_name)
  9. Access method: heap

2、重建索引

  1. # 索引重建
  2. prod=# reindex index test1_name_ind;
  3. REINDEX
  4. #如下所示,重建索引后表数据访问正常
  5. prod=# select*from test1 limit 3;
  6. id | v_name
  7. ----+--------1| usr1
  8. 2| usr2
  9. 3| usr3
  10. (3rows)
  11. prod=# select*from test1 where v_name='usr2';
  12. id | v_name
  13. ----+--------2| usr2
  14. (1row)
  15. prod=# explain analyze select*from test1 where v_name='usr2';
  16. QUERY PLAN
  17. -----------------------------------------------------------------------------------------------------------------------
  18. Index Scan using test1_name_ind on test1 (cost=0.29..8.30rows=1 width=11) (actual time=0.023..0.024rows=1 loops=1)
  19. Index Cond: ((v_name)::text ='usr2'::text)
  20. Planning Time: 0.055 ms
  21. Execution Time: 0.038 ms
  22. (4rows)

四、总结

对于KingbaseES数据库,索引块的损坏会影响到表数据的正常访问,对于索引块故障处理比较简单,直接重建索引一般都可以解决此类问题。

文章知识点与官方知识档案匹配,可进一步学习相关知识
MySQL入门技能树首页概览59642 人正在系统学习中

与[转帖]金仓数据库KingbaseES V8R6索引坏块故障处理相似的内容:

[转帖]金仓数据库KingbaseES V8R6索引坏块故障处理

案例说明: 在执行表数据查询时,出现下图所示错误,索引故障导致表无法访问,后重建索引问题解决。本案例复现了此类故障解决过程。 适用版本: KingbaseES V8R3/R6 一、创建测试环境 # 表结构信息prod=# \d+ test1 Table "public.test1" Column|

[转帖]金仓数据库KingbaseES V8R6 索引膨胀

索引膨胀 对于索引,随着业务不断的增删改,会造成膨胀,尤其Btree索引,也会涉及索引分裂、合并等,导致索引访问效率降低、维护成本增加。另外,索引页的复用与HEAP PAGE不一样,因为索引的内容是有序结构,只有符合顺序的ITEM才能插入对应的PAGE中,不像HEAP TUPLE,只要有空间就可以插

[转帖]金仓数据库KingbaseES V8R6 中unlogged表

KingbaseESV8R6有一种表称为unlogged,在该表新建的索引也属于unlogged。和普通表的区别是,对该表进行DML操作时候不将该表的变更记录变更写入到wal文件中。在数据库异常关机或者异常崩溃后该表的数据会被truncate掉,但是在写入性能上会比普通表快几倍。 这个特性类似于or

[转帖]金仓数据库KingbaseES 数据库参数优化

目录 一、数据库应用类型 二、主要参数 max_connections shared_buffers effective_cache_size maintenance_work_mem checkpoint_completion_target wal_buffers default_statisti

[转帖]金仓数据库KingbaseES误删除系统超级用户(superuser)权限的恢复方式

`https://blog.csdn.net/arthemis_14/article/details/129879269` 在使用KingbaseES数据库的时候,系统默认存在一个跟系统初始化用户同名的Superuser(默认是system用户,可更改)。 这个Superuser的存在其实对于权限的

[转帖]金仓数据库KingbaseES数据目录结构

KingbaseES数据库结构 [kingbase@postgresV8]$ tree -LP2data/.├── data│ ├── base # 存储用户创建的数据库文件及隶属于用户数据库的所有关系.比如表、索引...│ ├── current_logfiles. # 记录当前被日志收集器写入的

[转帖]金仓数据库KingbaseES表空间介绍

1、表空间的概念 KingbaseES中的表空间允许在文件系统中定义用来存放表示数据库对象的文件的位置。在KingbaseES中表空间实际上就是给表指定一个存储目录。 2、表空间的作用 通过使用表空间,管理员可以控制一个KingbaseES安装的磁盘布局。 如果初始化集簇所在的分区或者卷用光了空间,

[转帖]金仓数据库KingbaseES表空间(tablespace)知多少

金仓数据库KingbaseES表空间定义 金仓数据库KingbaseES中的表空间允许在文件系统里定义那些代表数据库对象的文件存放位置,比如表和索引等。一旦表空间被创建,那么就可以在创建数据库对象时通过名称来引用他。 一个数据库可以有一个或多个表空间,创建数据库时自动创建系统表空间sys_defau

[转帖]金仓数据库KingbaseES分区表 -- 声明式创建分区表

https://www.modb.pro/db/638045 1. 创建分区表同时创建分区 1.1 准备环境 # 创建分区表同时创建分区 create table tb1(id bigint,stat date,no bigint,pdate date,info varchar2(50)) part

[转帖]如何通过JMeter测试金仓数据库KingbaseES并搭建环境

1.安装JMeter Apache JMeter是Apache组织开发的基于Java的压力测试工具,主要用于对软件的压力测试,它最初被设计用于Web应用测试,但后来扩展到其它测试领域。它可测试静态、动态资源,如静态文件、Java小服务程序、CGI脚本、Java对象、数据库等等。JMeter可以用于对