自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(319)
  • 问答 (1)
  • 收藏
  • 关注

原创 TCP笔记详解

文章目录一:为什么要传输层二:寻址三:运输层的两个协议1.UDP协议(1).UDP协议的特点(2) UDP的首部格式(8字节)2.TCP协议(1)TCP的特点(2)套接字(3)TCP报文段的首部格式(4)TCP的建立连接(5)TCP连接的释放(6)TCP的可靠传输(7)TCP的流量控制(8) TCP的拥塞控制一:为什么要传输层既然IP协议能够把源主机发送出的分组按照首部中的目的地址交送到目的主...

2020-03-14 22:38:39 773

原创 uv管理环境与jupyter使用

装包 uv add xxx # 跑代码 uv run xxx # 全局工具 uv tool install xxx # 同步环境 uv sync# 1. 装 Jupyter(项目或全局)uv add jupyterlab # 项目内uv tool install jupyterlab # 全局# 2. 注册 kerneluv run python -m ipykernel install --user --name=项目名# 3. 启动。

2026-10-11 15:25:33 273

原创 补充:备份与恢复

支持在线热备;不需要长时间锁住 InnoDB 表;支持全量备份;支持增量备份;恢复速度通常比逻辑备份快;可以结合 Binlog 实现时间点恢复。MySQL 版本常用工具MySQL 5.7MySQL 8.0MySQL 8.4应使用支持 MySQL 8.4 的对应版本不要简单地使用 XtraBackup 2.4 备份 MySQL 8.0,也不要跨大版本混用。

2026-09-15 08:43:08 112

原创 补充:mysql配置文件基础版

【代码】补充:mysql配置文件基础版。

2026-09-03 17:57:49 163

原创 基础:mysql事务

事务(Transaction)是由一个或多个数据库操作组成的逻辑工作单元,其中的操作要么全部成功,要么全部失败。COMMIT;如果任意一步失败,应执行ROLLBACK,避免出现一方扣款、另一方未到账的问题。转账、支付和结算创建订单并扣减库存同时更新多张关联表用户注册及初始化数据概念关键点事务多个操作作为一个整体提交或回滚ACID原子性、一致性、隔离性、持久性隔离级别在一致性与并发性能之间权衡MVCC通过版本链和 Read View 实现一致性读Redo Log。

2026-08-26 16:50:32 181

原创 补充:mysql配置文件

MySQL 配置文件用于设置服务端、客户端、日志、连接和 InnoDB 等参数。Linux 中通常为或,Windows 中通常为my.ini。多个配置文件同时存在时,后读取的配置可能覆盖前面的同名配置。

2026-08-25 14:52:40 248

原创 补充:权限与角色

MySQL 8.0 不再允许通过创建用户,应先,再GRANT。MySQL 8.0 原生支持角色,可实现“用户—角色—权限”的分层管理。MySQL 8.0 引入动态权限,将部分高风险管理能力从SUPER中拆分出来。MySQL 8.0 默认认证方式发生变化,旧客户端可能需要升级。MySQL 5.7 没有原生角色,通常通过授权模板和自动化平台模拟。不论使用哪个版本,都应遵循最小权限、限制来源、一人一账号、定期审计等安全原则。

2026-08-25 13:15:43 327

原创 补充:数据库执行慢问题排查思路

!!不要一上来就排查慢sql!!!不要一上来就排查慢sql!!!不要一上来就排查慢sql可能并不是sql或者索引的原因,就像做手术一样,你的看下病人的整体状况才能清楚。

2026-08-14 14:49:38 272

原创 补充:锁等待问题排查与解决

在日常开发中,锁等待、死锁是 MySQL 令人头疼的问题。当数据库出现大量或时,快速定位并解决锁问题就显得尤为重要。本文将通过一张精心设计的实验表,带你直观感受 InnoDB 的行锁、间隙锁、临键锁及死锁的触发场景,并介绍排查锁等待的 SQL 命令与方法。

2026-08-12 09:30:43 171

原创 四:MVCC 深度解析:三事务并发全流程

