<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[黄金时代的架构之路]]></title><description><![CDATA[对代码不满足，是任何真正有天才的程序员的根本特征]]></description><link>https://blog.youkuaiyun.com/fvdfsdafdsafs</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; fvdfsdafdsafs]]></copyright><item><title><![CDATA[【MySQL 数据宝典】【事务&锁】- 002 事务控制的演进]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138713480</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138713480</guid><author>fvdfsdafdsafs</author><pubDate>Sat, 11 May 2024 14:05:05 +0800</pubDate><description><![CDATA[MySQL中实现MVCC（多版本并发控制）的机制主要基于undo log多版本链和ReadView机制。通过undo log多版本链和ReadView机制的结合，MySQL实现了MVCC机制，确保了数据库在并发操作下的一致性和隔离性。]]></description><category></category></item><item><title><![CDATA[【MySQL 数据宝典】【事务&锁】- 001 ACID特性介绍]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138675089</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138675089</guid><author>fvdfsdafdsafs</author><pubDate>Fri, 10 May 2024 17:38:44 +0800</pubDate><description><![CDATA[未提交事务，写入后崩溃：程序还没修改完三个数据，但数据库已经将其中一个或两个数据的变动写入磁盘，此时出现崩溃，一旦重启之后，数据库必须要有办法得知崩溃前发生过一次不完整的购物操作，将已经修改过的数据从磁盘中恢复成没有改过的样子，以保证原子性。已提交事务，写入前崩溃：程序已经修改完三个数据，但数据库还未将全部三个数据的变动都写入到磁盘，此时出现崩溃，一旦重启之后，数据库必须要有办法得知崩溃前发生过一次完整的购物操作，将还没来得及写入磁盘的那部分数据重新写入，以保证持久性。]]></description><category></category></item><item><title><![CDATA[【MySQL 数据宝典】【索引原理】- 008 数据库优化基本思路]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138674969</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138674969</guid><author>fvdfsdafdsafs</author><pubDate>Fri, 10 May 2024 17:35:59 +0800</pubDate><description><![CDATA[哪些数据不适合放在数据库中

