分类: MySQL

21 篇文章

MySQL 主从复制
原理 主从复制的流程:两个日志(binlog二进制日志&relay log日志)和三个线程(master的一个线程和 slave的二个线程) 主库的更新操作写入binlog二进制日志中。 master服务器创建一个binlog转储线程,将二进制日志内容发送到从服务器。 slave机器执行START SLAVE命令会在从服务器创建一个IO线程…
MySQL优化的问题
SQL和索引优化 https://wsmcs.cn/?p=211 慢查询日志 => 设置慢查询时间 => 记录慢查询sql => explain分析sql执行计划 => 优化措施 应用上的优化 连接池 https://wsmcs.cn/?p=125 引入缓存 存储热点数据。业务上增加redis、memcache,一般用缓存把…
redo log 重做日志
简介 redo log:重做日志,用于记录事务操作的变化,确保事务的持久性。redo log是在事务开始后就开始 记录,不管事务是否提交都会记录下来,在异常发生时(如数据持久化过程中掉电),InnoDB会使用 redo log恢复到掉电前的时刻,保证数据的完整性。 事务最重要的是写redo log,而不是写数据。 redo log有缓存区,节约磁盘…
死锁
死锁 MyISAM 表锁是 deadlock free 的, 这是因为 MyISAM 总是一次获得所需的全部锁,要么全部满足, 要么等待,因此不会出现死锁。但在 InnoDB 中,除单个 SQL 组成的事务外,锁是逐步获得的,即锁 的粒度比较小,这就决定了在 InnoDB 中发生死锁是可能的。 锁的优化建议 尽量使用较低的隔离级别 设计合理的索引并…
InnoDB表级锁 和 意向共享锁 和 意向排它锁
InnoDB表级锁 在绝大部分情况下都应该使用行锁,因为事务和行锁往往是选择InnoDB的理由,但个别情况下也使用 表级锁; 1)事务需要更新大部分或全部数据,表又比较大,如果使用默认的行锁,不仅这个事务执行效率低, 而且可能造成其他事务长时间等待和锁冲突; 2)事务涉及多个表,比较复杂,很可能引起死锁,造成大量事务回滚。 意向共享锁和意向排他锁 …
MVCC 和 undo log
MVCC(多版本并发控制) Innodb 提供了两个读取操作:锁定读 和 非锁定读(MVCC提供的快照读) MVCC提供的快照读:依赖底层的 undo log回滚日志 事务日志:undo log回滚日志 redo log重做日志 ACID:ACD(事务日志)+ I(锁+MVCC) undo log的主要作用: 事务发生错误时回滚 rollback …
MySQL 的锁
一般使用“已提交读”(oracle)、“可重复读”(mysql)。 表级锁 & 行级锁 表级锁:对整张表加锁。开销小,加锁快,不会出现死锁;锁粒度大,发生锁冲突的概率高,并发度 低。 行级锁:对某行记录加锁。开销大,加锁慢,会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并 发度高。 排它锁和共享锁 排它锁(Exclusive):X 锁,写…
MySQL 快捷实验
设置事务提交方式为手动提交 set autocommit=0; 未提交读 set tx_isolation='READ-UNCOMMITTED'; 已提交读 set tx_isolation='READ-COMMITTED'; 可重复读 set tx_isolation='REPEATABLE-RE…
事务
事务概念 一个事务是由一条或者多条对数据库操作的SQL语句所组成的一个不可分割的单元,只有当事务中的所有操作都正常执行完了,整个事务才会被提交给数据库;如果有部分事务处理失败,那么事务就要回退到最初状态,因此,事务要么全部执行成功,要么全部失败。 事务的几个概念如下: 事务是一组SQL语句的执行,要么全部成功,要么全部失败,不能出现部分成功,部分失…
索引和慢查询日志
怎么切入SQL和索引的优化问题?慢查询日志找出耗时的sql语句。 将阈值设置为0.5秒,进行俩次超出日志阈值的查询。 mysql> set global long_query_time = 0.5; Query OK, 0 rows affected (0.00 sec) mysql> select * from t_user wher…