mysql知识

75 阅读2分钟
  1. MySQL数据库cpu飙升到100%的话怎么处理?
当 cpu 飙升到 100%时,先用操作系统命令 top 命令观察是不是 mysqld 占用导致的,

如果不是,找出占用高的进程,并进行相关处理。

如果是 mysqld 造成的, show processlist,看看里面跑的 session 情况,

是不是有消耗资源的 sql 在运行。找出消耗高的 sql,看看执行计划是否准确,

index 是否缺失,或者实在是数据量太大造成。

一般来说,肯定要 kill 掉这些线程(同时观察 cpu 使用率是否下降),

等进行相应的调整(比如说加索引、改 sql、改内存参数)之后,再重新跑这些 SQL。

也有可能是每个 sql 消耗资源并不多,但是突然之间,有大量的 session 连进来导致 cpu 飙升,

这种情况就需要跟应用一起来分析为何连接数会激增,

再做出相应的调整,比如说限制连接数等

2,主键使用自增ID还是UUID?

推荐使用自增ID,不要使用UUID。

因为在InnoDB存储引擎中,主键索引是作为聚簇索引存在的,也就是说,

主键索引的B+树叶子节点上存储了主键索引以及全部的数据(按照顺序),

如果主键索引是自增ID,那么只需要不断向后排列即可,如果是UUID,

由于到来的ID与原来的大小不确定,会造成非常多的数据插入,数据移动,然后导致产生很多的内存碎片,进而造成插入性能的下降。

总之,在数据量大一些的情况下,用自增主键性能会好一些。

关于主键是聚簇索引,如果没有主键,

InnoDB会选择一个唯一键来作为聚簇索引,如果没有唯一键,会生成一个隐式的主键

3,MySQL备份计划如何制定

100G 内的库:mysqldump

mysqldump更加轻巧灵活,备份时间选在业务低峰期,

可以每天进行都进行全量备份(mysqldump 备份出来的文件比较小,压缩之后更小)

100Gy以上库:xtranbackup

备份速度明显要比 mysqldump 要快。

一般是选择一周一个全备,其余每天进行增量备份,备份时间为业务低峰期。