1.  二进制数据；
2.  流水队列数据；
3.  超大文本；]]></description><category></category></item><item><title><![CDATA[【MySQL 数据宝典】【索引原理】- 007 索引优化示例]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138614770</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138614770</guid><author>fvdfsdafdsafs</author><pubDate>Thu, 09 May 2024 14:55:54 +0800</pubDate><description><![CDATA[下面是一张用户通讯表的表结构信息,这张表来源于真实企业的实际项目中,有接近500万条数据.]]></description><category></category></item><item><title><![CDATA[【MySQL 数据宝典】【索引原理】- 006 慢查询日志分析&优化]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138269417</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138269417</guid><author>fvdfsdafdsafs</author><pubDate>Sun, 28 Apr 2024 10:10:15 +0800</pubDate><description><![CDATA[日志记录到系统的专用日志表中，要比记录到文件耗费更多的系统资源，因此对于需要启用慢查询日志，又需要能够获得更高的系统性能，那么建议优先记录到文件.例如，嵌套循环中，如果小的循环在外层，则数据库连接只会发生5次，进行5000次操作，相比之下，如果大的循环在外层，则会导致1000次数据库连接，增加资源消耗。排序操作较为常见，如果排序字段在索引中，速度会更快，因为索引本身就是排好序的。如下图是慢日志里其中一条SQL的记录内容，可以看到有时间戳，用户，查询时长及具体的SQL等信息.如何选择合适的索引？]]></description><category></category></item><item><title><![CDATA[【MySQL 数据宝典】【索引原理】- 005 一文说明白 OrderBy 优化]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138269367</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138269367</guid><author>fvdfsdafdsafs</author><pubDate>Sun, 28 Apr 2024 10:09:16 +0800</pubDate><description><![CDATA[如果 MySQL 认为内存足够大，会优先选择全字段排序，把需要的字段都放到 sort_buffer中， 这样排序后就会直接从内存里面返回查询结果了，不用再回到原表去取数据。MySQL 的一个设计思想：如果内存够，就要多利用内存，尽量减少磁盘访问。对于 InnoDB 表来说，rowid 排序会要求回表多造成磁盘读，因此不会被优先选择。]]></description><category></category></item><item><title><![CDATA[【MySQL 数据宝典】【索引原理】- 004 优化示例-join & in &exist]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138268911</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138268911</guid><author>fvdfsdafdsafs</author><pubDate>Sun, 28 Apr 2024 09:56:40 +0800</pubDate><description><![CDATA[多表关联查询时,第一个被处理的表就是驱动表,使用驱动表去关联其他表.驱动表的确定非常的关键,会直接影响多表关联的顺序,也决定后续关联查询的性能永远用小结果集驱动大结果集(其本质就是减少外层循环的数据数量)为匹配的条件增加索引(减少内层表的循环匹配次数)增大join buffer size的大小（一次缓存的数据越多，那么内层包的扫表次数就越少）减少不必要的字段查询（字段越少，join buffer 所缓存的数据就越多。]]></description><category></category></item><item><title><![CDATA[【MySQL 数据宝典】【索引原理】- 003 用例子说明索引优化基础原则]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138268785</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138268785</guid><author>fvdfsdafdsafs</author><pubDate>Sun, 28 Apr 2024 09:54:27 +0800</pubDate><description><![CDATA[最左前缀法则要遵守索引列上不计算范围之后全失效覆盖索引记住用。不等于、is null、is not null、or导致索引失效。like百分号加右边，加左边导致索引失效，解决方法：使用覆盖索引。]]></description><category></category></item><item><title><![CDATA[【MySQL 数据宝典】【索引原理】- 002 示例+逐个字段学明白 Explain]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138211250</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138211250</guid><author>fvdfsdafdsafs</author><pubDate>Fri, 26 Apr 2024 10:27:14 +0800</pubDate><description><![CDATA[type类型解释system不进行磁盘IO,查询系统表,仅仅返回一条数据const查找主键索引,最多返回1条或0条数据. 属于精确查找eq_ref查找唯一性索引,返回数据最多一条, 属于精确查找ref查找非唯一性索引,返回匹配某一条件的多条数据,属于精确查找,数据返回可能是多条.range查找某个索引的部分索引,只检索给定范围的行,属于范围查找. 比如: > 、 < 、in 、betweenindex查找所有索引树,比ALL快一些,因为索引文件要比数据文件小.ALL。]]></description><category></category></item><item><title><![CDATA[【MySQL 数据宝典】【索引原理】- 001 索引原理分析 (AVL树、B-Tree、B+Tree)]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138211176</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138211176</guid><author>fvdfsdafdsafs</author><pubDate>Fri, 26 Apr 2024 10:24:52 +0800</pubDate><description><![CDATA[B-Tree是一种平衡的多路查找树,B树允许一个节点存放多个数据. 这样可以在尽可能减少树的深度的同时,存放更多的数据(把瘦高的树变的矮胖)B-Tree中所有节点的子树个数的最大值称为B-Tree的阶,用m表示.一颗m阶的B树,如果不为空,就必须满足以下条件.m阶的B-Tree满足以下条件:每个节点最多拥有m-1个关键字(根节点除外),也就是m个子树根节点至少有两个子树(可以没有子树,有就必须是两个)分支节点至少有(m/2)颗子树 (除去根节点和叶子节点其他都是分支节点)]]></description><category></category></item><item><title><![CDATA[【MySQL 数据宝典】【存储引擎】- InnoDB 常用参数的优化技巧]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138153060</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138153060</guid><author>fvdfsdafdsafs</author><pubDate>Wed, 24 Apr 2024 11:08:56 +0800</pubDate><description><![CDATA[一个大的日志缓冲区允许大量的事务在提交之前不写日志到磁盘。因此，如果你有很多事务的更新，插入或删除操作，通过设置这个参数会大量的减少磁盘I/O的次数数。建议: 在专用数据库服务器上，可以将缓冲池大小设置为服务器物理内存的60% - 80%.监控在线调整缓冲池的进度。]]></description><category></category></item><item><title><![CDATA[【MySQL 数据宝典】【磁盘结构】- InnoDb 数据文件-Page结构、行记录格式]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138152554</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138152554</guid><author>fvdfsdafdsafs</author><pubDate>Wed, 24 Apr 2024 10:54:56 +0800</pubDate><description><![CDATA[服务器为了描述一条记录而添加了一些额外信息(元数据信息)，这些额外信息分为3类，分别是: 变长字段长度列表、NULL值列表和记录头信息.]]></description><category></category></item><item><title><![CDATA[【MySQL 数据宝典】【线程模型】-IO Thread、Puge Thread介绍]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138111598</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138111598</guid><author>fvdfsdafdsafs</author><pubDate>Tue, 23 Apr 2024 09:54:37 +0800</pubDate><description><![CDATA[通过异步IO，InnoDB能够在进行IO操作时不阻塞其他线程的执行，从而更高效地处理读写请求。作用是将脏数据刷新到磁盘，脏数据刷盘后相应的redo log也就可以覆盖，即可以同步数据，又能达到redo log循环使用的目的。InnoDB的Master Thread是主线程，担负着调度其他各个线程的重要任务，其优先级最高。而在后续版本中，read thread和write thread分别增大到了4个，总共有10个IO线程。，该命令将显示当前InnoDB引擎的详细状态信息，包括IO线程的数量和状态等。]]></description><category></category></item><item><title><![CDATA[【MySQL 数据宝典】【磁盘结构】- 006 bin log 二进制日志的基本模式和参数设置]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138110423</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138110423</guid><author>fvdfsdafdsafs</author><pubDate>Tue, 23 Apr 2024 09:45:29 +0800</pubDate><description><![CDATA[binlog是一个二进制格式的文件，用于记录语句信息，例如更改数据库表和更改内容的SQL语句都会记录到binlog里，但是不会记录SELECT和SHOW这类操作。]]></description><category></category></item><item><title><![CDATA[【MySQL 数据宝典】【磁盘结构】- 005 Undo log 撤销日志]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138065689</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138065689</guid><author>fvdfsdafdsafs</author><pubDate>Mon, 22 Apr 2024 10:29:17 +0800</pubDate><description><![CDATA[提供回滚操作Undo Log实现了事务的原子性。在数据修改时，除了记录redo log外，还记录了相应的undo log。如果事务执行失败，可以利用undo log进行回滚。Undo Log是逻辑日志，记录了数据修改的逻辑操作，如delete操作对应的是insert操作，update操作对应相反的update操作。提供多版本控制（MVCC）MVCC通过Undo Log实现。当某行数据被其他事务锁定时，可以从undo log中获取该行记录之前的数据版本，从而实现了快照读。]]></description><category></category></item><item><title><![CDATA[【MySQL 数据宝典】【磁盘结构】- 004 redolog 重做日志]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138064108</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/138064108</guid><author>fvdfsdafdsafs</author><pubDate>Mon, 22 Apr 2024 10:12:44 +0800</pubDate><description><![CDATA[Redo log 记录了事务对数据库做了哪些修改，属于物理日志，包括不同类型的日志记录，如 MLOG_1BYTE、MLOG_2BYTE、MLOG_4BYTE、MLOG_8BYTE 和 MLOG_WRITE_STRING。InnoDB 引擎对数据的更新，是先将更新记录写入 redo log 日志，然后在系统空闲的时候或者是按照设定的更新策略再将日志中的内容更新到磁盘之中。MySQL会根据自身的策略将内存中的数据页刷新到磁盘，这个过程可能会在事务提交后的某个时间点发生。也写满时，会再切换到重做。]]></description><category></category></item><item><title><![CDATA[【MySQL 数据宝典】【磁盘结构】- 003 双写缓冲区]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/137952716</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/137952716</guid><author>fvdfsdafdsafs</author><pubDate>Fri, 19 Apr 2024 09:49:48 +0800</pubDate><description><![CDATA[这样在宕机重启时，即使发生数据页损坏，可以通过该页的副本来还原该页，然后再进行redo log重做，确保了数据页的可靠性。为了解决写失效问题，InnoDB实现了双写缓冲区，它位于系统表空间，是一个存储区域。双写缓冲区在写入过程中发生了宕机，数据页仍然有可能丢失。双写缓冲区的设计是为了。为啥写两次，刷一次数据文件保存数据不就可以了，为什么还要写共享表空间?默认情况下启用双写缓冲区，可以通过将。，但并不能完全消除它。]]></description><category></category></item><item><title><![CDATA[【MySQL 数据宝典】【磁盘结构】- 002 数据字典]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/137952527</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/137952527</guid><author>fvdfsdafdsafs</author><pubDate>Fri, 19 Apr 2024 09:47:37 +0800</pubDate><description><![CDATA[我们平时使用 INSERT 语句向表中插入的那些记录称之为用户数据，MySQL只是作为一个软件来为我们来保管这 些数据，提供方便的增删改查接口而已。但是每当我们向一个表中插入一条记录的时候，MySQL先要校验一下插 入语句对应的表存不存在，插入的列和表中的列是否符合，如果语法没有问题的话，还需要知道该表的聚簇索引 和所有二级索引对应的根页面是哪个表空间的哪个页面，然后把记录插入对应索引的 B+ 树中。]]></description><category></category></item><item><title><![CDATA[【MySQL 数据宝典】【磁盘结构】- 001 表空间介绍&优化建议]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/137924230</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/137924230</guid><author>fvdfsdafdsafs</author><pubDate>Thu, 18 Apr 2024 15:46:49 +0800</pubDate><description><![CDATA[Log Buffer：日志缓冲区，用来保存要写入磁盘上log文件（Redo/Undo）的数据，日志缓冲区的内容定期刷新到磁盘log文件中。日志缓冲区满时会自动将其刷新到磁盘，当遇到BLOB或多行更新的大事务操作时，增加日志缓冲区可以节省磁盘I/O。LogBuffer空间满了，会自动写入磁盘。可以通过将innodb_log_buffer_size参数调大，减少磁盘IO频率。LogBuffer主要作用是: 用来优化每次更新操作之后都要写入redo log 而产生的磁盘IO问题.]]></description><category></category></item><item><title><![CDATA[【MySQL 数据宝典】【内存结构】- 005 Log Buffer]]></title><link>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/137923901</link><guid>https://blog.youkuaiyun.com/fvdfsdafdsafs/article/details/137923901</guid><author>fvdfsdafdsafs</author><pubDate>Thu, 18 Apr 2024 15:38:21 +0800</pubDate><description><![CDATA[Log Buffer：日志缓冲区，用来保存要写入磁盘上log文件（Redo/Undo）的数据，日志缓冲区的内容定期刷新到磁盘log文件中。日志缓冲区满时会自动将其刷新到磁盘，当遇到BLOB或多行更新的大事务操作时，增加日志缓冲区可以节省磁盘I/O。LogBuffer空间满了，会自动写入磁盘。可以通过将innodb_log_buffer_size参数调大，减少磁盘IO频率。LogBuffer主要作用是: 用来优化每次更新操作之后都要写入redo log 而产生的磁盘IO问题.]]></description><category></category></item></channel></rss>