- 博客(161)
- 资源 (21)
- 收藏
- 关注
原创 揭秘MySQL系统库:mysql库全解析
MySQL系统库包含多个关键功能表:权限系统表(user、db等)管理用户访问权限;统计信息表(innodb_table_stats、innodb_index_stats)存储表和索引的持久化统计信息,帮助优化查询性能;日志表(general_log、slow_log)记录SQL执行历史,用于问题排查。要修改权限应使用GRANT/REVOKE语句而非直接DML操作。统计信息和日志功能可通过参数灵活开启/关闭。这些系统表为DBA提供了数据库监控和性能调优的重要工具。
2025-06-12 22:52:09
484
原创 揭秘MySQL系统库:information_schema全解析
MySQL系统库information_schema是存储数据库元数据的核心组件,提供对数据库、表、列等对象的信息访问。该库包含只读的临时表(使用Memory和InnoDB引擎),不占用磁盘空间。主要分为四类表:服务器层统计信息字典表(如COLUMNS、STATISTICS)、表级别对象字典表(如VIEWS、TRIGGERS)、混杂信息字典表(如GLOBAL_VARIABLES)以及InnoDB层系统表(如INNODB_SYS_TABLES)。从MySQL 5.7开始,部分表被迁移到mysql库并隐藏。
2025-06-12 10:59:55
400
原创 揭秘MySQL系统库:利用Performance_schema库进行性能监控与故障排查实战
摘要:本文介绍了MySQL performance_schema系统库的配置与使用。主要包括三方面内容:1)如何配置等待事件监控,通过修改setup_instruments和setup_consumers表开启事件采集;2)如何查询执行失败的SQL语句,利用events_statements_history表定位语法错误;3)如何监控事务执行情况,配置transaction相关参数后可通过events_transactions_current等表查看活跃或回滚的事务。
2025-06-11 15:39:53
850
原创 揭秘MySQL系统库:sys系统库实战
sys系统库需MySQL5.6+版本支持,依赖performance_schema开启(参数设为ON),且要求管理员权限。它为DBA提供性能诊断视图,但可能影响性能,建议按需启用特定功能。sys视图分为带x$前缀(原始数据)和不带前缀(单位换算后)两类,如host_summary_by_file_io。通过schema_table_statistics_with_buffer可统计表操作的I/O耗时session视图结合等待事件可定位慢SQL原因。
2025-06-11 10:21:52
705
原创 MySQL中的系统库(一):初识Performance_schema
MySQL系统库有4个,performance_schema库主要记录数据服务器运行过程中性能相关的数据,具体有语句事件记录表、等待事件记录表、阶段事件记录表、事务事件记录表、事务事件记录表、监视内存使用的表和动态对 performance_schema 进行配置的配置表等。
2025-06-10 15:53:15
715
原创 MySQL体系架构解析(五):读懂MySQL日志文件是优化与故障排查的关键
MySQL运行中会产生多种日志文件,主要包括,错误日志:记录启动、运行、关闭过程中的错误和警告信息,是故障排查的首要文件;慢查询日志:记录执行时间超过阈值的SQL语句(默认10秒),可通过参数调整记录未使用索引的查询;查询日志:记录所有数据库请求信息(包括成功和失败的请求)。二进制日志(binlog):记录所有DDL和DML操作,用于数据恢复、主从复制和审计,需手动开启配置。此外,MySQL数据目录还包含服务器进程文件、UNIX域套接字文件以及自动生成的SSL/RSA证书密钥文件等支持性文件。
2025-06-10 10:12:20
776
原创 MySQL体系架构解析(四):MySQL数据存储的揭秘
MySQ L数据存储路径与文件结构解析:数据目录可通过 datadir 变量查询,其中每个数据库对应一个子目录并包含 db.opt 配置文件。数据表由表结构(.frm)和表数据两部分组成,不同存储引擎采用不同存储方式 - InnoDB使用表空间(系统表空间或独立表空间.ibd),MyISAM则创建.MYD(数据)和.MYI(索引)文件。系统表空间默认位于 ibdata1文件,而5.6.6版本后 InnoDB 默认采用独立表空间存储表数据,可通过 innodb_file_per_table 参数配置存储方式。
2025-06-06 17:19:48
1333
原创 MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL安装目录中的bin目录包含重要可执行文件,包括服务器程序(如mysqld、mysqld_safe、mysql.server)和客户端程序(如mysql、mysqladmin)。启动MySQL可通过不同方式,并支持多实例运行。配置文件可通过指定路径读取,参数分为动态和静态两类,可通过SHOW VARIABLES查看、SET修改动态参数,其中全局变量影响整个服务器,会话变量影响单个客户端连接。静态参数不可运行时修改。
2025-06-06 14:54:40
884
原创 MySQL体系架构解析(二):连接层,服务层和存储引擎层的揭秘
MySQL采用分层架构设计,主要分为连接层、Server层和存储引擎层。连接层通过连接池管理客户端连接,优化性能;Server层负责SQL解析、优化、缓存及内置函数处理;存储引擎层(如InnoDB、MyISAM等)以插件式架构实现数据物理存储,支持不同表选择不同引擎。InnoDB作为默认事务型引擎,支持行锁和崩溃恢复,而MyISAM适合读密集型场景。这种模块化设计兼顾了灵活性、性能与扩展性,用户可根据需求选用或定制存储引擎。
2025-06-05 15:21:58
1159
原创 MySQL体系架构解析(一):MySQL分支、变种与替换的了解
MySQL 的主要分支包括 Percona Server、MariaDB 和 Drizzle。Drizzle 是完全重构的开源分支,专注于高可用性和多核性能;MariaDB 作为 MySQL 的超集,完全兼容并新增功能,被多家大公司采用;Percona Server 则专注于性能优化和运维便利性。此外,PostgreSQL 以其稳定性和丰富的数据类型成为学术场景的首选,而SQLite则是轻量级嵌入式应用的最佳选择。这些数据库各有特点,能满足不同场景的需求。
2025-06-05 11:02:47
452
原创 MySQL必知之MySQL8新特性(二)
MySQL 8.0引入了多项重要新特性:隐藏索引允许索引软删除和灰度发布,降序索引提升排序查询性能,函数索引支持表达式和JSON数据查询。此外,通用表表达式(CTE)提供了递归查询能力,能高效处理层级数据。这些增强功能显著提升了MySQL的索引管理灵活性、查询优化能力和复杂查询处理效率。
2025-06-03 16:33:43
1099
原创 MySQL必知之MySQL8新特性(一)
ySQL 8.0带来了多项账户安全改进:1)用户创建与授权必须分开执行;2)默认认证插件改为caching_sha2_password,可能导致旧客户端连接问题;3)增强密码管理,包括密码历史记录限制和旧密码校验功能。
2025-06-03 09:58:41
499
原创 事务底层与高可用原理之undo日志
Undo日志是InnoDB实现事务原子性的关键机制。当执行INSERT、DELETE、UPDATE操作时,系统会记录相应的undo日志,以便事务回滚时能够恢复数据原状。对于INSERT操作,undo日志记录主键信息以便删除;DELETE操作分为delete mark和purge两阶段,前者仅标记删除状态,后者才真正移除记录;UPDATE操作则记录修改前的旧值。每个事务在执行修改操作时会被分配唯一ID,记录在隐藏列trx_id中,并通过roll_pointer指针形成版本链,实现多版本并发控制(MVCC)。
2025-05-27 17:31:38
860
原创 事务底层与高可用原理之redo日志
MySQL事务机制与高可用性原理摘要:MySQL通过事务机制保证数据一致性,支持显式与隐式事务。核心机制包括:1) WAL(预写日志)机制,使用redo log保证持久性,undo log保证原子性;2) 日志文件组循环写入;3) 内存缓冲区优化IO性能。redo日志采用紧凑格式记录修改,包含类型、表空间ID、页号等信息,以顺序IO写入磁盘。日志缓冲区(默认16MB)将日志分批写入磁盘,触发时机包括事务提交、缓冲区满等。通过redo日志可在系统崩溃后恢复数据,确保高可用性。
2025-05-27 14:46:20
904
原创 InnoDB引擎底层解析(二)之InnoDB的Buffer Pool(三)
本文介绍了MySQL InnoDB存储引擎的Buffer Pool机制。Buffer Pool是InnoDB向操作系统申请的一块连续内存空间,用于缓存磁盘数据页。为了提高并发性能,可以将大Buffer Pool拆分为多个独立实例,通过innodb_buffer_pool_instances参数配置。5.7.5版本后支持动态调整Buffer Pool大小,采用chunk(默认128MB)为单位分配内存。同时也说明如何查看Buffer Pool状态信息,包括内存使用情况、LRU链表状态、I/O统计等指标。
2025-05-24 17:59:40
736
原创 InnoDB引擎底层解析(二)之InnoDB的表空间
InnoDB表空间是存储引擎的核心结构,分为系统表空间和独立表空间。系统表空间包含双写缓冲区等特殊结构,用于保证数据页写入的可靠性。表空间由页、区和段组成管理:页是基本单位(16KB),64个连续页组成1MB的区,段则是逻辑概念,区分叶子节点和非叶子节点。这种分层设计优化了B+树的存储效率,减少随机IO。InnoDB还维护内部系统表(数据字典)来管理元数据,这些信息存储在系统表空间的特定页中,用户可通过information_schema数据库间接查看。表空间结构设计兼顾了存储效率和数据可靠性。
2025-05-24 15:10:57
964
原创 InnoDB引擎底层解析(二)之InnoDB的Buffer Pool(二)
章讨论了LRU(Least Recently Used)链表在管理Buffer Pool缓存页中的应用及其优化策略。Buffer Pool内存有限,当缓存页超过其容量时,需移除旧页以腾出空间。LRU链表通过记录缓存页的访问顺序,将最近最少使用的页置于链表尾部,便于淘汰。
2025-05-23 17:10:22
1313
2
原创 InnoDB引擎底层解析(二)之InnoDB的Buffer Pool(一)
InnoDB的Buffer Pool是MySQL中用于缓存磁盘数据页的内存区域,旨在减少磁盘I/O操作,提高数据访问速度。Buffer Pool在服务器启动时申请一片连续内存,默认大小为8M,但可根据需要调整。它由控制块和缓存页组成,控制块用于管理缓存页的信息。Buffer Pool通过free链表管理空闲缓存页,通过哈希表快速定位缓存页,并通过flush链表管理需要同步到磁盘的脏页。这些机制共同优化了数据访问和修改的效率,提升了数据库性能。
2025-05-23 15:03:25
1111
原创 InnoDB引擎底层解析(一)之InnoDB记录存储结构和索引页结构
InnoDB引擎是MySQL中常用的存储引擎,具有双写机制、Buffer Pool和自适应Hash索引三大特性。InnoDB将数据存储在磁盘上,并通过内存处理数据,采用页(16KB)作为磁盘与内存交互的基本单位。InnoDB支持四种行格式(Compact、Redundant、Dynamic、Compressed),默认行格式为Dynamic。
2025-05-20 16:50:29
1008
原创 设计模式必知—— 六大设计原则(二)
本章节介绍了接口隔离原则(ISP)、依赖倒置原则(DIP)和迪米特法则(LKP),这些原则共同促进了代码的高内聚、低耦合,提升了软件设计的质量。
2025-05-20 09:35:53
1131
原创 设计模式必知—— 六大设计原则(一)
六大设计原则(SOLID)是软件开发中的核心设计准则,旨在构建稳定、灵活且健壮的程序。这些原则包括:单一职责原则(SRP),强调一个类或模块只负责一个功能;开放封闭原则(OCP),要求对扩展开放,对修改关闭;里氏替换原则(LSP),确保子类能够替换父类而不影响程序行为;接口分离原则(ISP),提倡将大接口拆分为更小的、特定功能的接口;依赖倒置原则(DIP),主张高层模块不应依赖低层模块,两者都应依赖抽象;迪米特法则(LoD),强调对象之间的松耦合。通过遵循这些原则,开发者可以设计出更易于维护和扩展的软件系统
2025-05-16 16:47:26
773
原创 设计模式必知 —— UML图
统一建模语言(UML)是一种用于软件设计的可视化建模语言,具有简单、统一、图形化的特点,能够表达软件设计中的动态与静态信息。UML定义了多种图形,其中类图是面向对象建模的主要组成部分,用于显示模型的静态结构,包括类、类的内部结构及其关系。类图在系统分析和设计阶段尤为重要,有助于简化对系统的理解。UML类图中,具体类、抽象类、接口和包有不同的表示方法,类和类、类和接口、接口和接口之间存在六种关系:实现、泛化、关联、聚合、组合和依赖。这些关系通过不同的连线方式在类图中表示,帮助开发者更好地理解和设计系统。
2025-05-16 09:32:30
903
原创 设计模式必知——概述
搞清楚设计模式到底在我们的编程过程中起到了怎样的作用,在编程世界中它处在一个什么样的位置,利用代码质量的评价标准和编程的方法论写出像诗一样优雅的代码...
2025-05-14 16:08:41
776
原创 MySQL必知之SQL性能调优案例
本文介绍了一个MySQL性能调优的案例,通过创建客户表、产品表和订单表,并生成大量数据模拟生产环境。首先,使用EXPLAIN和EXPLAIN FORMAT=JSON分析查询执行计划和成本,发现全表扫描导致性能问题。接着,通过添加单列索引、复合索引、覆盖索引和前缀索引,优化了查询性能。例如,为customers表的name字段添加索引,显著降低了查询成本。此外,针对关联查询,通过合理使用索引和优化查询条件,进一步提升了查询效率。最终,通过索引优化,成功减少了全表扫描,提高了数据库查询性能。
2025-05-14 10:01:43
730
原创 MySQL必知之SQL执行原理(五)—— MySQL查询重写规则
MySQL查询重写规则旨在优化性能较差的查询语句,通过一系列规则将其转换为更高效的执行形式。主要优化手段包括条件简化、外连接消除和子查询优化,这些优化措施有效提升了MySQL查询性能,减少了资源消耗。
2025-05-13 16:29:48
1063
原创 MySQL必知之SQL执行原理(四)—— EXPLAIN和查询成本
MySQL查询优化器通过计算查询成本来选择最优执行计划。EXPLAIN FORMAT=JSON可以输出查询计划的成本信息,帮助分析执行效率。Optimizer Trace功能允许开发者查看优化器的决策过程,解释为何选择特定索引或执行方案。连接查询的成本由驱动表的单次查询成本和被驱动表的多次查询成本构成,驱动表的扇出值越小,总成本越低。MySQL通过condition filtering估算满足条件的记录数,以提高成本估算的准确性。整体而言,理解这些机制有助于优化SQL查询性能。
2025-05-13 09:52:04
887
原创 玩转Linxu——CentOS7安装
本文详细介绍了在VMware上安装CentOS7的步骤,镜像下载,虚拟机创建,centos7安装,分区,驱动系统以及网络配置等步骤。
2025-05-11 17:17:38
591
原创 MySQL必知之SQL执行原理(三)—— 单表查询成本
MySQL查询成本主要由I/O成本和CPU成本组成。I/O成本涉及从磁盘加载数据到内存的时间,而CPU成本包括记录检测和结果集排序等操作的时间。MySQL通过计算全表扫描和使用不同索引的成本,选择成本最低的执行方案。
2025-05-09 15:20:23
1032
原创 MySQL必知之SQL执行原理(二)—— 连接查询
连接查询是数据库操作中的核心概念,常见的误区包括过度依赖复杂连接或完全避免使用连接,通过合理使用连接查询,可以优化数据查询和性能,更好地服务于业务需求。
2025-05-09 10:10:23
934
原创 MySQL必知之SQL执行原理(一)——单表访问之索引合并
MySQL在一般情况下执行一个查询时最多只会用到单个二级索引,但存在特殊情况,在这些特殊情况下,也可能在一个查询中使用到多个二级索引,MySQL中这种使用多个索引来完成一次查询的执行方案称之为索引合并/index merge,具体的索引合并算法有三种。
2025-05-08 15:26:53
723
原创 MySQL必知之锁(四)——死锁
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者彼此通信而造成的一种阻塞的现象,若无外力作用,他们都将无法推进下去,此时称系统处于死锁状态或系统产生了死锁。
2025-05-08 10:03:21
377
原创 MySQL必知之锁(三)——行锁和表锁
MySQL支持多种存储引擎,不同存储引擎对锁的支持也是不一样的。当然我们重点讨论InnoDB存储引擎中的锁,其他存储引擎只是稍作了解。
2025-05-07 15:55:09
800
原创 数据库-MySQL必知之锁(二)—— 锁粒度和意向锁
我们前边提到的锁都是针对记录的,也可以称之为行级锁或者行锁,对一条记录加锁的影响也只是这条记录而已。我们就说这个锁的粒度比较细;其实一个事务也可以在表级别进行加锁,自然也被称之为表级锁或者表锁,对一个表加锁影响整个表中的记录,我们就说这个锁的粒度比较粗。给表加的锁也可以分为共享锁(S锁)和独占锁(X锁)。
2025-05-07 10:26:15
926
原创 MySQL必知之锁(一)——事务并发问题及锁定读
我们已经知道事务并发执行时可能带来的各种问题,如脏读、不可重复读、幻读等。InnoDB 中锁非常多,他们是如何解决这些问题的?具体是什么原理?我们现在来一一学习。
2025-04-30 15:28:39
928
原创 MySQL必知之事务(三)—— MVCC
MySQL有四个事务隔离级别,每个隔离级别的范围是不一样的,他们是通过MVCC(多版本并发控制)实现的,具体原理让我们一探究竟
2025-04-30 10:40:42
625
原创 MySQL必知之事务(一)—— 事务四大特性及并发事务可能存在的问题及解决方案
事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位(不可再分),由一个有限的数据库操作序列构成(多个DML语句,select语句不包含事务)。比如转账这事,A给B转账,A账户-1000元,B账户要+1000元,这两个update语句必须作为一个整体来执行,不然 A 扣钱了,B 没有价钱这种情况就是错误的。那么事务就可以保证A、B账户的变动要么全部一起发生,要么全部一起不发生。
2025-04-27 09:47:56
665
原创 数据库-MySQL必知之调优(五)—— 高性能的索引使用策略
索引在数据查询中至关重要,而高性能的索引使用策略可以帮我们创建效率更好的索引,助力我们系统用户使用体验更好
2025-04-24 16:21:02
1362
提升效率的秘诀,你得知道——谷歌常用插件.7z
2021-11-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人