读不阻塞写,写不阻塞读:SELECT 不需要任何锁,直接读取对应版本,写操作不影响正在进行中的 SELECT。这是高并发 OLTP 场景的基础。COMMIT/ROLLBACK 极快:无论修改多少行,COMMIT 只写 CLOG 的几个 bit;ROLLBACK 同样只写 CLOG,数据页面不变。崩溃恢复简单:通过 WAL 重放就能恢复一致性,不需要回滚未提交事务的数据页(因为数据页中未提交事务的修改可以通过 CLOG 识别后忽略)。

2026-03-18 14:30:54 853

原创 三:页结构与剪枝

快照(Snapshot)是 PostgreSQL 在某一时刻对"哪些事务已提交"的一张快照记录,它定义了当前查询"能看到什么数据"。快照不是数据的物理副本,而是由几个数字组成的轻量结构。Read Committed 隔离级别:每条 SQL 语句执行前重新获取快照Repeatable Read / Serializable 隔离级别:事务内第一条语句获取快照,整个事务共用页剪枝是 PostgreSQL 的一种轻量级、单页范围内的清理机制。

2026-03-18 11:19:07 825

原创 二:行记录结构深度解析

PostgreSQL 行记录的设计哲学是将 MVCC 完全内嵌在每一行,以 Append-Only 的方式写入数据,用 xmin/xmax/ctid 在行头部维护完整的版本信息。特性原因COMMIT 极快只写 CLOG 的 2 bitROLLBACK 极快只写 CLOG,不回滚数据页读不阻塞写读操作找旧版本,写操作写新版本,互不干扰需要 VACUUMAppend-Only 导致旧版本堆积,必须定期清理所有索引地位平等索引与堆表完全分离,叶子都指向 TIDUUID 主键无负担。

2026-03-18 10:25:54 869

原创 高可用:Keepalived 配置文件详解

定义"如何检测 MySQL 是否健康"以及"检测结果如何影响本节点的选举优先级"。# 要执行的脚本路径# 脚本返回 0 = 正常,返回非 0 = 故障# 每隔 2 秒执行一次检测interval 2# 单次脚本执行超时时间(秒)# 超时视为失败,建议设为 interval 的 2 倍以上timeout 5# 连续失败 2 次,才触发 weight 扣分(防止偶发抖动误切换)fall 2# 连续成功 1 次,即恢复正常状态rise 1# 检测失败时,将本节点优先级降低 30 分。

2026-03-16 17:40:53 417

原创 高可用:mysql主备keepAlived+vip

实现简单:纯开源组件,配置成本低,运维人员容易上手切换快:正常情况下 5~10 秒完成故障切换,业务影响时间短无需改造应用:应用只需更改数据库连接地址为 VIP,无其他改动成本低:不需要额外的商业软件或云服务。

2026-03-16 16:42:14 421

原创 十三:InnoDB 锁机制

死锁是指两个或多个事务互相持有对方需要的锁,陷入永久等待的状态。经典死锁场景:事务 A 事务 BBEGIN;BEGIN;WHERE id=1;-- 持有 id=1 的 X 锁WHERE id=3;-- 持有 id=3 的 X 锁WHERE id=3;-- 申请 id=3 的 X 锁,等待 B...WHERE id=1;-- 申请 id=1 的 X 锁,等待 A...-- 死锁!A 等 B,B 等 A,永远无法推进业务场景推荐方式理由普通读取快照读(普通 SELECT)

2026-03-16 14:13:24 313

原创 十二:InnoDB MVCC(多版本并发控制)

通过隐藏列(trx_id + roll_pointer)将同一行数据的历史修改串成版本链,读操作在执行时生成 ReadView,根据活跃事务列表判断版本链上哪个版本对自己可见,从而实现无锁的并发读。隐藏列:每行数据携带"最后修改者"(trx_id)和"指向历史版本的指针"(roll_pointer),是版本链的基础设施。版本链(Undo Log 构成):保存数据的所有历史版本,是 MVCC 的"时间机器",让读操作可以回溯到任意历史时刻。ReadView。

2026-03-16 11:11:00 482

原创 十一:InnoDB Undo Log(回滚日志)

事务执行顺序:操作1(UPDATE amount) → 生成 Undo Log #0操作2(UPDATE status) → 生成 Undo Log #1操作3(INSERT id=3) → 生成 Undo Log #2操作4(DELETE id=2) → 生成 Undo Log #3ROLLBACK 时,逆序撤销:undo_no=3 → 撤销 DELETE:清除 id=2 的删除标记↓undo_no=2 → 撤销 INSERT:物理删除 id=3↓。

