添加一个索引要投产,需要哪些步骤?

2024-05-09 07:36
文章标签 步骤 需要 索引 投产

本文主要是介绍添加一个索引要投产,需要哪些步骤?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

9b834e5454a444fce8f350ee88fc1012.png

编程一生

0db72c1cbe9388745e41c9af0e4be3e0.png

致力于写大家都能看懂的、有深度的

技术文章

05/2024

01

开场白

46ae62bfc7508a5fae596c86ea7b32fd.png

亚马逊有个bar raiser文化。就是说新招来的人一定要超过之前入职人员的平均水平,宁缺毋滥。越来越多的公司在推行这种文化。在这种氛围下:“虽然我不懂,但是活儿是能出来的”这种解决问题型人才也在以飞奔的速度转型为“活儿能,话能说明白”的综合素质人才。

7dca2be972361c7e00dc830dc3063ef4.png

今天咱们就来聊一聊一个简单的添加索引在这个时代要怎样实施。

7d1c0788021a3dcb40b11e9e23e3b32b.png

02

添加普通索引可能引起的问题

尽管添加索引可以优化SQL语句的性能,但是添加索引的同时也会带来不小的开销。尤其是在有大量的索引的情况下。

mysql添加索引造成的影响如下:

  • DML(数据操作语言)影响,在表上添加索引会直接影响写操作性能(因为添加记录的同时还有创建相应记录的索引,这也是要耗资源的)。

  • DDL(数据定义语言)影响,随着表大小的不断增加,对性能的影响也会不断增加。比如:ALTER语句会耗费更多的时间。

  • 磁盘空间的影响,往往在添完一个索引后表占用的空间大小会成倍地增加。

4bee7486a90a6d26ee0a5bab30965358.png

03

新增唯一索引造成数据丢失问题

MySQL目前主要有三种DDL方式,MySQL原生的DDL,pt-osc和gh-ost。从gh-ost和pt-osc的原理上来讲,全量都是通过insert ignore拷贝到新表,然后增量数据通过触发器或者binlog的方式merge到新表中,这样的话在以下三种场景会出现数据丢失:

  • 新加字段,并对该字段添加唯一索引;如果这时候使用 gh-ost 变更,最后只会剩下一条记录

  • 原表存在重复值,如下数据表;如果这时候使用 gh-ost变更,就会丢弃重复记录

  • 改表过程中新写(包含更新)的数据出现重复值,如果这时候使用 gh-ost 变更,在拷贝原表数据期间,可能会覆盖重复数据

方案

是否丢数据

建议

原生
ONLINE

DDL 不丢数据适合小表,及对从库延迟没要求的场景

pt-osc

可能丢数据,无辅助功能可以避免丢数据的场景不适合添加唯一索引
gh-ost可能丢数据,有辅助功能可以避免部分丢数据的场景适合添加唯一索引

4333c553d8356ac7ecb8b3f248c0a756.png

04

添加索引投产前要怎样做

测试环境充分验证

添加索引前备份,在索引后,将数据与备份数据进行比对,确保数据符合预期。

观察添加索引的耗时,准确评估对生产环境的影响。

投产前通知并制定紧急预案

通知DBA和所有使用此数据库的团队和其他相关团队。DBA在添加索引前先备份,一旦出现问题可立即回滚。

投产时

业务低峰期进行变更降低业务影响。密切观察监控,做好回滚准备。

75bf259fd037aba3d86943c5e8d6ff98.png

05

总结

之前遇到过一个开发小哥哥修改了MQ的一个参数,这个参数的作用是:在消费消息时,原本线程来获取需要消费的消息,如果获取不到就阻塞直到有消息为止;修改后的逻辑是线程来获取需要消费的消息,如果获取不到就返回做别的事情,过一段时间再来获取消息。如果粗略来考虑:这就是把阻塞变成非阻塞来提高效率的一个配置修改啊。所以开发小哥哥也没压测,甚至没有告诉任何人他做了这个变更,直接投产了。这个变更造成了公司数千万的资金损失。

敬畏生产,不要因为只是添加一个索引或者修改一个配置而不做测试直接投产。

00e22c51e54aa2d9252cf20bd85381d2.png

42613f0e84a50b6c4eaf0190c5f443df.jpeg

这篇关于添加一个索引要投产,需要哪些步骤?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/972785

相关文章

Nginx实现动态封禁IP的步骤指南

《Nginx实现动态封禁IP的步骤指南》在日常的生产环境中,网站可能会遭遇恶意请求、DDoS攻击或其他有害的访问行为,为了应对这些情况,动态封禁IP是一项十分重要的安全策略,本篇博客将介绍如何通过NG... 目录1、简述2、实现方式3、使用 fail2ban 动态封禁3.1 安装 fail2ban3.2 配

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

Goland debug失效详细解决步骤(合集)

《Golanddebug失效详细解决步骤(合集)》今天用Goland开发时,打断点,以debug方式运行,发现程序并没有断住,程序跳过了断点,直接运行结束,网上搜寻了大量文章,最后得以解决,特此在这... 目录Bug:Goland debug失效详细解决步骤【合集】情况一:Go或Goland架构不对情况二:

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

nginx部署https网站的实现步骤(亲测)

《nginx部署https网站的实现步骤(亲测)》本文详细介绍了使用Nginx在保持与http服务兼容的情况下部署HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录步骤 1:安装 Nginx步骤 2:获取 SSL 证书步骤 3:手动配置 Nginx步骤 4:测

Springboot 中使用Sentinel的详细步骤

《Springboot中使用Sentinel的详细步骤》文章介绍了如何在SpringBoot中使用Sentinel进行限流和熔断降级,首先添加依赖,配置Sentinel控制台地址,定义受保护的资源,... 目录步骤 1: 添加 Sentinel 依赖步骤 2: 配置 Sentinel步骤 3: 定义受保护的

Ollama整合open-webui的步骤及访问

《Ollama整合open-webui的步骤及访问》:本文主要介绍如何通过源码方式安装OpenWebUI,并详细说明了安装步骤、环境要求以及第一次使用时的账号注册和模型选择过程,需要的朋友可以参考... 目录安装环境要求步骤访问选择PjrIUE模型开始对话总结 安装官方安装地址:https://docs.

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下