openGauss例行重建索引
背景信息
数据库经过多次删除操作后,索引页面上的索引键将被删除,造成索引膨胀。例行重建索引,可有效的提高查询效率。
数据库支持的索引类型为B-tree索引,例行重建索引可有效的提高查询效率。
- 如果数据发生大量删除后,索引页面上的索引键将被删除,导致索引页面数量的减少,造成索引膨胀。重建索引可回收浪费的空间。
- 新建的索引中逻辑结构相邻的页面,通常在物理结构中也是相邻的,所以一个新建的索引比更新了多次的索引访问速度要快。
重建索引
重建索引有以下两种方式:
先运行DROP INDEX语句删除索引,再运行CREATE INDEX语句创建索引。
在删除索引过程中,会在父表上增加一个短暂的排他锁,阻止相关读写操作。在创建索引过程中,会锁住写操作但是不会锁住读操作,此时读操作只能使用顺序扫描。
使用REINDEX语句重建索引。
- 使用REINDEX TABLE语句重建索引,会在重建过程中增加排他锁,阻止相关读写操作。
- 使用REINDEX INTERNAL TABLE语句重建desc表(包括列存表的cudesc表)的索引,会在重建过程中增加排他锁,阻止相关读写操作。
操作步骤
假定在导入表“areaS”上的“area_id”字段上存在普通索引“areaS_idx”。重建索引有以下两种方式:
先删除索引(DROP INDEX),再创建索引(CREATE INDEX)。
删除索引。
""
openGauss=# DROP INDEX areaS_idx;
当结果显示如下信息,则表示删除成功。
""
DROP INDEX
创建索引。
""
openGauss=# CREATE INDEX areaS_idx ON areaS (area_id);
当结果显示如下信息,则表示创建成功。
""
CREATE INDEX
使用REINDEX重建索引。
使用REINDEX TABLE语句重建索引。
""
openGauss=# REINDEX TABLE areaS;
当结果显示如下信息,则表示重建成功。
""
REINDEX
使用REINDEX INTERNAL TABLE重建desc表(包括列存表的cudesc表)的索引。
""
openGauss=# REINDEX INTERNAL TABLE areaS;
当结果显示如下信息,则表示重建成功。
""
REINDEX
说明: 在重建索引前,用户可以通过临时增大maintenance_work_mem和psort_work_mem的取值来加快索引的重建。
导出并查看wdr诊断报告
生成快照数据需参数enable_wdr_snapshot=on,访问WDR快照数据需要sysadmin或monadmin权限,因此需要使用root账号或其他拥有权限的账号来生成WDR诊断报告。
执行如下命令新建报告文件。
""
touch /home/om/wdrTestNode.html
连接系统库postgres。
""
gsql -d postgres -p 端口号 -r
选择snapshot.snapshot表中两个不同的snapshot,当这两个snapshot之间未发生服务重启,便可以使用这两个snapshot生成报告。
""
openGauss=# select * from snapshot.snapshot order by start_ts desc limit 10;
执行如下命令,在本地生成HTML格式的WDR报告。
执行如下命令,设置报告格式。\a: 不显示表行列符号, \t: 不显示列名 ,\o: 指定输出文件。
""
openGauss=# \a \t \o {报告路径}
示例:
""
openGauss=# \a \t \o /home/omm/wdrTestNode.html
执行如下命令,生成HTML格式的WDR报告。
""
openGauss=# select generate_wdr_report(begin_snap_id Oid, end_snap_id Oid, int report_type, int report_scope, int node_name );
示例一,生成集群级别的报告:
""
openGauss=# select generate_wdr_report(1, 2, 'all', 'cluster',null);
示例二,生成某个节点的报告:
""
openGauss=# select generate_wdr_report(1, 2, 'all', 'node', pgxc_node_str()::cstring);
说明:
- 当前openGauss的节点名固定是“dn_6001”,也可直接代入。
表 1 参数说明
参数
取值范围
要查看的某段时间性能的开始的snapshot的id(表snapshot.snaoshot中的snapshot_id)
end_snap_id
结束snapshot的id,默认end_snap_id大于begin_snap_id(表snapshot.snaoshot中的snapshot_id)
-
指定生成report的类型。
- summary
- detail
- all,即同时包含summary和detail。
report_scope
- cluster:集群
- node:集群中某个节点。
node_name
- 在report_scope指定为single node时,需要把该参数指定为对应节点的名称。
- 在report_scope为cluster时,该值可以指定为省略或者为NULL。
-
执行如下命令关闭输出选项及格式化输出命令。
""
\o \a \t
在/home/om/下根据需要查看WDR报告内容。
表 2 WDR报表主要内容
项目
Database Stat(集群范围)
Load Profile(集群范围)
Instance Efficiency Percentages(集群/节点范围)
IO Profile(集群/节点范围)
Top 10 Events by Total Wait Time(节点范围)
Wait Classes by Total Wait Time(节点范围)
Host CPU(节点范围)
Memory Statistics(节点范围)
Time Model(节点范围)
Wait Events(节点范围)
Cache IO Stats (集群/节点范围)
Utility status (节点范围)
Object stats(集群/节点范围)
Configuration settings(节点范围)
SQL Statistics(集群/节点范围)
SQL Detail(集群/节点范围)
openGauss例行重建索引相关推荐
- mysql repair 索引_mysql 创建索引、重建索引、查询索引、删除索引 转自:http://www.phpernote.com/mysql/942.html...
本篇文章主要是对MySQL索引操作方法做了一下总结,包括创建索引.重建索引.查询索引.删除索引的操作.以下所列示例中中 `table_name` 表示数据表名,`index_name` 表示索引名,c ...
- Spring定时器的使用-多实例下定时重建索引
2019独角兽企业重金招聘Python工程师标准>>> 前几天接到项目需要定时重建索引的任务,一开始试了试Java自带的Timer,不知道是不是自己对Timer的了解还不够的原因,感 ...
- SQL2K数据库开发二十三之索引操作重建索引
1.可以使用下面的语句创建索引,重建索引应使用DROP_EXISTING选项. 2.在SQL Server查询分析器中输入如下的SQL语句,点击工具栏上的执行查询图标. 3.查询语句执行完毕后,结果窗 ...
- oracle建索引默认并发,ORACLE重建索引需要考虑问题
一:考虑重建索引的场合 1:表上频繁发生update,delete操作 2:表上发生了alter table ..move操作(move操作导致了rowid变化) 二:判断重建索引的标准 索引重建是否 ...
- mysql为什么要重建索引_Oracle 重建索引的必要性
索引重建是一个争论不休被不断热烈讨论的议题.当然Oracle官方也有自己的观点,我们很多DBA也是遵循这一准则来重建索引,那就是O 索引重建是一个争论不休被不断热烈讨论的议题.当然Oracle官方也有 ...
- 重建索引能释放掉字段因更改而产生额外列偏移量
1建表和索引 create table index_test (id int identity(1,1),name sysname); create clustered index nonidex_ ...
- 教你如何在 elasticsearch 中重建索引
序言 Elasticsearch 是一个实时的分布式搜索分析引擎.Teambition 使用 Elastisearch 作为搜索引擎,为用户提供搜索服务,当我们决定存储某种数据时,我们需要使用PUT ...
- oracle如何并发重建索引,oracle数据库如何重建索引?
[问题描述] oracle数据库表如何重建索引? [概述] 请在Oracle数据库里面执行如下语句: declare v_table_name varchar(255):=''; v_index_n ...
- oracle表重命名 索引,CSS_在Oracle数据库中按用户名重建索引的方法,如果你管理的Oracle数据库下某 - phpStudy...
在Oracle数据库中按用户名重建索引的方法 如果你管理的Oracle数据库下某些应用项目有大量的修改删除操作, 数据索引是需要周期性的重建的. 它不仅可以提高查询性能, 还能增加索引表空间空闲空间大 ...
最新文章
- Oracle Goldengate ORA-21780故障处理
- 在Visual C++中用ADO进行数据库编程(中)
- mysql long类型_MySQL数据类型笔记
- ssh系统环境搭建步骤
- HDU 4379 水题,大水,但我WA了很多次,做了很久
- springboot内存占用大_《SpringBoot整合redis、Scheduled/quartz定时任务》
- SVN客户端安装及汉化
- tekla二次开发用C语言,Tekla二次开发怎么弄?一篇文章入门tekla二次开发!
- 树莓派4B开机自动发微信报告ip地址
- PDF怎么转图片格式?分享三个不错的方法
- 2013年13寸Macbook Air 安装单windows 10系统
- vscode实用快捷键_23个常用的VSCode快捷键(动图演示)
- 来了!安利一款助力百度世界2020 “5G云代驾”、直播互动的黑科技
- 前车之鉴:从被回绝的系列原因出发,解读应聘阿里的注意事项
- 股票实战专题:6000102019一二月分析收盘价绘图
- DRSL: Deep Relational Similarity Learning for Cross-modal Retrieval-多模态学习总结
- 全国青少年编程等级考试python一级真题2020年12月(含题库答题软件账号)
- 前端异步请求async/await,axios的错误用法
- 软考一般什么时候出成绩呢?
- android访问服务器文件,访问服务器(加载图片)