KingbaseES索引坏块
错误信息产生:
下面的报错一般为有坏块的产生。
test=# select max(create_time) from public.tbl_table where create_time>='2010-11-08';
ERROR: could not read block 365 of relation 16779/5348/2486: read only 0 of 8192 bytes
看到这个错误信息,首先想到的是表 tbl_table 上有坏块。
--查看执行计划
test=# \d tbl_table;
Table "public.tbl_table"
Column | Type | Modifiers
----------------+-----------------------------+------------------------
total | integer |
logined | integer |
logining | integer |
http | integer |
rawtcp | integer |
create_time | timestamp without time zone | not null default now()
logincountdesc | character varying |
logincountaddr | character varying | not null
Indexes:
"tbl_table_pkey" PRIMARY KEY, btree (create_time, logincountaddr)
"index_tes" btree (create_time)
test=# select max(create_time) from public.tbl_table where create_time>='2010-11-08';
ERROR: could not read block 365 of relation 16779/5348/2486: read only 0 of 8192 bytes
test=# explain select max(create_time) from public.tbl_table where create_time>='2010-11-08';
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------
Result (cost=0.04..0.05 rows=1 width=0)
InitPlan
-> Limit (cost=0.00..0.04 rows=1 width=8)
-> Index Scan testward using index_tes on tbl_table (cost=0.00..66.28 rows=1507 width=8)
Index Cond: (create_time >= '2010-11-08 00:00:00'::timestamp without time zone)
Filter: (create_time IS NOT NULL)
(6 rows)
发现上面的查询走的索引 index_tes,所以很可能索引有问题。
--根据报错信息,从relation后面的数字分析
test=# select oid,relname from pg_class where oid=2486;
oid | relname
-------+-----------------------------------------
2486 | index_tes
(1 row)
Time: 0.596 ms
可以看到 2486正好是表上的索引 index_tes。
select relname,relkind from pg_class where relfilenode = '2486';
如果查询结果中relkind = i,表示损坏的是一个索引
--查看索引状态
test=# select * from pg_index where indexrelid=2486;
indexrelid | indrelid | indnatts | indisunique | indisprimary | indisclustered | indisvalid | indcheckxmin | indisready | indkey | indclass | indoption | indexprs | indpred
------------+----------+----------+-------------+--------------+----------------+------------+--------------+------------+--------+----------+-----------+----------+---------
2486 | 24823 | 1 | f | f | f | t | f | t | 6 | 10053 | 0 | |
(1 row)
indisvalid=t 表示索引处于可用状态。
--尝试下重建索引
test=# \timing
Timing is on.
test=# reindex index concurrently index_tes; 注:REINDEX 命令和 CREATE INDEX 持有表级锁为 SHARE 锁,会阻塞表上的 DML 操作。
REINDEX
Time: 107796.232 ms
--索引重建后,查询恢复正常
test=# select pg_size_pretty(pg_relation_size('index_tes'));
pg_size_pretty
----------------
31 MB
(1 row)
另一种情况,主键损坏:
需要注意,损坏的可能是普通索引,也可能是主键或唯一键。如果索引的名称中有“_pkey”等很可能属于主键,而名称中含有 “key”则很可能属于唯一键。
如果表名是“pg”开头的,则说明它是系统表。
pgclass.relkind 的值的几种:
r: 表示ordinary table(普通表);
i: 表示index(索引);
S: 表示sequence(序列);
V: 表示view(视图);
m: 表示materialized view(物化视图);
c: 表示composite type(复合类型);
t: 表示TOAST table(TOAST 表);
f: 表示foreign table(外部表)
如果损坏的是主键或唯一键,首先要找到它所在的表,
例如:
select tablename,indexname from pg_indexes where indexname = 'tb_pkey';
查询结果:
t1, tb_pkey
获取索引的定义:
select pg_get_constraintdef((select oid from pg_constraint where conname = ' tb_pkey '));
查询结果:PRIMARY KEY (id)
重建主键约束:
Alter table t1 drop constriant tb_pkey;
Alter table t1 add constraint tb_pkey PRIMARY KEY (id);
总结: 索引上有坏块可以通过重建索后,查询恢复正常。
KingbaseES索引坏块的更多相关文章
- PostgreSQL 索引坏块处理
今天应用反应有张表查询报错,报错信息如下 back=# select max(create_time) from public.tbl_index_table where create_time> ...
- 对Oracle数据库坏块的理解
1.物理坏块和逻辑坏块 在数据库中有一个概念叫做数据块的一致性,Oracle的数据块的一致性包括了两个层次:物理一致性和逻辑一致性,如果一个数据块在这两个层次上存在不一致性,那就对应到了我们今天要要说 ...
- Oracle数据库坏块的恢复
模拟数据块坏块: 对于发生数据块不一致的数据块,如果当前数据库有备份且处于归档模式,那么就可以利用rman工具数据块恢复功能 对数据块进行恢复,这种方法最简单有效,而且可以在数据文件在线时进行,不会发 ...
- Oracle corrupt block(坏块) 详解
转自:http://blog.csdn.net/tianlesoftware/article/details/5024966 一. 坏块说明 1.1 相关链接 在看坏块之前,先看几个相关的链接,在后面 ...
- 【转】基于RMAN实现坏块介质恢复(blockrecover)
本文转自:乐沙弥的世界 对于物理损坏的数据块,我们可以通过RMAN块介质恢复(BLOCK MEDIA RECOVERY)功能来完成受损块的恢复,而不需要恢复整个数据库或所有文件来修复这些少量受损的数据 ...
- 使用 DBMS_REPAIR 修复坏块
对于Oracle数据块物理损坏的情形,在我们有备份的情况下可以直接使用备份来恢复.对于通过备份恢复,Oracel为我们提供了很多种方式,冷备,基于用户管理方式,RMAN方式等等.对于这几种方式我们需要 ...
- ORA-01578和ORA-26040--NOLOGGING操作引起的坏块-错误解释和解决方案(文档ID 1623284.1)
ORA-01578和ORA-26040--NOLOGGING操作引起的坏块-错误解释和解决方案(文档ID 1623284.1) (一)NOLOGGING操作引起的坏块(ORA-01578和ORA-26 ...
- 无备份时用dbms_repair恢复坏块的方法
份的情况下可以直接使用备份来恢复. 对于通过备份恢复,Oracel为我们提供了很多种方式,冷备,基于用户管理方式,RMAN方式等等. 对于这几种方式我们需要实现基于数据库以及文件级别的恢复.RMAN同 ...
- oracle坏块问题的处理
一.背景 今天有用户反映数据库连不上了,查看日志发现有数据库坏块. 查看数据库日志,有如下报错: ORA-01578: ORACLE , 93642) ORA-01110: 1: '/oracle/a ...
- Oracle 处理坏块
本文主要介绍如何去处理在Oracle数据库中出现坏块的问题,对于坏块产生在不同的对象上,处理的方法会有所不同,本文将大致对这些方法做一些介绍.因为数据库运行时间长了,由于硬件设备的老化,出现坏块的几率 ...
随机推荐
- Java设计模式-模板模式Template
介绍 模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),z 在一个抽象类公开定义了执行.它的方法的模板.它的子类可以按需要重写方法实现, ...
- 如何基于three.js(webgl)引擎架构,实现3D密集架库房,3D档案室(3d机器人取档、机器人盘点、人工查档、设备巡检)
前言: 这是最好的时代,也是最坏的时代:是充满挑战的时代,也是充满机遇的时代.是科技飞速的时代,也是无限可能的时代. 近年来,人工智能(AI)技术的飞速发展已经席卷了全球,不断突破着技术边界,为各行 ...
- [Android逆向]Exposed 破解 jwxdxnx02.apk
使用exposed 遇到了一些坑,这里记录一下 源码: package com.example.exposedlesson01; import de.robv.android.xposed.IXpos ...
- VMware虚拟机Ubuntu系统连接网络过程
网络和Internet设置--高级网络设置--更多网络适配器选项--WLAN. 右键选择属性--共享,勾选允许连接,选择VMnet8.(若勾选了其它,之后再想换回来,可以先取消勾选,点确定,再进入勾选 ...
- Sourcetree 如何关联自己的gitlab仓库
现在有些企业自己搭建了gitlab服务器,通过sourcetree从企业服务器拉取代码的时候会提示认证失败.今天搞了大半天才搞懂,给我自己做个笔记. 添加账户 托管服务商 选择 GitLab CE 托 ...
- JVM-对象实例化
JVM-对象实例化 1.创建对象的方式 new:最常见的方式.Xxx的静态方法,XxxBuilder/XxxFactory的静态方法 Class的newInstance方法:反射的方式,只能调用空参的 ...
- 【Azure API 管理】讨论APIM是否适合直接存储文件到Azure Storage Account呢?
问题描述 需要从 APIM 直接将大文件存入Azure Storage,没看到这方面的官方文档,所以是否有这方面的实践案例,或者APIM是否支持引用SDK (如Azure Storage SDK)? ...
- 一文带你了解 「图数据库」Nebula 的存储设计和思考
本文首发于 Nebula Graph Community 公众号 在上次的 nebula-storage on nLive 直播中,来自 Nebula 存储团队的负责人王玉珏(四王)同大家分享了 ne ...
- Advanced .Net Debugging 3:基本调试任务(对象检查:内存、值类型、引用类型、数组和异常的转储)
一.介绍 这是我的<Advanced .Net Debugging>这个系列的第四篇文章.今天这篇文章的标题虽然叫做"基本调试任务",但是这章的内容还是挺多的.由于内容 ...
- Nginx-web系列
nginx 系列 目录 nginx 系列 一 简述 1.1 为什么要使用? 1.2 主要用于哪里? 二. Nginx 搭建环境 2.1 版本选择 2.2 环境准备 2.2 yum 直装 2.3 ngi ...