MySQL 核心模块揭秘
0其乐融融 发布于 2024/04/07 01:33:18
server 层会创建一个 SAVEPOINT 对象,用于存放 savepoint 信息。binlog 会把 binlog offset 写入 server 层为它分配的一块 8 字节的内存里。
InnoDB 会维护自己的 savepoint 链表,里面保存着 trx_named_savept_t 对象。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/04/07 01:33:18
server 层会创建一个 SAVEPOINT 对象,用于存放 savepoint 信息。binlog 会把 binlog offset 写入 server 层为它分配的一块 8 字节的内存里。
InnoDB 会维护自己的 savepoint 链表,里面保存着 trx_named_savept_t 对象。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/04/07 01:33:16
在连接MySQL数据库之前,需要确保已经安装了MySQL服务器,并创建了需要操作的数据库。此外,还需要在C#项目中引入MySQL的官方.NET连接器——MySql.Data。这可以通过NuGet包管理器进行安装。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/04/07 01:33:14
当数据量较小且查询不频繁时,可以使用 MySQL 的 order by来实现排行榜。而当数据量较大且需要实时更新并频繁查询时,使用 Redis 的有序集合更为适合。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/04/07 01:33:12
了解完存储引擎和不同MySQL版本对索引长度的限制,我们以InnoDB引擎为例,看MySQL不同的字符集对索引长度有啥影响。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/04/07 01:33:06
online ddl 不会导致死锁,两者最大的区别是 pt-osc 执行 DDL 时产生的主从延迟小,原因是 online ddl 是在主库执行完成后从库开始执行,因此天然存在延迟。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/03/28 01:33:09
为了提升分配 undo 段的效率,事务提交过程中,InnoDB 会缓存一些 undo 段。只要同时满足两个条件,insert undo 段或 update undo 段就能被缓存。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/03/27 01:33:04
对于5.7.23之前的版本在评估类似DDL操作的时候需要谨慎,可能评估为瞬间操作,但是实际上线的时候跑了很久,这个就容易导致超过维护窗口,甚至更大的故障。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/03/27 01:21:15
从技术分类来说Oracle、MySQL是数据库。Redis、MongoDB、influxdb、neo4j、Elasticsearch也是数据库。Hadoop技术栈也是数据库。区块链也是数据库。Impala、StarRocks等也是数据库。所以最终有问题都会涉及到我。本着这个思路我也尝试着进行一下安装。虽然也有容器化部署的方式,但是自己手工安装一遍收获是不一样的。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/03/26 01:33:16
当我们根据非聚簇索引查询的时候,会先通过非聚簇索引查到主键的值,之后,还需要再通过主键的值再进行一次查询才能得到我们要查询的数据。而这个过程就叫做回表。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/03/26 01:33:14
根据官方的解释可以了解到,如果有许多大的触发器,参数 table_open_cache_instances 的默认值可能会造成内存使用过多。比如 table_open_cache_instances 设置为 16,那么表缓存会划分为 16 个 table instance。当并发访问大时,最多的情况下一个表的缓存信息会出现在每一个 table instance 里面。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/03/26 01:33:13
本文将总结一些比较常见的运行比较慢但不会被记录在慢SQL日志里的情况。另外,慢SQL的计算方式在MySQL8.0新版本中有变化,因此,将通过对比MySQL5.7(MySQL5.7.38)与MySQL8.0(MySQL8.0.33)进行总结。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/03/26 01:33:11
Go语言,也称为Golang,是由Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/03/16 01:33:14
MySQL通常采用嵌套循环(Nested-Loop Join)的方法来执行关联查询,具体而言,主要包括简单嵌套循环连接(Simple Nested Loop Join)、块状嵌套循环连接(Block Nested Loop Join)和索引嵌套循环连接(Index Nested Loop Join)这三种算法。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/03/16 01:33:11
MySQL使用LRU(最近最少使用)算法来管理其InnoDB存储引擎的缓冲池(Buffer Pool),因为这种算法能有效地维护缓存页的使用频率和顺序。LRU算法通过淘汰长时间未被访问的数据页,确保缓冲池中存储的是最可能被再次访问的数据,从而提高数据检索的效率。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/03/15 01:33:07
借鉴两阶段提交的逻辑,我们可以将A服务的数据操作在业务设计上增加一个预扣减的概念,先锁定A服务数据资源,然后去请求B服务的接口,失败的话,则释放A服务锁定的数据资源,成功的话则进行真实的扣减。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/03/15 01:33:05
在现代互联网场景下,其实很少需要在一个事务中对同一行数据读取两次的情况,RR隔离级别实用性不高,而且因为加了间隙锁和Next-Key Lock,性能有所降低,死锁概率也相对较高。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/03/15 01:33:03
int后面的数字不能表示字段的长度,int(num)一般加上zerofill,才有效果。zerofill的作用一般可以用在一些编号相关的数字中,比如学生的编号 001 002 ... 999这种,如果mysql没有零填充的功能,但是你又要格式化输出等长的数字编号时,那么你只能自己处理了。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/03/13 01:33:09
当需要在MySQL中读取一个日期范围内的日期时,可以使用GENERATE_SERIES函数的方法。该方法通过子查询和交叉连接生成一个连续的数字序列,然后将其转换为日期序列。然后,你可以将生成的日期序列与其他表进行连接或者使用它们来进行其他操作。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/03/13 01:33:03
MySQL 命令行工具提供了一个选项 --safe-updates 或者 --i-am-a-dummy,默认是 false。开启之后如果 UPDATE, DELETE 不带 WHERE 或者 LIMIT 就会报错。此外 SELECT 语句也可以指定返回超过一定行数后报错。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/03/11 01:33:05
产生幻读的原因是,行锁只能锁住行,但是新插入记录这个动作,要更新的是记录之间的“间隙”。因此,为了解决幻读问题,InnoDB 只好引入新的锁,也就是间隙锁 (Gap Lock),间隙锁是在可重复读隔离级别下才会生效的。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/03/09 01:33:15
MYSQL中提供了一个函数select master_pos_wait(file, pos[, timeout]) 用于在slave上执行等待master节点上的位点同步完成,其中file,和pos是在master上的文件和位点,timeout 为了让master_pos_wait 函数在timeout秒内没有返回,则会直接触发超时返回。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/03/07 01:33:03
这篇文章是基于工作实际中碰到的问题,把问题产生的原因和解决思路总结了下。文中针对提到的一些索引选择差异情况我们结合了解到的优化器执行策略,使用trace工具进行了验证。优化器有一套非常复杂的算法策略,本人对于MySQL的理解深度有限,这里就不详细分析了,还需要继续学习。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/03/04 01:33:04
本文我们通过一系列示例进行测试,来看看到底是什么场景下锁表什么场景下锁行。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/03/02 01:33:05
半同步复制,就是主节点执行写操作后,等待至少一个从节点确认收到数据后再返回给客户端,这就是半同步复制。
阅读()评论(0)赞 ()
其乐融融 发布于 2024/02/28 01:33:08
对于空间数据类型(如点、线和多边形),MySQL提供了空间索引来支持高效的空间查询。空间索引基于R-Tree数据结构实现,可以快速地定位到满足查询条件的空间对象。空间索引在GIS(地理信息系统)和LBS(基于位置的服务)等应用中非常有用。
阅读()评论(0)赞 ()