2026-03-16 10:24:37 388

原创 十:InnoDB Redo Log-一条事务完整生命周期例子

学习 MySQL 时,我们经常听到这些概念:Buffer Pool、Redo Log、Undo Log、脏页、Checkpoint、LSN……它们单独看都能讲清楚,但放在一起就容易混乱:它们到底在什么时候工作?谁先谁后?崩溃了数据为什么不丢?执行一条,假设 id=1 这条记录原来的 amount 是 200。从 BEGIN 到 COMMIT,从内存到磁盘,从正常流程到崩溃恢复,我们一步一步拆解,把每个细节都讲清楚。思路一:用顺序写代替随机写脏页刷盘是随机 I/O,速度慢;

2026-03-16 10:12:23 809

原创 九:InnoDB Redo Log(重做日志)

在 Redo Log 写入磁盘之前,InnoDB 会先将其写入内存中的Redo Log Buffer(重做日志缓冲区)。Redo Log Buffer 是一段连续的内存空间,内部由若干 512 字节的 Block 构成,通过-- 默认:16777216(16MB)参数默认值调优建议1生产环境保持1;对数据安全要求低的场景可设216MB有大事务或高并发写入时,适当增大至 64MB ~ 256MB48MB生产环境建议 512MB ~ 4GB,依据写入速率评估2。

2026-03-16 09:51:51 484

原创 八:InnoDB Buffer Pool

磁盘页 ──加载──→ Buffer Pool(缓存页)│↓ ↓ ↓Free链表 LRU链表 Flush链表(空闲页) (冷热分区) (脏页管理)│(热数据│冷数据)Free 链表管理可用缓存页。哈希表实现 O(1) 定位缓存页。LRU 链表通过 young/old 分区解决缓存污染问题。Flush 链表管理脏页,实现异步刷盘。多实例 + Chunk提升并发能力并支持动态扩容。掌握这些底层机制,才能在生产环境中做出正确的参数调优决策,让 MySQL 发挥出最佳性能。

2026-03-16 09:24:19 626

原创 七:EXPLAIN 深度解析与 SQL 优化实战指南

EXPLAIN是 MySQL 提供的查询执行计划分析工具,它能告诉你 MySQL打算怎么执行这条 SQL,而不是实际去执行它。是否走了索引,走了哪个索引扫描了多少行数据是否产生了临时表、文件排序JOIN 的驱动表顺序是否合理-- 基本用法-- MySQL 8.0 支持 EXPLAIN ANALYZE(真实执行并返回实际耗时)-- 格式化输出(树形结构,更直观)

2026-03-13 16:41:55 466

原创 六:InnoDB 表空间深度解析

InnoDB 存储体系│├── 物理存储层│ ├── 页(16KB) ← 最小 IO 单位,B+Tree 的节点│ ├── 区(1MB) ← 64个连续页,磁盘分配的基本粒度│ └── 段(逻辑) ← 每索引2个段:叶子节点段 + 非叶子节点段│├── 表空间类型│ ├── ibdata1 ← 系统表空间,只增不减│ ├── *.ibd ← 独立表空间(强烈推荐开启)│ ├── undo_00N ← Undo 表空间(8.0 独立,支持收缩)

2026-03-13 10:41:55 422

原创 五:数据目录深度解析,每个文件都在做什么

MySQL 5.7 为每一张表创建一个.frm文件,存储表的结构定义,包括:列名、数据类型、约束(NOT NULL、DEFAULT等)、索引定义等。your_db/├── users.frm ← users 表的结构├── orders.frm ← orders 表的结构└── products.frm ← products 表的结构无论表使用 InnoDB 还是 MyISAM 引擎,都有.frm文件。它由 MySQL Server 层管理,与具体存储引擎无关。.frm。

2026-03-13 09:36:57 541

原创 五:MySQL 索引使用优化指南:何时建、怎么建、怎么用

场景示例是否能用索引全值匹配✅匹配最左前缀WHERE a=1或✅范围查询✅前列精确+后列范围✅ORDER BY(方向一致)✅GROUP BY(列顺序一致)✅跳过最左列WHERE b=2(跳过 a)❌索引列参与函数运算❌排序方向不一致❌。

