案例说明:

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

适用版本:

KingbaseES V8R3/R6

一、创建测试环境

# 表结构信息
prod=# \d+ test1
Table "public.test1"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
--------+---------+-----------+----------+---------+----------+--------------+-------------
id | integer | | not null | | plain | |
v_name | varchar | | | | extended | |
Indexes:
"test1_pkey" PRIMARY KEY, btree (id)
"test1_name_ind" btree (v_name)
Access method: heap # 插入测试数据
prod=# insert into test1 values (generate_series(1,10000),'usr'||generate_series(1,10000));
INSERT 0 10000
prod=# select count(*) from test1;
count
-------
10000
(1 row) # 查看索引应用
prod=# explain analyze select * from test1 where v_name='usr2';
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------
Index Scan using test1_name_ind on test1 (cost=0.29..8.30 rows=1 width=11) (actual time=0.023..0.024 rows=1 loops=1)
Index Cond: ((v_name)::text = 'usr2'::text)
Planning Time: 0.055 ms
Execution Time: 0.038 ms
(4 rows)

二、模拟数据文件故障

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

prod=# select pg_relation_filepath('test1_name_ind');
pg_relation_filepath
----------------------
base/16385/26800
(1 row)

2、模拟数据文件被破坏

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

三、重建索引解决故障

1、查看表索引信息

prod=# \d+ test1;
Table "public.test1"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
--------+---------+-----------+----------+---------+----------+--------------+-------------
id | integer | | not null | | plain | |
v_name | varchar | | | | extended | |
Indexes:
"test1_pkey" PRIMARY KEY, btree (id)
"test1_name_ind" btree (v_name)
Access method: heap

2、重建索引

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

四、总结

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

KingbaseES V8R6数据库运维案例之---索引坏块故障处理的更多相关文章

  1. 数据库运维之路——关于tempdb暴增实战案例

    转眼间,2021年的第一个季度已经到了最后一个月了,由于疫情原因,最近一段时间一直在北京,基本上没有出差,每天上班下班的日子感觉时间过的好快,新的一年继续努力奋斗啊. 仔细回想一下,自己踏入到sql ...

  2. Oracle数据库运维优化六脉神剑口诀

    我们知道数据库性能是数据库运维中至关重要的一个部分,据传在Oracle数据库的江湖中也有威力无比的六脉神剑技能,下面与大家免费分享Oracle大师们广为流传的六脉神剑口诀,一般人我不告诉他哦:) 少商 ...

  3. MySQL数据库运维课程

    MySQL数据库运维课程 http://www.dataguru.cn/article-4834-1.html?union_site=comm100 课程大纲 第一课:机器选型.系统规划 第二课:安装 ...

  4. 一个兼职DBA的数据库运维经验 小米科技 xx@xiaomi.com 2011

    一个兼职DBA的数据库运维经验 小米科技  xx@xiaomi.com 2011 内存扩容 16G->64G ,调大bp后,凌晨说监控物理内存有余量情况下,开吃swap,内存泄露措施1  定时 ...

  5. 数栈运维实例:Oracle数据库运维场景下,智能运维如何落地生根?

    从马车到汽车是为了提升运输效率,而随着时代的发展,如今我们又希望用自动驾驶把驾驶员从开车这项体力劳动中解放出来,增加运行效率,同时也可减少交通事故发生率,这也是企业对于智能运维的诉求. 从人工运维到自 ...

  6. MySQL数据库运维的五大指标

    如何评价一个公司数据库运维水平的高低?用什么来进行横向与纵向对比?自动化平台建设的目标是什么?必须有相应的指标体系来指导,此指标体系必须满足以下条件: • 可以用数字来测算和衡量 • 最终指标,而不是 ...

  7. PG数据库运维工具要覆盖哪些能力

    目前的国产数据库中,很多产品都是以PG社区版代码作为研发起点的,还有一些产品是基于openGauss开源项目的.这些数据库的基础特性都和社区版的PG数据库类似,不过也做了一定的拓展.不过从使用与运维上 ...

  8. KingbaseES V8R6集群管理运维案例之---repmgr standby switchover故障

    案例说明: 在KingbaseES V8R6集群备库执行"repmgr standby switchover"时,切换失败,并且在执行过程中,伴随着"repmr stan ...

  9. KingbaseES V8R6集群运维案例之---repmgr standby promote应用案例

    案例说明: 在容灾环境中,跨区域部署的异地备节点不会自主提升为主节点,在主节点发生故障或者人为需要切换时需要手动执行切换操作.若主节点已经失效,希望将异地备机提升为主节点. $bin/repmgr s ...

  10. 运维案例 | Exchange2010数据库损坏的紧急修复思路

    ​​关注嘉为科技,获取运维新知 Exchange后端数据库故障,一般都会是比较严重的紧急故障,因为这会直接影响到大面积用户的正常使用,而且涉及到用户数据.一旦遇到这种级别的故障,管理员往往都是在非常紧 ...

随机推荐

  1. 【Android】使用MediaExtractor、MediaMuxer去掉视频文件中的音频数据

    1 简介 ​ 本文以 mp4 文件为例,讲解去音频操作.mp4 是一种视频封装的容器,里面包含音频(audio)和视频(video)数据,对应的数据编码格式分别为 aac 和 h264.在去音频过程中 ...

  2. win32-StretchDIBits - PrintDlg

    使用StretchDIBits将位图数据传输到printer的dc中 #include <Windows.h> #include <algorithm> int main() ...

  3. 麒麟系统开发笔记(四):从Qt源码编译安装之编译安装QtCreator4.8.1,并配置编译测试Demo

    前言   本篇紧接上一篇,上一篇已经从Qt源码编译了Qt,那么Qt开发的IDE为QtCreator,本篇从源码编译安装QtCreator,并配置好构建套件,运行Demo并测试.   QtCreator ...

  4. django中model聚合使用

    from django.db.models.functions import Cast, Coalesce, Concat, ConcatPair, Greatest # Cast,类型转换 q1 = ...

  5. Django之第三方平台QQ授权登录的实现

    接入指南:https://wiki.connect.qq.com/成为开发者 准备工作 成为开发者 首先要有一个开发者账号,https://connect.qq.com/ 登录后点击用户头像,修改个人 ...

  6. 【Azure API 管理】APIM服务资源删除后,为什么不能马上创建相同名称的APIM服务呢?

    问题描述 使用Azure APIM服务,在删除旧资源准备新建相同名称的新APIM服务时,尝试多次都是出现"指定的服务名称已正在使用"错误.但实际上同名称的服务已经被删除.为什么多次 ...

  7. docker使用 mysql8

    # docker pull mysql:8 # mkdir -p /mysql/{datadir,etc/mysql} # cat >/mysql/etc/mysql/my.cnf <&l ...

  8. 手把手带你认识GaussDB轻量化运维管理工具

    本文分享自华为云社区<GaussDB轻量化运维管理工具介绍>,作者: Gauss松鼠会小助手. 一.GaussDB 运维管理平台简介 开放生态层 友好Web界面,多云皮肤个性化定制 丰富的 ...

  9. aardio 嵌入 其他应用程序

    aardio 嵌入 其他应用程序 需求 这个chrome壳不能进行拖拽和缩放,所以再套一个壳,可以再分屏的时候用 import win.ui; /*DSG{{*/ winform = win.form ...

  10. 音频编解码aac移植之ubuntu下aac的仿真的编译和运行

    一 编译 aac的编译其实很简单,配置好预编译选项之后,立即在根目录下执行:make 即可. 第一步:./configure 第二步: make 第三步: sudo make install 二 运行 ...