Skip to content

《面渣逆袭》MySQL 篇 · 第 10/10 章。原版 PDF(下载 / 打印)

64.百万级别以上的数据如何删除?

关于索引:由于索引需要额外的维护成本,因为索引文件是单独存在的文件, 所以当我们对数据的增加,修改, 删除, 都会产生额外的对索引文件的操作, 这些操作需要消耗额外的 IO, 会降低增/ 改/ 删的执行效率。

所以,在我们删除数据库百万级别数据的时候,查询 MySQL 官方手册得知删除数据的速度和创建的索引数量是成正比的。

  1. 所以我们想要删除百万数据的时候可以先删除索引

  2. 然后删除其中无用数据

  3. 删除完成后重新创建索引创建索引也非常快

65.百万千万级大表如何添加字段?

当线上的数据库数据量到达几百万、上千万的时候,加一个字段就没那么简单,因为可能会长时间锁表。

大表添加字段,通常有这些做法:

通过中间表转换过去创建一个临时的新表,把旧表的结构完全复制过去,添加字段,再把旧表数据复制过去,删除旧表,新表命名为旧表的名称,这种方式可能回丢掉一些数据。

用 pt-online-schema-change

pt-online-schema-change是 percona 公司开发的一个工具,它可以在线修改表结构,它的原理也是通过中间表。

先在从库添加 再进行主从切换如果一张表数据量大且是热表(读写特别频繁),则可以考虑先在从库添加,再进行主从切换,切换后再将其他几个节点上添加字段。

66.MySQL 数据库 cpu 飙升的话,要怎么处理呢?

排查过程:

(1 )使用 top 命令观察,确定是 mysqld 导致还是其他原因。

(2 )如果是 mysqld 导致的,showprocesslist ,查看 session 情况,确定是不是有消耗资源的 sql在运行。

(3 )找出消耗高的 sql ,看看执行计划是否准确, 索引是否缺失,数据量是否太大。

处理:

(1 )kill 掉这些线程 ( 同时观察 cpu 使用率是否下降) ,(2 )进行相应的调整 ( 比如说加索引、改 sql 、改内存参数) (3 )重新跑这些 SQL 。

其他情况:

也有可能是每个 sql 消耗资源并不多,但是突然之间,有大量的 session 连进来导致 cpu 飙升,这种情况就需要跟应用一起来分析为何连接数会激增,再做出相应的调整,比如说限制连接数等没有什么使我停留— — 除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟。

系列内容

面渣逆袭 JavaSE 篇#面渣逆袭 Java 集合框架篇#面渣逆袭 Java 并发编程篇#面渣逆袭 JVM 篇#面渣逆袭 Spring 篇#面渣逆袭 Redis 篇#面渣逆袭 MyBatis 篇#面渣逆袭 MySQL 篇#面渣逆袭操作系统篇#面渣逆袭计算机网络篇#图文详解 66 道 MySQL 面试高频题,这次吊打面试官,我觉得稳了(手动 dog )。整理:沉默王二,戳转载链接,作者:三分恶,戳原文链接。

本文整理自三分恶《面渣逆袭》系列的公开内容,仅供个人学习使用

本站仅供个人学习使用,请勿外传