- 博客(201)
- 资源 (21)
- 收藏
- 关注
原创 MySQL查询执行(三):显示随机消息
思考:假设有一个英语学习App,首页有一个随机显示单词的功能,也就是根据每个用户的级别有一个单词表,然后这个用户每次访问首页的时候,都会随机滚动显示三个单词。如果让你来设计这个SQL语句,你会怎么写呢?
2024-07-28 14:41:10 721
原创 MySQL查询执行(一):count执行慢
MySQL查询处理器是MySQL数据库服务器的组件,它负责执行SQL查询。查询处理器的主要任务是解析查询(把用户提交的SQL查询转换为可以被数据库引擎理解和执行的数据操作指令序列),生成查询计划,然后执行该计划。SQL语句查询编译的步骤:1)语法分析,建立查询分析树;2)生成逻辑计划,将分析树转化为初始查询计划,并优化;(逻辑优化,生成逻辑执行计划)3)生成物理计划,为逻辑计划中的每个操作符选择实现算法以及执行顺序;
2024-07-27 17:06:48 1050
原创 存储管理(三):分区表
表对应磁盘文件:我在表t中初始化插入了两行记录, 按照定义的分区规则, 这两行记录分别落在p_2018和p_2019这两个分区上。从图中可以看到,这个表包含了一个.frm文件和4个.ibd文件,每个分区对应一个.ibd文件。对于引擎层来说, 这是4个表。对于Server层来说, 这是1个表。注:分区表是由server层定义的,而非引擎层。
2024-06-28 18:35:51 782
原创 Centos MySQL 源码安装(5.6)
注1:5.6 不支持C++ 11及更高版本,所以在编译 MySQL 5.6 时,需将编译器配置改为: C++98 或 C++03 标准。然而,由于您之前定义的 byte 宏,编译器在尝试解析 std::byte 类型的枚举时可能会遇到麻烦,因为它实际上试图将 byte 解释为宏展开,而不是 std::byte 类型。注1:my3307.cnf文件中的/home/mysql80/node3307/mysql为mysql安装路径,根据自己情况进行更改;注:上述安装过程为无密码安装,因此连接时,无需输入密码。
2024-06-21 19:06:57 178
原创 MySQL存储管理(一):删数据
表空间可以看做是InnoDB存储引擎逻辑结构的最高层,所有的数据都存放在表空间中。默认情况下,InnoDB存储引擎有一个共享表空间idbdata1,即所有数据都存放在这个表空间内。如果用户启用了参数 innodb_file_per_table,则每张表内的数据可以单独放到一个表空间内。
2024-06-21 18:44:34 1062
原创 MySQL日志(三):数据安全
回答这个问题前,先看一下磁盘、SSD、内存随机读写与顺序读写的性能对比,如下图所示:从上图可以看出两点:1)内存的读写速度比磁盘随机读写高出几个数量级。2)磁盘顺序读写速度堪比内存读写速度。问1:什么是WAL呢?WAL即 Write Ahead Log,WAL的核心思想是,每次更新操作都先写入日志,只做了写日志这一个磁盘操作。这个日志叫做redo log(重做日志),也就是《孔乙己》记账的粉板,在更新完内存写完redo log后,就返回给客户端,本次更新成功。
2024-06-14 19:37:26 882
原创 MySQL日志(二):MySQL抖动
一条SQL语句, 正常执行的时候特别快, 但是有时也不知道怎么回事, 它就会变得特别慢, 并且这样的场景很难复现, 它不只随机, 而且持续时间还很短。看上去, 这就像是数据库“抖”了一下。今天, 我们就一起来看一看这是什么原因。
2024-06-14 19:30:55 902
原创 MySQL主从复制(六):数据库是否可用
所以, 我们说InnoDB在设计时, 遇到进程进入锁等待的情况时, 将并发线程的计数减1的设计, 是合理而且是必要的。因此上述select 1示例中,同时在执行的语句超过了设置的innodb_thread_concurrency的值, 这时候系统其实已经不行了, 但是通过select 1来检测系统, 会认为系统还是正常的。注:虽然说等锁的线程不算在并发线程计数里, 但如果它在真正地执行查询, 就比如我们上面例子中前三个事务中的select sleep(100) from t, 还是要算进并发线程的计数的。
2024-06-13 13:57:25 1122
原创 MySQL主从复制(四):主备切换
一主多从结果:图中, 虚线箭头表示的是主备关系, 也就是A和A’互为主备, 从库B、 C、 D指向的是主库A。一主多从的设置, 一般用于读写分离, 主库负责所有的写入和一部分读, 其他的读请求则由从库分担。主备切换后结果:相比于一主一备的切换流程, 一主多从结构在切换完成后, A’会成为新的主库, 从库B、 C、 D也要改接到A’。正是由于多了从库B、 C、 D重新指向的这个过程, 所以主备切换的复杂性也相应增加了。
2024-05-24 20:17:19 1415
原创 MySQL主从复制(三):主从延迟
主备流程图:谈到主备的复制能力,要关注的是上图中的两个黑色箭头。一个箭头代表了客户端写入主库,另一个箭头代表的是sql_thread执行中转日志(relay log)。如果用箭头的粗细来代表并行度的话,那么真实情况就如图所示,第一个箭头要明显粗于第二个箭头。1)在主库上,影响并发度的原因就是各种锁了。由于InnoDB引擎支持行锁, 除了所有并发事务都在更新同一行(热点行) 这种极端场景外, 它对业务并发度的支持还是很友好的。
2024-05-24 20:06:51 1073
原创 MySQL主从复制(二):高可用
正常情况下, 只要主库执行更新生成的所有binlog, 都可以传到备库并被正确地执行, 备库就能达到跟主库一致的状态, 这就是最终一致性。但是, MySQL要提供高可用能力, 只有最终一致性是不够的。
2024-05-24 20:01:37 766
原创 MySQL主从复制(一):主备一致
这条命令不是我们主动执行的, 而是MySQL根据当前要操作的表所在的数据库,自行添加的。2)另一种场景是, 有三个节点的时候, 如图所示, trx1是在节点 B执行的, 因此binlog上的server_id就是B, binlog传给节点 A, 然后A和A’搭建了双M结构, 就会出现循环复制。你可以看到, 当binlog_format使用row格式的时候, binlog里面记录了真实删除行的主键id, 这样binlog传到备库去的时候, 就肯定会删除id=4的行, 不会有主备删除不同行的问题。
2024-05-24 19:57:02 807
原创 MySQL基础知识:MySQL索引
索引的意义:在大量数据中,加速访问少量特定数据;使用索引的前提条件:1)索引块数量小于数据块数量;2)索引键有序,故可以使用二分查找等高效的查找方式;(提升查找效率)3)索引文件足够小,能够长期存放在内存缓冲区中;(减少磁盘IO)注:当查询数据量超过一定比例时,全表扫描可能比走索引更高效。
2024-04-26 20:12:16 1018
原创 MySQL基础知识:MySQL事务
在视图A、B、C里面,这一个记录的值分别是1、2、4,同一条记录在系统中可以存在多个版本,就是数据库的多版本并发控制(MVCC);当数据库上有多个事务同时执行的时候, 就可能出现脏读(dirtyread) 、 不可重复读(non-repeatable read) 、 幻读( phantom read) 的问题, 为了解决这些问题, 就有了“隔离级别”的概念。1)每行数据有多个版本,按照事务ID倒序排列,每次事务更新数据时,会生成一个新的数据版本,并在版本中记录事务ID,即row trx_id;
2024-04-13 19:34:24 1461 1
原创 MySQL日志(一):更新语句执行流程
一条查询语句的执行过程一般是经过连接器、 分析器、 优化器、 执行器等功能模块, 最后到达存储引擎。那么, 一条更新语句的执行流程又是怎样的呢?下面我们从一个表的一条更新语句进行具体介绍:首先, 可以确定的说, 查询语句的那一套流程, 更新语句也是同样会走一遍。更新语句的执行流程:1)连接器连接数据库;2)分析器通过词法分析和语法分析直到这是一条更新语句;3)优化器决定1使用ID这个索引;4)执行器负责具体执行,找到这一行,然后更新。
2024-04-13 17:05:41 1124
原创 MySQL基础知识:MySQL架构
看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样, 对于MySQL的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。我们看到的只是输入一条语句, 返回一个结果, 却不知道这条语句在MySQL内部的执行过程。
2024-04-13 16:54:42 754
原创 Ubuntu快捷安装MySQL
注:设置完密码后,后续如果使用 mysql -uroot -h127.0.0.1 -pkingsoft. -P3306(可使用 mysql -uroot -h localhost -pkingsoft. -P3306 命令代替)命令连接mysql时,可能会报错。注:如果 /etc/my.cnf 文件存在,则优先使用该文件,如果 /etc/my.cnf 文件不存在,则使用 /etc/mysql/my.cnf 文件,以此类推。注1:如果不加127.0.0.1,则本地proxy无法连接到mysql。
2024-04-11 18:47:29 629
原创 MySQL 主从复制部署(8.0)
主从数据库是一种数据库架构模式,通常用于提高数据库的性能、可用性和可伸缩性。它包括两种类型的数据库服务器:1)主数据库(Master):主数据库是读写数据的主要数据库服务器。所有写操作(插入、更新、删除)都在主数据库上执行。主数据库负责维护数据的一致性,并将写操作的变更记录下来。2)从数据库(Slave):从数据库是只读副本,它从主数据库中复制数据。承担一部分主库的的读数据压力,从而减轻了主数据库的负担。从数据库可以有多个,构成一个复制链,其中每个从数据库都从前一个从数据库中复制数据。
2024-04-10 18:46:06 1303
原创 Go 版本 Etcd 客户端操作 Etcd(附完整 Demo)
本文诣在使用 Go 客户端操作 Etcd,并实现元数据的写入(单条写、批量写)、读取(单挑读、前缀读)、监听(watch)、更新(update)!注:数据是以 Protobuf 格式存储到 Etcd 的!
2024-03-23 18:57:14 884 1
原创 物理查询优化(二):两表连接算法(附具体案例及代码分析)
Hash Join 是一种执行连接的方法,如下图所示:选择合适的连接参与表作为内表(build table),构建hash表;然后使用另外一个表(probe table)的每一条记录去探测第一步已经构建完成的哈希表寻找符合连接条件的记录;输出匹配后符合需求的记录;排序归并连接算法又称归并排序连接算法,简称归并连接算法。归并连接算法需要首先对两个表按照关联的字段进行排序,然后分别从两个表中取出一行数据进行匹配,如果合适放入结果集;
2024-03-23 17:34:11 1521
原创 Etcd Raft 协议(进阶篇)
在正式开始介绍 Raft 协议之间,我们有必要简单介绍一下其相关概念。在分布式系统中,一致性是比较常见的概念,所谓一致性指的是集群中的多个节点在状态上达成一致。在程序和操作系统不会崩溃、硬件不会损坏、服务器不会掉电、网络绝对可靠且没有延迟的理想情况下,我们可以将集群中的多个节点看作一个整体,此时要保证它们的一致性并不困难。但是在现实的场景中,很难保证上述极端的条件全部满足,节点之间的一致性也就很难保证,这样就需要 Paxos、 Raft 等一致性协议。
2024-03-21 19:43:16 1343
原创 Protobuf 的介绍与使用(入门级)
Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。
2024-03-21 19:00:56 1436
原创 linux 使用 go 连接 etcd 集群时报错
注:使用 "github.com/coreos/etcd/clientv3" 方式引用时会报如上错误!
2024-03-21 18:54:36 486
原创 Etcd 介绍与使用(入门篇)
etc (基于 Go 语言实现,)在 Linux 系统中是配置文件目录名;etcd 就是配置服务;etcd 诞生于 CoreOS 公司,最初用于解决集群管理系统中 os 升级时的分布式并发控制、配置文件的存储与分发等问题。基于此,etcd 设计为提供高可用、强一致性的小型** kv 数据存储**服务。项目当前隶属于 CNCF 基金会,被包括 AWS、Google、Microsoft、Alibaba 等大型互联网公司广泛使用;
2024-03-17 16:45:53 2903
原创 VsCode 使用密钥连接 Centos
把 id_rsa 文件复制到 windows 中 C:\Users\heliubei\.ssh 路径下。注意:必须复制到 C:\Users\heliubei\.ssh 路径下,方可生效!注意:有些配置文件中没有这两项配置,但不影响!重启 VsCode 即可使用密钥连接服务器!注意:是否需要禁用密码登陆看个人需要!1)打开 SSH 配置文件。2)查看并确认以下两项配置。4)重启 SSH 服务。
2024-03-14 16:22:03 348
原创 物理查询优化(一):索引的使用(案例分析)
从上述 查询执行计划来看,尽管连接条件 a1 = b1 中的 a1 列和 b1 列都是索引列,但在表 a 中使用了顺序扫描,在表 b 中使用了索引扫描。从查询执行计划来看,a1 和 b1 都走了索引,能走索引的原因是在连接条件中,出现了 a1 = 1 条件,使得查询优化器可以根据 ”常量传递“ 优化技术推知 b1 = 1,所以在表 a 和 b 上可以各自使用索引扫描。9)对表做查询,有索引列对象作为过滤条件,操作符是范围操作符 ,可做索引扫描(PG 不可做索引扫描),且可走 ICP下推;
2024-02-27 21:24:27 604
原创 GDB 调试 MySQL 源码
说明:执行完启动命令后会直接跳转到 “--Type for more, q to quit, c to continue without paging--” 直接回车即可!回车后,如果出现:Reading symbols from /usr/local/mysql80/bin/mysqld...,则说明启动成功!直接回车,便可进入语句:select * from t1 where id >8 limit 2, 2;由上图可知,调试进入了 is_cond_match_ranges 函数的第一行!
2024-02-21 09:57:48 729
原创 Sysbench 性能测试(小白快速上手)
Sysbench 是一个在Linux系统上进行性能测试和基准测试的工具。它可以用于评估计算机系统的各种性能指标,如 CPU 性能、内存性能、文件 I/O性 能和数据库性能等。Sysbench 提供了多种测试模式和选项,可以帮助用户模拟不同负载条件下的性能表现,从而有助于优化系统配置和应用程序性能。1)Sysbench 附带了以下捆绑的基准测试oltp_*.lua:类似oltp的数据库基准的集合fileio:文件系统级基准测试cpu:简单的cpu基准测试memory:内存访问基准。
2024-02-06 20:10:23 2707
原创 InnoDB 锁系统(小白入门)
锁是数据库系统区别于文件系统的一个关键特性。数据库系统使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性。虽然数据库系统做的越来越类似,但有多少种数据库,就可能有多少种锁的实现方法。对于 MyISAM 引擎,其锁是表锁设计。并发情况下的读没有问题,但是并发插入时的性能就要差一些,若插入是在“底部”,MyISAM 存储引擎还是有一定的并发写入操作。对于 Microsoft SQL Server 数据库,在 2005 版本之前其都是页锁。相对表锁的 MyISAM 引擎来说,并发性能有所提高。
2024-02-04 21:47:22 674
原创 tcpdump、wireshark 抓包分析(小白快速上手)
网络世界中的数据包一般都是不可见的,导致在学习计算机网络的时候会觉得其非常抽象,加大了学习的难度。自从有了网络包分析工具:tcpdump 和 Wireshark,使不可见的数据包得以可视化。问题:tcpdump 和 wireshark 有什么区别?tcpdump 和 wireshark 是最常用的网络抓包和分析工具,更是分析网络性能必不可少的利器。1)tcpdump 仅支持命令行格式使用,常在 Linux 服务器中抓取和分析网络包;
2024-01-23 22:06:33 2076 1
原创 MySQL 协议(非常详细适合小白学习)
MySQL 查询过程大致如下:1)客户端与服务器端建立连接;2)客户端登陆 MySQL;3)客户端向服务器端发起一条请求;4)服务器端先检查查询缓存,如果命中缓存,则直接返回结果;否则交给下一阶段;5)服务器进行 SQL 解析并生成解析树及执行计划(初始执行计划);6)服务器对解析树进行查询优化(RBO、CBO)并生成最终执行计划;7)MySQL 根据执行计划,调用相应 API,以进行数据的读取;8)将从存储引擎读取的结果返回给客户端,并缓存查询结果。
2024-01-15 22:54:09 2531
原创 JDBC PrepareStatement 的使用(附各种场景 demo)
1)PreparedStatement 继承自 Statement ,是 Statement 的一种扩展;2)PreparedStatement 特点:使用 PreparedStatement 可以执行动态参数化 sql(在 sql 语句中用占位符?
2024-01-12 18:56:55 3208
原创 JDBC 连接 MySQL 配置(附完整 demo)
8)下载完成后,解压缩“zip”文件,您将看到驱动包(mysql-connector-j-8.0.31.jar)。4)在MySQL Community Downloads页面,找到"Connector/J"链接,点击进入;3)在下载页面,找到"MySQL Community (GPL) Downloads"部分,点击进入;6)选择您需要的版本号,并确保选择"Platform Independent"作为操作系统;2)点击页面上方的"DOWNLOADS"菜单;7)点击"zip"格式的下载链接开始下载;
2024-01-11 21:10:05 1072
原创 MVCC 并发控制原理-源码解析(非常详细)
1)脏读:一个事务读取到另一个事务更新但还未提交的数据,如果另一个事务出现回滚或者进一步更新,则会出现问题。2)不可重复读:在一个事务中两次次读取同一个数据时,由于在两次读取之间,另一个事务修改了该数据,所以出现两次读取的结果不一致。3)幻读:在一个事务中使用相同的 SQL 两次读取,第二次读取到了其他事务新插入的行。要解决这些并发事务带来的问题,一个比较简单粗暴的方法是加锁,但是加锁必然会带来性能的降低,因此 MySQL 使用了 MVCC 来提升并发事务下的性能。
2024-01-02 22:04:50 1214
原创 Ubuntu(WSL)创建用户并赋予权限
4)接着会提示输入:Full Name []: ...等,直接回车即可。2)若待创建用户已存在,则先删除已存在用户,然后创建新用户。3)执行创建新用户命令后,输入密码,重复输入确认密码。1)执行如下命令创建新用户。
2024-01-01 22:55:44 3048
原创 Ubuntu(WSL)卸载与安装指定版本的 openssl
说明:/usr/bin/openssl、/usr/include/openssl 是 openssl 软件包的默认扫描路径,如果使用命令安装 openssl 会自动安装到该目录下(每个软件包都有一个系统默认路径);1)删除软链接(rm -rf ./软链接名称,若rm -rf ./软链接名称/ ,则会把软链接以及软链接指向下的内容删除)4)选择安装目录(prefix 是安装目录),并使用 -fPIC 参数链接动态库。3)查看 OpenSSL 版本,安装完成。
2023-12-09 11:13:57 2638
原创 安装 openssl 时报错:openssl: symbol lookup error: openssl: undefined symbol: EVP_mdc2, version OPENSSL_1_
在指定安装路径时使用 -fPIC 参数链接动态库。2)重新加载动态链接。
2023-12-08 18:55:38 2216
原创 解决删除文件后 WSL2 磁盘空间不释放的问题
由于我这里 C 盘空间不足主要是 Ubuntu-22.04 删除文件后 ext4.vhd 没有缩容引起的,所以只压缩了它的 ext4.vhdx。注意:如果有多个 Linux distributions,可根据自己的情况压缩对应的 ext4.vhdx。2)备份指定的 Linux distribution 到指定的位置。上述操作执行完毕,WSL2 删除文件后空出来的磁盘空间就被释放了。1)关闭 WSL2 中的 linux distributions。2)运行管理计算机的驱动器的 DiskPart 命令。
2023-12-08 18:46:55 2851
Go 版本 Etcd 客户端操作 Etcd
2024-03-23
JDBC PrepareStatement 使用(附各种场景 demo)
2024-01-14
//===计算机网络基础知识===//
2023-09-14
编译原理学习视频课件!
2023-08-31
相位差测量电路-非常详细!
2023-04-13
遥感影像配准结果输出tif影像
2022-06-08
根据投影坐标裁剪影像中的目标区域
2022-06-07
高斯正反算(投影坐标转大地坐标、大地坐标转投影坐标)非常好用
2022-05-21
投影坐标与像素坐标间的转换
2022-04-29
高斯正反算设计实现!!!
2022-04-23
MVSIP2017(在VS中用于程序打包的扩展)
2022-04-08
boosts1.7.8标准库
2022-03-21
二值图像细化算法(非常实用)
2022-01-03
多时相影像配准结果使用 Qt 进行模块化显示
2021-12-20
多时相遥感影像变化检测卷帘功能.zip
2021-12-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人