
MySQL
文章平均质量分 92
数据库
海是鹏印出的影
Java技术专家
展开
-
MySQL8.0新特性
MySQL 8.0:支持在线修改全局参数并持久化,通过加上PERSIST关键字,可以将修改的参数持久化到新的配置文件(mysqld-auto.cnf)中。函数索引基于虚拟列功能实现,在MySQL中相当于新增了一个列,这个列会根据你的函数来进行计算结果,然后使用函数索引的时候就会用这个计算后的列作为索引。MySQL 8.0:InnoDB会根据服务器上检测到的内存大小自动调整 innodb_buffer_pool_size,innodb_log_file_size 等参数,尽可能的冲分利用系统资源。原创 2024-04-29 20:04:48 · 915 阅读 · 0 评论 -
Mysql全局优化总结
因此,在配置max_connections时,你还需要考虑open_files_limit的值,确保两者之间有适当的比例,以优化数据库服务器的性能和稳定性。缓冲池大小的调整是按照块进行的,块大小由 innodb_buffer_pool_chunk_size 变量定义,默认为 128MB。在 MySQL 的 InnoDB 存储引擎中,innodb_read_io_threads 和 innodb_write_io_threads 是两个配置参数,用于设置后台进行读和写操作的 I/O 线程的数量。原创 2024-04-24 23:02:45 · 899 阅读 · 0 评论 -
Innodb之Doublewrite Buffer
在某些情况下,当数据库系统正在写入一个数据页到磁盘的过程中发生崩溃,可能会导致该页只写入了一部分,从而损坏了页的内容。双写缓冲区提供了一个中间层,确保每个数据页在写入其最终位置之前,在一个单独的位置(即双写缓冲区)有一个完整的副本。因为崩溃导致的数据页的部分写损坏,而需要双写缓冲区(Doublewrite Buffer)这个问题的核心在于理解重做日志和数据页写入过程的不同目的和机制。重做日志的主要功能是记录事务对数据库所作的修改,确保这些修改可以在数据库崩溃后被重新应用(重放)以保持数据的一致性和完整性。原创 2024-04-23 10:10:32 · 660 阅读 · 0 评论 -
MySQL之binlog归档日志
的话题,假设我们把数据库所有数据都删除了要怎么恢复了,如果数据库之前没有备份,所有的binlog日志都在的话,就从binlog第一个文件开始逐个恢复每个binlog文件里的数据,这种一般不太可能,因为binlog日志比较大,早期的binlog文件会定期删除的,所以一般不可能用binlog文件恢复整个数据库的。设置sync_binlog为1意味着每个事务的binlog信息在提交时都会立即通过fsync操作被刷新到磁盘,确保了数据的持久性和一致性,但这可能对性能产生影响,特别是在高事务率的系统中。原创 2024-04-21 14:07:39 · 1353 阅读 · 0 评论 -
Innodb之redo日志
通过redo log buffer和redo log文件的配合使用,InnoDB能够保证即使在数据库系统崩溃的情况下,所有已提交的事务修改都不会丢失,实现了数据库的crash-safe能力。 redo log buffer是InnoDB存储引擎中关键的组成部分,它通过缓冲和优化日志写入操作,既提升了数据库的性能,又确保了数据的安全性和一致性。 在MySQL数据库中,binlog(二进制日志)和redo log(重做日志)都是关键的日志系统,但它们服务于不同的目的,具有不同的特性和工作机制。原创 2024-04-15 18:44:28 · 1028 阅读 · 0 评论 -
MySQL底层架构
此外,在SQL语句的语法分析过程中,MySQL的解析器会进行一些初步的权限预检查(precheck),例如验证用户是否有权访问指定的数据库和表。当一个SQL语句提交给MySQL服务器时,如果未命中查询缓存(或在MySQL 8.0及以上版本,由于查询缓存功能已被移除,所有查询都会直接进入执行阶段),MySQL就会开始执行语句的准备工作,这包括解析和校验SQL语句。通过这两步解析过程,MySQL确保了它能理解用户的查询意图,并且语句是按照MySQL的规则构造的,这为后续的查询优化和执行奠定了基础。原创 2024-04-11 14:14:47 · 1260 阅读 · 0 评论 -
MySQL之MVCC底层机制
Read View的主要作用是确保在事务中执行查询操作时,能够看到一个一致的数据快照,而不会被其他并发事务中的修改所影响。这意味着,即使在当前事务执行过程中,其他事务提交了新的更改,当前事务的查询操作仍然返回事务开始时的数据状态。任何ID小于低水位标记的修改都是对当前事务可见的,因为这些修改必定是在当前事务开始之前提交的。假设第一条的DB_TRX_ID 大于高水位标记,表示这行数据是在当前查询之后启动的事务,是不可见的,继续比对undo日志的下一条该行数据。原创 2024-04-07 09:56:52 · 630 阅读 · 0 评论 -
MySQL锁机制
在InnoDB存储引擎中,行锁实际上是索引锁。此外,RR级别也试图通过使用间隙锁来避免幻读问题,幻读是指当事务在读取某范围内的记录时,另一个事务在这个范围内插入了新的记录,导致第一个事务在再次读取这个范围的记录时会发现新的“幻影”记录。不过,需要注意的是,不当的锁使用策略可能导致性能下降,特别是在高并发的环境下。要理解为什么在RR(可重复读)隔离级别下MySQL可能会从行锁升级为表锁,而在RC(读已提交)隔离级别下不会,我们需要先了解两个隔离级别处理数据一致性问题的机制差异,以及索引的作用在这其中的影响。原创 2024-04-06 10:43:32 · 1197 阅读 · 0 评论 -
深入理解MySQL事务
将UPDATE放在末尾,可以在出错时减少需要回滚的操作数量,从而降低回滚的开销。综上所述,合理控制事务的大小和持续时间,以及优化事务中的操作顺序和方式,是提高数据库性能和并发处理能力的关键。在某些场景下,将数据的查询、校验等操作先行执行,最后再进行UPDATE操作,可以保证在实际修改数据之前,所有的前置条件都已经满足,这有助于保持事务逻辑的清晰和健壮性。总的来说,将UPDATE操作放在事务的末尾,是一种优化事务执行和锁管理的策略,旨在减少锁的持有时间,减轻对并发事务的影响,同时提高系统的整体性能和稳定性。原创 2024-04-04 09:05:32 · 523 阅读 · 0 评论 -
生产级MySQL海量数据表结构变更实战
Mysql下,对于海量数据的大表(这里亲测的是千万级),需要导出表数据,并且需要对表字段进行加工处理,比如增、删、改等操作。原创 2023-08-21 16:38:34 · 208 阅读 · 0 评论