首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一次分区大表索引整改的案例分析(上)

,以提高更好的查询效率,但如果涉及的是一张很大的分区表,索引整改必须很慎重,不然调整不理想可能会引起严重的性能问题,因此,本文想根据这个问题提供一种分析思路和操作步骤,使分区大表的索引调整的操作可以考虑得更全面些...02 思考:把问题想清楚 因生产库调整的时间窗口有限,这里就需要考虑全面,尽量让本次索引调整达到更好的效果,本文以A表和B表以TIMEKEY时间字段为索引第一栏位的分区索引调整为主要目标,主要是因为在高并发...我们在接到分区大表索引整改任务需求后,需要考虑到索引调整涉及以下一些操作: 1.删除没有使用的索引 2.删除重复索引 3.索引存在大量碎片需要重建 4.旧索引是否被做了绑定 5.如何删除旧索引 6.调整原先不合适的索引...分析处理不被使用的索引 3.2.1 监控索引的使用情况 从awr中获取肯定被使用的索引,可排除后再进行索引监控,本次主要考虑监控A表和B表上索引是否都被使用。...A表和B表上以TIMEKEY字段为第一栏位的索引。

85830
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL大表增加唯一索引场景

    《新增字段的一点一滴技巧》 《探寻大表删除字段慢的原因》 《大表删除字段为何慢?》 《主键和唯一约束的索引肯定唯一?》...在没有大查询的情况下,持锁时间很短,基本可以忽略不计,所以强烈建议改表操作时避免出现大查询。 由此可见,表记录大小影响着加索引的耗时。如果是大表,将严重影响从库的同步延迟。...第 一,如果是大表,在执行【gh-ost-on -before-cut-over】脚本过程中(大表执行这个脚本时间较长),新增的记录跟原来数据有重复,这个就没法规避了。...唯一索引较于普通二级索引,在性能上并没有多大优势。相反,可能还不如普通二级索引。 在读请求上,唯一索引和普通二级索引的性能差异几乎可以忽略不计了。...在写请求上,普通二级索引可以使用到【Change Buffer】,而唯一索引没法用到【Change Buffer】,所以唯一索引会差于普通二级索引。

    2.7K40

    存储优化(3)-mongo大表加索引

    摘要 在存储优化(2)-排序引起的慢查询优化中我们提到过排序对查询选择索引的影响。但是的解决办法就是增加一个索引。在线上给mongo的大表增加一个索引要慎重。...在增加索引的过程中也遇到了一些问题,这边进行相关的记录与分析。 问题描述 表结构 _id,biz_Id,version,name 索引 1....":-1},"limit":1}} 增加一个索引 bizId,_id 增加索引过程 对于大表(该表记录数5亿),建立索引过程涉及到锁表,大量的读写操作、数据同步,肯定会影响线上的操作。...我们的数据分布,bizId,version在100以内的可能是95%,只有5%的在100以上,这会给索引判断造成误判。...总结 最后解决是通过强制索引来避免索引误判,当然也可以将排序改成 sort({bizId:-1,_id:-1}) 这样也不会误判 总结一下: 大表加索引,需要确保不会block表的其他操作,尽量选择空闲时候

    2.8K10

    表段、索引段上的LOGGING与NOLOGGING

    --==================================== -- 表段、索引段上的LOGGING与NOLOGGING --===============================...本文介绍了在表段,索引段使用 LOGGING与NOLOGGING时产生redo的大小以及DIRECT INSERT APPEND 的使用方法。...一、表段,索引段上使用一般DDL,DML时,LOGGING与NOLOGGING情况 1.查看数据库的归档模式 有关设置日志归档模式的问题,请参考: Oracle 联机重做日志文件(ONLINE...> create public synonym redo_size for redo_size; sys@ORCL> grant select on redo_size to scott; 3.在归档模式下比较表段上的...f.对于表上具有索引的表对象,如果新增的记录数量为整个表的很少一部分,则直接以append方式批量添加记录,如果原表记录很少, 实时性要求不是很高,而新增记录很多,可以先删除索引,在使用append方式追加记录

    1.8K20

    技术分享 | MySQL 大表添加唯一索引的总结

    在没有大查询的情况下,持锁时间很短,基本可以忽略不计,所以强烈建议改表操作时避免出现大查询。由此可见,表记录大小影响着加索引的耗时。如果是大表,将严重影响从库的同步延迟。...原表存在重复值的风险规避针对这类场景,规避方式可以采用hook功能辅助添加唯一索引,在改表前先校验待添加唯一索引的字段的数据唯一性。...第一,如果是大表,在执行【gh-ost-on-before-cut-over】脚本过程中(大表执行这个脚本时间较长),新增的记录跟原来数据有重复,这个就没法规避了。...唯一索引较于普通二级索引,在性能上并没有多大优势。相反,可能还不如普通二级索引。在读请求上,唯一索引和普通二级索引的性能差异几乎可以忽略不计了。...在写请求上,普通二级索引可以使用到【Change Buffer】,而唯一索引没法用到【Change Buffer】,所以唯一索引会差于普通二级索引。

    2.4K30

    pt-osc 亿级大表在线不锁表变更字段与索引

    NO.1 背景 大家在日常工作中,往往需要对数据库的表结构做变更,一般涉及到增删字段,修改字段属性等ALTER的操作。 然而,在大表场景下,特别是千万级、亿级的大表,如果处理不当。...其实在业界中,就有一个比较成熟的工具,针对大表的场景,可以在线进行Alter变更,且不会出现锁表的风险。除此之外,它还有其他的一些优点,让我们开始探索吧。...NO.3 pt-osc主要执行步骤 1、创建一个跟原表一模一样的新表,命名方式为'_正式表名_new'; 2、使用alter语句将要变更的内容在新创建的新表上做变更,避免了对原表的alter操作; 3、...为了安全起见,部分日志信息做了隐藏忽略。 NO.6 性能对比 前面介绍了很多pt-osc的优点,以及良好的特性。那么实际使用效果到底怎么样呢?在测试环境中,专门做了一个测试,让大家有更加直观的感受。...在测试库中,准备了一张1600万数据的大表,目标为对大表添加一个字段,分别使用存储过程和pt-osc工具,进行测试。 4.1 使用存储过程 首先使用存储过程做测试,为防止锁表,每次只更新200行。

    1.3K20

    【示例】在NO INMEMORY表上指定INMEMORY列属性

    从OracleDatabase 12c第2版(12.2)开始,可以在尚未指定为 INMEMORY 的对象的列级别指定 INMEMORY 子句。...在以前的版本中,列级 INMEMORY 子句仅在 INMEMORY 表或分区上指定时有效。此限制意味着在将表或分区与 INMEMORY 子句关联之前,该列无法与 INMEMORY 子句相关联。...如果表是NO INMEMORY(缺省值),则在将表或分区指定为INMEMORY之前,列级属性不会影响查询表的方式。如果将表本身标记为NO INMEMORY,则数据库将删除任何现有的列级属性。...在本示例中,您的目标是确保分区表中的列c3永远不会填充到IM列存储中。您执行以下步骤: 1、创建分区表 t 如下: 表t是 NO INMEMORY。...该表由列c1上的列表分区,并且具有三个分区:p1,p2和p3。 2、查询表中列的压缩(包括样本输出): 如输出所示,没有设置列级别INMEMORY属性。

    99320

    一次分区大表索引整改的案例分析(下)

    04 跟踪:调整索引后分析 4.1发现很多涉及调整表的SQL跑的异常缓慢 新建11和41号索引后,发现大量涉及B表查询的SQL使用上了11和41号的索引,但执行却异常缓慢,结合业务逻辑和执行计划判断其应该使用其他更合适的已有索引...'&OWNER',tabname => '&TABLENAME ',colname => 'eventname',density => 0.01); 修改密度值后,sql执行正常了,但此时发现其他大表也存在密度不准确的问题...,10.2.0.4以下没有参与基数计算popular_values.COUNT表示popular_values的个数,NP.COUNT(i)表示的是每个nonpopular value在表中的记录数在计算...11、41号索引后虽然已经执行统计信息收集,但因收集的方式不对,造成基数和密度不正确,导致很多不使用11、41号索引的SQL也使用这个索引而造成的故障,因此对于大表分区,在统计信息收集后,还需要进一步通过...2.我们知道创建索引的时候会自动收集统计信息,但在创建大表索引之后,仍需要详细检查新建索引是否有统计信息,特别是分区索引,可能存在跨日时间部分分区统计信息不全的情况,导致成本错误,使其他sql走错索引。

    64140

    PostgreSQL在线创建索引你不得不注意的坑

    Create index concurrently 我们知道数据库创建索引可能会锁住创建索引的表,并且用该表上的一次扫描来执行整个索引的构建,这样在创建索引时会影响在线业务,非常大的表创建索引可能会需要几个小时...从官方文档中我们可以了解到如下信息,在并发(concurrently)索引构建中,索引实际上是在事务中被构建的,它在两个事务中发生两次表扫描。...这个索引会被查询所忽略,因为它可能不完整。不过它仍将消耗更新开销,所以对于这类索引我们应该将它删除重建或者在变更窗口执行reindex。...4级锁,该锁是自排他的,会和同样的锁类型冲突,所以在一个表上同时只能有一个并发索引构建。...按理说在会话1只操作了test1表,不会影响test2表上的索引创建,但是结果却是会话2 hang住了。这样验证了如果在snapshot2之前开启了数据库事务,那么索引的创建会等待该事务的结束。

    5.7K21

    “王者对战”之 MySQL 8 vs PostgreSQL 10

    但是现在,通过引用同一个表中的 boss_id 来递归地遍历一张雇员表,或者在一个排序的结果中找到一个中值(或 50%),这在 MySQL 上不再是问题。...(当然,线程本地排序缓冲区等使这种开销变得不那么重要,即使在不可以忽略的情况下,仍然如此。)...聚簇索引 vs 堆表 聚簇索引是一种表结构,其中的行直接嵌入其主键的 b 树结构中。一个(非聚集)堆是一个常规的表结构,它与索引分别填充数据行。...在Postgres中,当您尝试更新时,整个行必须被复制,以及指向它的索引条目也被复制。这在一定程度上是因为Postgres不支持聚集索引,所以从索引中引用的一行的物理位置不是由逻辑键抽象出来的。...因此,在MySQL上能更好,更可预测整体性能。 Garbage Collection 垃圾回收 在Postgres中VACUUM上开销很高,因为它在主要工作在堆区,造成了直接的资源竞争。

    4.3K21

    MySQL8和PostgreSQL10功能对比

    但是现在,在同一个表中employees引用对表进行递归遍历boss_id,或者在排序结果中找到中间值(或50%百分位数),在MySQL上不再是问题。...与MySQL的“每次连接线程”模型相比,内存压力更大,后者在64位平台上,线程的默认堆栈大小为 256KB。(当然,线程局部排序缓冲区等可以使此开销的重要性降低,即使可以忽略不计,但仍然如此。)...请记住,在Postgres中,可以通过这种方式将同一记录的多个版本存储在同一页面中。 ? MySQL的表空间结构与Oracle的表空间结构相似,它具有段,范围,页和行的多个层次结构层。...MySQL上的压缩不仅适用于页面外的大对象,而且适用于所有页面。它是通过在稀疏文件中使用打孔来实现的,稀疏文件受ext4或btrfs等现代文件系统支持。...为此,Postgres将旧数据保留在堆中直到VACUUMed,而MySQL将旧数据移动到称为回滚段的单独区域。 在Postgres上,当您尝试更新时,必须复制整行以及指向该行的索引条目。

    2.8K20

    亿级大表垂直拆分:上云业务的工程实践

    下面我简单介绍下(做了脱敏处理): 过去对表结构设计时,研发由于忽略了业务原子性,使用了一个大字段(TEXT/LONGTEXT/JSON 等)存储了耦合业务的大数据字段,如今表行数已经接近 1 亿了,总使用空间超过...,第 1 点提到的问题,将是一颗定时炸弹,埋在不断被堆积的业务里; 3、DB 运维:在追求平滑升级的背景下,我们对表结构变更时,一般选择是在业务低峰期,对临时表进行拷贝,然后执行 DDL 变更(增删字段和索引...),最后通过 rename 完成业务切换;大表的临时表将具有跟原表同样大小体积,这对运维来说,每次备份大表都是一个巨大的资源和时间开销。...4、业务隐患:为了完成 DB 高可用部署,我们的业务上云之后,采取了一主多从的部署架构。因此 DDL 变更期间,由于强同步配置,难免造成从库的数据延迟问题。...经过和 DBA 的一起分析,发现该表存在一个 LONGTEXT 的字段,它占用了几乎整个表体积空间的 60%以上。 在处理这个大表的问题上,我们有考虑过水平拆分的手段。

    8732911

    超全的数据库建表SQL索引规范,适合贴在工位上!

    下边分为建表规约、SQL规约、索引规约三个部分,每部分的每一条都有强制、建议两个级别,大家在参考时,根据自己公司的情况来权衡。...【建议】(4)在WHERE条件的属性上使用函数或者表达式 解读:Mysql无法自动解析这种表达式,无法使用到索引。 【强制】(5)禁止使用外键与级联,一切外键概念必须在应用层解决。...提高索引的效率,相应我们在Mapper中编写SQL的WHERE条件中有多个条件时,需要先看看当前表是否有现成的联合索引直接使用,注意各个条件的顺序尽量和索引的顺序一致。...【建议】(6)在较长VARCHAR字段,例如VARCHAR(100)上建立索引时,应指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度即可。...【建议】 (10)在多个表进行外连接时,表之间的关联字段类型必须完全一致 解读:当两个表进行Join时,字段类型若没有完全一致,则加索引也不会生效,这里的完全一致包括但不限于字段类型、字段长度、字符集、

    99010

    PostgreSQL 如果想知道表中某个条件查询条件在索引中效率 ?

    在一些大表存在的数据库,去不断查询某一个值在这个大表里面的行数,一直是不受欢迎的事情,最后找到了一个还算靠谱的方案。...当然今天的文字并不是要说这个问题,我们提高难度,如果有需求问你,怎么知道现在的表中,某个字段的值,如果被查询的在有索引的情况下,效率如何,通过这个问题,我们可以判断我们的索引该怎么建立。...1 n_distinct 2 most_common_vals 3 most_common_freqs 这里根据相关的表信息的描述,n_disinct的值,在不等于1的情况下,都可以考虑来讲这个字段作为建立索引的可选项...同时我们针对 most_common_vals 对应 most_comon_freqs 两个字段的值来判定所选的索引,在查询的时候被作为条件时,可能会产生的影响。...,通过这个预估的占比,我们马上可以获知,这个值在整个表行中的大约会有多少行,但基于这个值是预估的,所以不是精确的值,同时根据analyze 中对于数据的分析,他们是有采样率的表越大行数越多,这个采样率会变得越小

    18810

    pgcopydb的使用

    该进程负责将所有大对象从源复制到目标。在第 3 点提到的每个复制表子过程中,只要复制表数据,pgcopydb 就会获取索引列表并在目标服务器中并行创建它们。...requirements --filters Use the filters defined in 可以基于配置文件指定需要同步或者忽略的表清单...索引定义的语句被修改为包括 IF NOT EXISTS,并允许跳过目标数据库上已存在的索引$ pgcopydb copy constraints # 该命令从源数据库获取索引列表,并在目标数据库上运行每个索引...在源数据库上的方式相同,然后对目标数据库上的每个序列进行调用。...compare   该命令连接到源数据库和目标数据库并执行 SQL 查询以获取有关迁移的表、索引和序列的 Postgres 目录信息。

    26210

    资源 | Kaggle数据科学项目索引表,10大类93项,更新中

    为了使Kaggle上的资源获得最大化的利用,一位来自印度的数据科学家sban设计了一个数据科学模型、技术和工具的项目索引表。...整个数据科学表,一共提供了十个类别,每个类别里面都有分支,分支里的“词汇”在根据投票数量排列的同时,也在右侧说明了作者,项目实现所使用的编程语言以及阅读数,评论以及获得的投票数量。...另外,这个“索引表”还一直在更新,所以非常具有收藏的价值。 ?...下面文摘菌简单带大家浏览一下这10个类别,想要具体了解的同学请点击: https://www.kaggle.com/shivamb/data-science-glossary-on-kaggle/ 1.回归算法 在本类别中

    79500
    领券