2026-03-12 11:15:49 498

原创 四:InnoDB 聚簇索引与二级索引深度解析:从页到 B+ 树

聚簇索引(Clustered Index)数据行本身和索引存储在一起,数据就按照主键的顺序物理排列在磁盘上。每张表有且仅有一个聚簇索引默认以**主键(PRIMARY KEY)**作为聚簇索引如果没有主键,InnoDB 会选一个唯一非空列代替,再不行就隐式创建一个rowid列与之对应的非聚簇索引(也叫二级索引/辅助索引),索引和数据是分开存的,索引里只存"去哪里找完整数据"的指针。当查询的列在二级索引中找不全时,InnoDB 需要拿着从二级索引中获取的主键值,回到聚簇索引。

2026-03-12 11:01:31 416

原创 三:理解Innodb数据页结构

InnoDB 以**页(Page)**为单位与磁盘交互,默认大小为16KB。即使只查一行数据,InnoDB 也会把整个 16KB 的页加载进 Buffer Pool即使只修改一个字段,刷盘时也是以整页为单位写入磁盘内存和磁盘之间的 I/O 粒度,始终是页,而不是行-- 查看当前页大小(单位:字节)-- 默认输出:16384(即 16KB)页类型十六进制值说明数据页(索引页)0x45BF存储 B+ 树叶子节点和非叶子节点的行数据Undo 日志页0x0002。

2026-03-06 11:11:53 449

原创 二:mysql行格式

用户定义的列按照建表时的列定义顺序① NULL 值不占用空间NULL 值只在"NULL 值列表"中用 1 个 bit 标记,在真实数据区域不占用任何字节。这正是 NULL 与空字符串''-- '' 是一个长度为 0 的字符串,在真实数据区占 0 字节,但变长字段长度列表中有记录 -- NULL 在真实数据区不占字节,只在 NULL 值列表中占 1 bit② 定长列与变长列的存储定长列INTBIGINTCHAR使用定长字符集时等):直接按固定字节数存储,无需额外记录长度变长列VARCHARTEXT。

2026-03-06 10:28:04 459

原创 一:mysql字符集与比较规则(为什么你的连接总是乱码)

