背景信息

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

数据库支持的索引类型为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. GitHub开源城市结构公交路线数据可视化
  2. Kornia开源可微分计算机视觉库,基于Pytorch,GitHub 3000星
  3. Google 神秘 Fuchsia OS 的开源线索
  4. 单选选中改状态加边框(需要重绘:this.$forceUpdate(); )
  5. jdbc封装mysql_用Java手动封装JDBC连接池(一)
  6. 全球及中国石墨烯行业发展格局及投资盈利分析报告2021年版
  7. petapoco mysql_PetaPocoEfCoreMvc[持续更新]欢迎在github上star
  8. postman 发送到onenet,chinanet
  9. 键盘改键软件_一秒五键,一键三招,万种光污染,杜伽K310樱桃轴机械键盘感受...
  10. Java 进程间文件锁FileLock详解
  11. java 栈 先进后出_栈先进后出,堆先进先出
  12. power bi示例文件_Power BI桌面问答数据交互示例
  13. iostat lsof
  14. 澎湖师傅共制巨型“米龟” 延续两岸“乞龟”祈福民俗
  15. 【模糊神经网络】基于matlab的模糊神经网络仿真
  16. 常用公差配合表图_车间里常用的机械测量工具竟然这么多?涨知识
  17. 大数据与云计算概论简介
  18. 水彩绘画艺术效果PS动作
  19. linux 中meltdown指令,宇宙最强,meltdown论文中英文对照版(二)
  20. 【2022 年“SPSSPRO 杯”数学中国数学建模网络挑战赛】A题 人员的紧急疏散-第二阶段23页论文

热门文章

  1. JDK1.8(rpm)安装
  2. allegro绘制排针,相同规格4改2 改后会报告引脚不匹配
  3. 自我探索:2022年,拼命找到自己的使命
  4. 最小二乘与极大似然估计
  5. 【php基础入门】PHP环境搭建与初识php代码书写及演示PHP和JS中遍历数组的区别、引入外部文件等知识点学习笔记
  6. 三步教你从零开始成为单片机达人
  7. gta5怎么设置画质最好_GTA5画面设置怎样最好?GTA5画面推荐设置
  8. supervisor php cli,supervisor常用命令
  9. 09校内网、人人网、千橡公司笔试题
  10. 如何在PC端应用中运行小程序?