背景信息

数据库经过多次删除操作后,索引页面上的索引键将被删除,造成索引膨胀。例行重建索引,可有效的提高查询效率。

数据库支持的索引类型为B-tree索引,例行重建索引可有效的提高查询效率。

  • 如果数据发生大量删除后,索引页面上的索引键将被删除,导致索引页面数量的减少,造成索引膨胀。重建索引可回收浪费的空间。
  • 新建的索引中逻辑结构相邻的页面,通常在物理结构中也是相邻的,所以一个新建的索引比更新了多次的索引访问速度要快。

重建索引

重建索引有以下两种方式:

  • 先运行DROP INDEX语句删除索引,再运行CREATE INDEX语句创建索引。

    在删除索引过程中,会在父表上增加一个短暂的排他锁,阻止相关读写操作。在创建索引过程中,会锁住写操作但是不会锁住读操作,此时读操作只能使用顺序扫描。

  • 使用REINDEX语句重建索引。

    • 使用REINDEX TABLE语句重建索引,会在重建过程中增加排他锁,阻止相关读写操作。
    • 使用REINDEX INTERNAL TABLE语句重建desc表(包括列存表的cudesc表)的索引,会在重建过程中增加排他锁,阻止相关读写操作。

操作步骤

假定在导入表“areaS”上的“area_id”字段上存在普通索引“areaS_idx”。重建索引有以下两种方式:

  • 先删除索引(DROP INDEX),再创建索引(CREATE INDEX)。

    1. 删除索引。

      ""openGauss=# DROP INDEX areaS_idx;
      

      当结果显示如下信息,则表示删除成功。

      ""DROP INDEX
      
    2. 创建索引。

      ""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诊断报告。

  1. 执行如下命令新建报告文件。

    ""touch  /home/om/wdrTestNode.html
    
  2. 连接系统库postgres。

    ""gsql -d postgres -p 端口号 -r
    
  3. 选择snapshot.snapshot表中两个不同的snapshot,当这两个snapshot之间未发生服务重启,便可以使用这两个snapshot生成报告。

    ""openGauss=#  select * from snapshot.snapshot order by start_ts desc limit 10;
    
  4. 执行如下命令,在本地生成HTML格式的WDR报告。

    1. 执行如下命令,设置报告格式。\a: 不显示表行列符号, \t: 不显示列名 ,\o: 指定输出文件。

      ""openGauss=# \a \t \o {报告路径}
      

      示例:

      ""openGauss=# \a \t \o /home/omm/wdrTestNode.html
      
    2. 执行如下命令,生成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 参数说明

      参数

      说明

      取值范围

      begin_snap_id

      要查看的某段时间性能的开始的snapshot的id(表snapshot.snaoshot中的snapshot_id)

      -

      end_snap_id

      结束snapshot的id,默认end_snap_id大于begin_snap_id(表snapshot.snaoshot中的snapshot_id)

      -

      report_type

      指定生成report的类型。

      • summary
      • detail
      • all,即同时包含summary和detail。

      report_scope

      指定生成report的范围。

      • cluster:集群
      • node:集群中某个节点。

      node_name

      • 在report_scope指定为single node时,需要把该参数指定为对应节点的名称。
      • 在report_scope为cluster时,该值可以指定为省略或者为NULL。

      -

  5. 执行如下命令关闭输出选项及格式化输出命令。

    ""\o \a \t
    
  6. 在/home/om/下根据需要查看WDR报告内容。

    表 2 WDR报表主要内容

    项目

    描述

    Database Stat(集群范围)

    数据库维度性能统计信息:事务,读写,行活动,写冲突,死锁等。

    Load Profile(集群范围)

    集群维度的性能统计信息:CPU时间,DB时间,逻辑读/物理读,IO性能,登入登出,负载强度,负载性能表现等。

    Instance Efficiency Percentages(集群/节点范围)

    集群级或者节点缓冲命中率。

    IO Profile(集群/节点范围)

    集群或者节点维度的IO的使用情况。

    Top 10 Events by Total Wait Time(节点范围)

    最消耗时间的事件。

    Wait Classes by Total Wait Time(节点范围)

    最消耗时间的等待时间分类。

    Host CPU(节点范围)

    主机CPU消耗。

    Memory Statistics(节点范围)

    内核内存使用分布。

    Time Model(节点范围)

    节点范围的语句的时间分布信息。

    Wait Events(节点范围)

    节点级别的等待事件的统计信息。

    Cache IO Stats (集群/节点范围)

    用户的表、索引的IO的统计信息。

    Utility status (节点范围)

    复制槽和后台checkpoint的状态信息。

    Object stats(集群/节点范围)

    表、索引维度的性能统计信息。

    Configuration settings(节点范围)

    节点配置。

    SQL Statistics(集群/节点范围)

    SQL语句各个维度性能统计:端到端时间,行活动,缓存命中,CPU消耗,时间消耗细分。

    SQL Detail(集群/节点范围)

    SQL语句文本详情。