写入路径:客户端(OS编码) → [character_set_client] → [character_set_connection]→ [列字符集] → 存储读取路径:存储 → [列字符集] → [character_set_results] → 客户端(OS编码)统一用utf8mb4:字符集层面,服务器、数据库、表、列全部统一为utf8mb4,一劳永逸连接要设置SET NAMES:确保与应用程序一致比较规则要想清楚:根据业务需求选择是否区分大小写(_civs_bin。

2026-03-06 09:48:55 390

原创 一:基本概念和快速了解

PostgreSQL 的历史可以追溯到 1986 年,起源于加州大学伯克利分校(UC Berkeley)由 Michael Stonebraker 教授主导的 POSTGRES 项目。该项目的目标是研究下一代关系型数据库管理系统,探索面向对象和规则系统等新特性。发展时间线:PostgreSQL 的开发由全球志愿者社区维护,核心团队称为 PostgreSQL Global Development Group(PGDG),每年发布一个主版本,支持周期为 5 年。PostgreSQL 凭借以下核心优势,成为众多企

2026-03-04 11:20:11 459

原创 ARM机器gcc11源码编译实践

优化措施时间节省说明60-70%跳过三阶段自举50%+只编译C/C++20-30%禁用多架构支持-j2并发编译30-40%相比单线程使用SSD2-3倍相比SD卡累计效果:相比默认配置,总时间可减少70-80%。从源码编译GCC是一个耗时但有价值的过程。通过本文介绍的优化方法,即使在资源受限的ARM设备上,也能在可接受的时间内完成编译。充足的准备:磁盘空间、swap、依赖正确的配置:禁用bootstrap、限制语言合适的并发:-j2 平衡速度与稳定性使用screen:防止中断。

2026-01-30 08:48:05 972

原创 linux内核模块编译

失败:如果提示 No such file or directory 或者链接是红色的(断链),说明 linux-headers 安装失败或版本不匹配。如果显示它是指向 /usr/src/linux-headers-xxx 的软链接,且目标目录存在,说明环境没问题。不需要运行 cp /boot/config-xxx .config。不需要运行 make modules_prepare。不需要运行 make menuconfig。直接使用系统已经配置好的环境来编译模块。

2025-12-22 15:30:21 227

原创 Linux 内核开发入门:从环境配置到 Hello World 实战

对于从事高性能网络开发(如 3A 系统、网关)的工程师来说,用户态(User Space)的优化往往有极限。当我们需要极致的性能时,我们就必须踏入**内核态(Kernel Space)**的领地。Linux 内核模块(Loadable Kernel Module, LKM)是进入这一领域的敲门砖。它允许我们在不重新编译整个操作系统内核的情况下,动态地向内核添加功能。本文将带你从零开始编写一个“Hello World”内核模块,并着重解决老旧内核版本无法下载开发依赖这一常见痛点。环境。

2025-12-18 17:06:34 916

原创 Linux 网络发包的极致之路:从普通模式到 AF_XDP ZeroCopy

特性普通模式 (send)核心路径完整协议栈协议栈 (部分绕过)驱动直通驱动直通sk_buff 分配✅有(重)✅有(重)❌无❌无CPU 数据拷贝✅1次(用户->内核)❌0次(映射)✅1次(UMEM->驱动)❌0次(纯DMA)协议栈/流控全套 (L2-L4 + Qdisc)部分 (Qdisc)无无典型性能 (单核)< 1M pps10M+ pps适用场景业务应用 (Nginx/Redis)传统发包器 (TrafficGen)通用高性能网关极限发包测试、防火墙。

2025-11-28 13:05:47 446

原创 Linux 网络收包的进阶之路:从普通 socket 到 AF_XDP 零拷贝

特性普通模式 (recv)核心路径完整协议栈协议栈入口截胡驱动层截胡 (Pre-skb)DMA 直达用户内存sk_buff 分配✅有(重)✅有(重)❌无(轻量 xdp_buff)❌无CPU 数据拷贝✅2次(内核+用户)✅1次(内核内)✅1次(驱动->UMEM)❌0次(纯DMA)协议栈开销全套 (L2/L3/L4)部分 (L2)无无典型性能 (单核)< 1M pps硬件要求无无支持 XDP 的驱动支持 ZC 的网卡。

2025-11-28 12:59:52 492

原创 linux启动揭秘

在旧版本 Linux 中,硬件信息写死在 C 代码里。Linus Torvalds 曾发火称其为“垃圾代码”。于是引入了设备树。定义:它是一份硬件清单(文本文件.dts-> 编译为.dtb内容:它不包含逻辑,只描述**“有什么”和“在哪里”**。例如:有一个 LED,接在 GPIO 5,地址是 0x1000。例如:有一个 网卡,中断号是 28。定义:它是软件逻辑(C代码)。内容:它描述**“怎么用”**。例如:如何操作寄存器让灯亮,如何处理网卡的数据包。接口。

2025-11-28 02:10:16 1020

原创 web-ble探索

主入口对象。

2025-10-24 15:08:23 375

原创 MetricsQL快速上手

MetricsQL 是 VictoriaMetrics 推出的时间序列查询语言,兼容 PromQL 语义,并提供更强的函数集、更高的性能优化与便捷的表达式扩展。

2025-10-13 16:40:26 1059

原创 victoriesmetircs时序库数据查询series、labels、values、export

用于根据标签匹配器查询符合条件的全部时间序列元数据(仅标签集合),不返回具体数值数据。适用于指标探索、标签值分析和查询调试场景。

2025-10-13 16:20:09 754

原创 victoriesmetircs时序库数据查询query、query_range

基于特定时间点对 MetricsQL 表达式求值,返回离该时刻最近的单个数据点。

2025-10-11 14:14:24 803

原创 victoriesmetircs时序库数据写入

方式吞吐量CPU消耗适用场景InfluxDB 协议⭐⭐⭐⭐⭐低生产环境高频写入JSON⭐⭐⭐⭐中业务系统直连、灵活数据Prometheus⭐⭐高兼容Prometheus生态CSV⭐⭐⭐中批量导入历史数据。

2025-10-11 11:08:03 1051

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除