本文共 2767 字,大约阅读时间需要 9 分钟。
MySQL复制机制的基本原理是基于主从服务器的异步同步。主服务器记录所有修改数据库数据的SQL语句到binlog中,而从服务器负责定期从主服务器读取binlog内容,执行相应的操作。整个过程分为三个主要线程:binlog线程负责记录SQL语句,io线程负责读取并应用binlog内容,sql执行线程负责执行这些语句。这些线程相互协调,确保数据在主从服务器之间的一致性。
MySQL中MyISAM与InnoDB的区别
事务支持:InnoDB支持事务处理,而MyISAM不支持。 锁机制:InnoDB支持行级锁,而MyISAM采用表级锁。 MVCC支持:InnoDB支持多版本并发控制(MVCC),MyISAM不支持。 外键约束:InnoDB支持外键约束,MyISAM不支持。 全文索引:InnoDB不支持全文索引,而MyISAM支持。 InnoDB引擎的特性
InnoDB引擎具备以下四大特性:
插入缓冲(Insert Buffer):减少磁盘IO,提高插入性能。 二次写(Double Write):在内存缓冲区和磁盘之间优化写操作。 自适应哈希索引(Adaptive Hash Index):根据查询频率自动优化索引。 预读(Read Ahead):预先读取可能需要的数据页,减少IO次数。 SELECT COUNT(*)的性能对比
SELECT COUNT(*)在MyISAM中执行更快,因为MyISAM内部维护一个计数器,可以直接获取结果,而InnoDB需要扫描所有记录。
VARCHAR与CHAR的区别
- 数据存储:CHAR固定长度, VARCHAR可变长度。
- 字符限制:VARCHAR(50)最多存储50个字符,且在排序时占用内存与实际字符长度相当。
INT类型的含义
- 存储宽度:INT(20)表示显示宽度为20,但存储占用4字节。
- 零填充:如果未加参数,INT类型会自动填充前导零。
- 最大值:INT类型的最大值为2147483647。
为什么使用VARCHAR(50)
- 灵活性:适合存储不确定长度的文本数据。
- 性能优化:在索引和排序时,VARCHAR(50)与固定长度类似,且不会占用过多内存。
事务日志实现
事务日志通过InnoDB的日志缓冲(Innodb log buffer)实现,支持预写日志方式。每个事务在启动时获取LSN号码,并在提交时将日志缓冲写入磁盘,确保数据一致性。
Binlog日志格式
MySQL支持三种Binlog格式:
STATEMENT:记录每条修改数据的SQL语句。 ROW:记录每一行数据的修改内容。 MIXED:根据SQL语句类型选择记录格式。 MySQL性能问题解决
当CPU飙升到500%时,应:
检查进程列表,终止长时间未活跃的进程。 查看慢查询日志和错误日志,分析高负载原因。 优化查询,减少全表扫描,增加索引使用。 SQL优化方法
EXPLAIN结果解读:
- SELECT_TYPE:查询类型(SELECT,SELECT DISTINCT,SELECT UNION, etc.)。
- KEY:实际使用的索引。
- KEY_LEN:索引的长度。
- REF:查询时使用的索引列。
- EXTRA:优化建议或注意事项。
PROFILE:用于分析SQL执行时间和资源消耗。
数据库备份优化
备份计划:根据业务需求定制备份策略,如全量备份、增量备份、部分表备份等。
Mysqldump:通过读取日志文件生成备份文件,适合大规模数据备份。
XtraBackup:直接读取InnoDB数据文件,适合高效备份。
主从一致性校验
使用工具如PT-table-checksum或mysqldiff进行主从校验,确保数据一致性。
数据库支持Emoji
- UTF-8:默认支持Emoji,但需使用utf8mb4字符集。
- 升级方法:执行
ALTER TABLE table_name CONVERT TO ROWSOMASK = utf8mb4;.
数据字典维护
- 注释:在生产数据库中添加注释,方便团队理解字段含义。
- 工具导出:使用工具将注释导出为文档,分享给相关人员。
大字段处理
- 拆分:若查询频繁,建议将大字段拆分为多个较小字段,优化查询性能。
- 索引优化:为常查询字段建立索引,减少连接时间。
InnoDB行锁实现
行锁基于索引列实现,通过锁定索引列的值来锁定对应的行。例如:
SELECT * FROM `tab_with_index` WHERE `id` = 1 FOR UPDATE;
如果id不是索引列,会锁定整张表。
高效查询数据库表
- 索引优化:确保查询字段有索引。
- 分区表:将大表分区处理,减少查询压力。
- 查询优化:避免全表扫描,使用覆盖索引。
存储过程优缺点
- 优点:
- 提高执行效率,减少网络通信量。
- 提供一致性,避免多次运行相同代码。
- 缺点:
- 存储程序依赖于数据库版本,迁移困难。
- 存储程序可能导致锁竞争,影响并发性能。
索引作用与优缺点
- 作用:
- 加快查询速度。
- 减少插入、删除等操作时间。
- 提供唯一性约束。
- 优缺点:
- 索引占用额外存储空间。
- 索引需要维护,带来额外开销。
事务概念
事务是数据库操作的基本单位,确保所有操作要么全部成功,要么全部失败,保持数据一致性。
悲观锁与乐观锁
- 悲观锁:假设会发生并发冲突,阻止其他事务修改数据。
- 乐观锁:假设不会发生冲突,提交时检查数据一致性,必要时回滚。
数据库锁机制
- 行锁:锁定一行数据,粒度更细。
- 表锁:锁定整个表,粒度较大。
- 共享锁/排他锁:不同锁级别,决定锁冲突处理方式。
drop、delete与truncate
- drop:删除表及其数据,属于DDL操作。
- delete:删除指定行数据,属于DML操作。
- truncate:删除表中的所有数据,保留表结构,属于DML操作。
错误日志类型
- 错误日志:记录严重错误和崩溃信息。
- 查询日志:记录所有数据库请求信息。
- 慢查询日志:记录运行时间超过阈值的SQL。
- 二进制日志:记录数据变更操作。
- 中继日志:用于主从复制记录。
- 事务日志:记录事务操作,用于恢复。
范式解释
一范式(1NF):字段不混合多个属性,存储单一属性。 二范式(2NF):非关键字段不能部分依赖于候选键。 三范式(3NF):非关键字段不能传递依赖于候选键。 存储过程与函数
存储过程是一组预编译的SQL语句,用于执行复杂操作,提高性能和安全性。
SQL优化建议
索引优化:确保查询字段有合适索引。 查询优化:减少全表扫描,优化WHERE条件。 分页优化:使用合理的分页方式,避免极端情况。 查询缓存:使用query cache,减少数据库压力。 读写分离:优化I/O操作,减少磁盘压力。 通过以上优化措施,可以显著提升数据库性能和稳定性。
转载地址:http://tmfzz.baihongyu.com/