openGauss例行重建索引相关推荐

  1. mysql repair 索引_mysql 创建索引、重建索引、查询索引、删除索引 转自:http://www.phpernote.com/mysql/942.html...

    本篇文章主要是对MySQL索引操作方法做了一下总结,包括创建索引.重建索引.查询索引.删除索引的操作.以下所列示例中中 `table_name` 表示数据表名,`index_name` 表示索引名,c ...

  2. Spring定时器的使用-多实例下定时重建索引

    2019独角兽企业重金招聘Python工程师标准>>> 前几天接到项目需要定时重建索引的任务,一开始试了试Java自带的Timer,不知道是不是自己对Timer的了解还不够的原因,感 ...

  3. SQL2K数据库开发二十三之索引操作重建索引

    1.可以使用下面的语句创建索引,重建索引应使用DROP_EXISTING选项. 2.在SQL Server查询分析器中输入如下的SQL语句,点击工具栏上的执行查询图标. 3.查询语句执行完毕后,结果窗 ...

  4. oracle建索引默认并发,ORACLE重建索引需要考虑问题

    一:考虑重建索引的场合 1:表上频繁发生update,delete操作 2:表上发生了alter table ..move操作(move操作导致了rowid变化) 二:判断重建索引的标准 索引重建是否 ...

  5. mysql为什么要重建索引_Oracle 重建索引的必要性

    索引重建是一个争论不休被不断热烈讨论的议题.当然Oracle官方也有自己的观点,我们很多DBA也是遵循这一准则来重建索引,那就是O 索引重建是一个争论不休被不断热烈讨论的议题.当然Oracle官方也有 ...

  6. 重建索引能释放掉字段因更改而产生额外列偏移量

    1建表和索引 create table index_test (id int identity(1,1),name sysname); create  clustered index nonidex_ ...

  7. 教你如何在 elasticsearch 中重建索引

    序言 Elasticsearch 是一个实时的分布式搜索分析引擎.Teambition 使用 Elastisearch 作为搜索引擎,为用户提供搜索服务,当我们决定存储某种数据时,我们需要使用PUT ...

  8. oracle如何并发重建索引,oracle数据库如何重建索引?

    [问题描述] oracle数据库表如何重建索引? [概述] 请在Oracle数据库里面执行如下语句: declare v_table_name  varchar(255):=''; v_index_n ...

  9. oracle表重命名 索引,CSS_在Oracle数据库中按用户名重建索引的方法,如果你管理的Oracle数据库下某 - phpStudy...

    在Oracle数据库中按用户名重建索引的方法 如果你管理的Oracle数据库下某些应用项目有大量的修改删除操作, 数据索引是需要周期性的重建的. 它不仅可以提高查询性能, 还能增加索引表空间空闲空间大 ...

最新文章

  1. Oracle Goldengate ORA-21780故障处理
  2. 在Visual C++中用ADO进行数据库编程(中)
  3. mysql long类型_MySQL数据类型笔记
  4. ssh系统环境搭建步骤
  5. HDU 4379 水题,大水,但我WA了很多次,做了很久
  6. springboot内存占用大_《SpringBoot整合redis、Scheduled/quartz定时任务》
  7. SVN客户端安装及汉化
  8. tekla二次开发用C语言,Tekla二次开发怎么弄?一篇文章入门tekla二次开发!
  9. 树莓派4B开机自动发微信报告ip地址
  10. PDF怎么转图片格式?分享三个不错的方法
  11. 2013年13寸Macbook Air 安装单windows 10系统
  12. vscode实用快捷键_23个常用的VSCode快捷键(动图演示)
  13. 来了!安利一款助力百度世界2020 “5G云代驾”、直播互动的黑科技
  14. 前车之鉴:从被回绝的系列原因出发,解读应聘阿里的注意事项
  15. 股票实战专题:6000102019一二月分析收盘价绘图
  16. DRSL: Deep Relational Similarity Learning for Cross-modal Retrieval-多模态学习总结
  17. 全国青少年编程等级考试python一级真题2020年12月(含题库答题软件账号)
  18. 前端异步请求async/await,axios的错误用法
  19. 软考一般什么时候出成绩呢?
  20. android访问服务器文件,访问服务器(加载图片)

热门文章

  1. UI设计是什么_UI设计是学什么?
  2. 美颜相机的基本功能实现
  3. 【ADUIO音频测试与认证】什么是耳机声压?耳机做CE要做声压测试标准是什么?
  4. java统计单词出现次数_java-统计一段句子中各单词出现的次数
  5. flutter中state生命周期与app生命周期与路由监听
  6. 创建可启动 WinPE 介质
  7. AV转USB;S-Video转USB宏晶微视频采集卡方案
  8. 蚂蚁金服@玉伯:我的前端成长之路
  9. 线性代数——PCA主成分分析计算步骤
  10. 机箱电源专业术语解析[转]