随笔分类 - DBA
摘要:在大表执行DDL的过程中,若临时中断,会发生什么状况,需要特别处理吗? 前提说明:MySQL5.7.23、innodb表、“双1”。 1、添加/删除列,采用copy的方式。 ctrl+c。在当前session中,手动执行ctrl+c。无影响,并且会自动删除产生的临时文件。 kill -9。在执行DD
阅读全文
摘要:某人曰,在数据检索的条件中使用!=操作符时,存储引擎会放弃使用索引。 理由:因为检索的范围不能确定,所以使用索引效率不高,会被引擎自动改为全表扫描。你认可他的说法吗? 通常情况下,这个说法是正确的。当然,也有特殊情况,话不能说绝对了。 有一个测试表共80万条数据,其中type列只有1、2两个值,分别
阅读全文
摘要:MySQL的表中有唯一索引,设置unique_checks为0时,还能否写入重复值? 首先,即便设置unique_checks=0,也无法往唯一索引中写入重复值。 其次,设置unique_checks=0的作用在于,批量导入数据(例如load data)时,在确保导入数据中无重复值时,无需再次检查其
阅读全文
摘要:虽然命中索引,但SQL效率仍然慢,可能有哪些原因? 1、索引字段重复值或者空值太多。 2、查询条件范围太广返回结果数太多,全索引扫描。 3、没有利用到覆盖索引,造成大量回表。 4、查询字段过多,并且包含大字段。 5、索引字段数据分布太随机,回表不多也会引起大量随机io。 6、统计信息不准。 7、表的
阅读全文
摘要:MySQL线上实例insert慢常见原因有哪些? 1、锁等待:SQL产生的间隙锁、自增锁、死锁、MDL锁、外键检查锁,锁等待时间。 2、iops达到瓶颈:例如备份任务、高频binlog redolog等文件写入。 3、semi-sync:因为网络抖动,MySQL半同步、增强半同步导致语句卡住。 4、
阅读全文
摘要:innodb已经使用了独立undo表空间,那么ibdata1还会增长吗,为什么? 使用独立undo表空间后,ibdata1里主要存储Data dictionary、Rollback segments、Double write buffer、change buffer、Foreign key cons
阅读全文
摘要:大量SQL语句文本,如何快速导入到MySQL中? 1、可在SQL文本前,添加set session sql_log_bin=0(需要在从库也导入一次)。 2、导入期间临时修改参数sync_binlog=10000、innodb_flush_log_at_trx_commit=0、innodb_aut
阅读全文
摘要:MySQL运行环境中,当发现系统已经用到了swap,该怎么处理? 一般来说,发生swap的原因是系统认为内存不够了。 那么,当物理内存真的不够了,或者著名的NUMA都是引起swap的可能原因。通常的应对方法有几种: 1、通过BIOS、系统内核参数关闭NUMA,或者在mysqld启动时,利用numac
阅读全文
摘要:如何正确监控MySQL主从复制延迟(请考虑5.6版本前后区别,即并行复制及GTID等因素)? 不要再相信Seconds_Behind_Master。 1、基于Binlog和Postion复制 通过观察io线程减去sql线程对比的方式对比: Master_Log_File == Relay_Maste
阅读全文
摘要:show proceslist时发现大量的sleep,有什么风险吗,该如何处理? (一)可能的风险有: 1、大量sleep线程会占用连接数,当超过max_connections后,新连接无法再建立,业务不可用; 2、这些sleep线程中,有些可能有未提交事务,可能还伴随着行锁未释放,有可能会造成严重
阅读全文
摘要:监控MySQL的性能,应该主要观察那几个监控项? 一、liunx操作系统层面 1、整体cpu负载的%user最好不长期超过20%(若%user太高,有极大可能性是索引使用不当)。 2、整体cpu负载的%iowat最好不长期超过10%(确认I/O子系统是否有明显瓶颈)。 3、整体cpu负载的%idle
阅读全文
摘要:MySQL所有的压力都在一个CPU核心上,为什么会产生这种现象,改如何解决? 一、为什么会产生这种现象? 事实上,并不是所有压力都在一个逻辑CPU上,其实是因为MySQL还不支持并行计算,因此一个会话中的SQL只会被分配到一个逻辑CPU上。 之所以出现这种现象,大概率是因为下面几种情况: 1、某个会
阅读全文
摘要:大表,某列无索引,先需要查询该列,删除符合条件的记录,大约占40%数据量,请问有何更好的方案吗? 一、存在其他索引(主键、唯一索引、普通索引)的情况 1、可利用现有索引分段扫描全表,例如每次只读取1000条记录,然后再根据条件进行判断并删除数据(最好是进行归档,而不是真正删除)。 2、由于要删除掉的
阅读全文
摘要:MySQL DBA运维中那些动作属于危险性操作? 1、MySQL无备份、备份无校对。 2、执行rm -rf / tmp 等类似操作,执行rm 前要三思。 3、执行kill -9等操作。 4、binlog 非row格式,执行dml操作(update、delete)。 5、在生产环境执行测试命令。或在生
阅读全文
摘要:云环境上自建MySQL,有哪些高可用实现方案? 1、基于VPC环境, 支持独立分配IP相关IP段的,还是可以考虑VIP方案,云环境把协议阉割,使用TCP方式,如:青云开源的Xenon, MHA 。 在VPC中,是可以自主绑定私有IP,还是比较方便。 2、基于MGR、PXC构建MySQL高可用。因为M
阅读全文
摘要:RDS上,MySQL实例中某张表数据小于tmp_table_size,但有查询时会报错临时空间满 The table '/data/mysql/zst/tmp/#sql_13975_23' is full. 原因可能是什么? 一、可能有下面几种情况: 1、在SQL中执行group by、order
阅读全文
摘要:MySQL误删除frm文件该怎么办? 情况一:误删后还未重启MySQL 1、从proc中恢复.frm文件。 # cp /proc/`pidof mysqld`/fd/误删除的.frm /datadir/db/对应库的目录/ 情况二:误删后也重启MySQL了 从备份中获取表结构。 1、物理备份 从物理
阅读全文
摘要:生产环境MySQL死锁如何监控及如何减少死锁发生的概率。 首先,死锁并不是"锁死",死锁是由于两个或两个以上会话锁等待产生回路造成。 一、死锁监控及处理方法 对于死锁的监控,各个版本都提供了innodb_print_all_deadlocks选项,打开该选项即会将死锁的日志输出到MySQL的错误日志
阅读全文
摘要:一个大事务,有很多更新,现在被回滚了,但是又着急关机重启,怎么办才好? 1、首先,尽量避免在MySQL中执行大事务,因为大事务将会带来主从复制延迟等问题。 2、大事务被kill,MySQL会自动进行回滚操作,通过show engine innodb status的TRANSACTIONS可以看到RO
阅读全文
摘要:如何降低UPDATE/DELETE时WHERE条件写错,或者压根没写WHERE条件带来的影响? 0、尽量不要在线手工执行任何SQL命令,很容易出差错。线上直接执行SQL命令最好有第二检查人帮助确认。 1、最好在测试环境执行SQL确认无误后,再到生产环境执行,或者提前在本地文本环境编辑好确认后再执行。
阅读全文