建议收藏|MySQL数据库DBA 防坑指南

本文分享了MySQL运维中的常见问题和解决方案,包括max_connections参数调整、文件句柄限制、SQL隐式转换的影响、索引使用、自增键管理、大表安全删除、AdaptiveHashIndex问题、MHAVIP切换、pt-archiver数据完整性、pt-osc和gh-ost的数据丢失风险、死锁分析、大对象类型的风险、CPU%user高和查询挂起的排查。提供了一系列实用的运维技巧和避免故障的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

特别邀请了Oracle MySQL ACE Director 叶金荣(叶老师),联合为大家带来了MySQL运维防坑的视频号在线直播,了解了这些坑可以让大家在日常运维更加平稳,全场300多人参与,直播持续了一个半小时,约1小时的分享和半小时的互动答疑,可谓干货满满。我们将直播涉及的关键内容进行了整理,形成了这份MySQL DBA防坑指南,建议大家可以收藏下来,类似问题参考解决。

1. MySQL连接数问题

MySQL里的max_connections参数代表mysql数据库的最大连接数,参数默认是151,显然不适用于生产,如果请求大于默认连接数,就会出现无法连接数据库的错误,会遇到too many connections的报错信息。

Mysql5.5、mysql5.6、mysql5.7:默认的最大连接数都是151,上限为:100000

max_connections需要设置的一个合理的值,并需要做好监控,避免连接数满引发业务故障(生产环境建议5000-10000左右,没有固定的值,根据各自业务情况来定)。

另外如果数据库连接数过高,需要分析业务端是否存在大量刷MySQL连接的情况,比如大量的短连接,连接没有正常关闭,代码逻辑问题等。

2. MySQL文件句柄设置

在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统。当完成任务后,再通过调用系统函数来关闭该文件。

在使用MySQL的过程中,有些用户碰到了打开文件句柄数过多的错误,查看用户实例的打开句柄个数,确实超过了系统设置的值,一旦出现了这种错误,将会带来连锁的各种错误(取决于当时正在操作什么类型的文件,以及什么操作)。

open_file_limits的设置的值,mysqld会通过setrlimit系统调用来初始化本进程可以使用的最大文件句柄数。

操作系统范围限制,可以通过编辑/etc/sysctl.conf或编辑指令fs.file-max来增加Linux中打开文件的限制。

3. 注意SQL隐式转换的坑

在开发规范中,我们往往会要求研发避免在where条件中出现隐式类型转换,什么是隐式转换:即在where语句中条件的值和条件对应的列的数据类型不一致。如 where id=‘123’,而id的类型为bigint,或者where code=100,而code的类型为varchar,隐式转换会产生以下两个问题:

1. 隐式类型转换可能导致索引失效。

2.隐式类型转换可能产生非预期的结果。

4. SQL为什么一会可以走到索引,一会走不到索引

有些时候开发同学会找到DBA,反馈有一条SQL有索引,之前也能走到索引,查询性能非常的高,突然收到慢查询报警,查了十多秒,这种情况产生的原因一般和数据内容有关。

MySQL如果通过索引选择扫描行数过多(大约20%以上,这个不是确定的),优化器会认为使用全表扫描更佳,从而会走全表扫描,当然很多时候其实还是走索引性能会更好一点,MySQL选择优化器并不是那么智能。

举个例子,微博的用户有一张评论表,查询我们这些小众用户的评论会走索引,查询非常的快,如果正好查询的是一个大V账号,有

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值