自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一缕阳光的博客

在通向成功的道路上勇往直前

  • 博客(483)
  • 收藏
  • 关注

原创 MySQL 8.0.32之optimize table

语句时,optimize table 执行的是 recreate (mysql_recreate_table(...)) + analyze (handler::ha_analyze),不会阻塞其他的SQL的,并且该语句是online ddl。执行 optimize table之后,查看表的统计信息显示还是ROW还是2,Index_length也是0,因此统计信息并没有修改。最新使用到了optimize table ,不清楚是做什么用的,因此在8.0.32版本上测试了下该SQL语句。之后才会更新统计信息。

2023-04-19 18:22:57 368

原创 MySQL表碎片是如何产生的

在MySQL中执行delete语句时,该条记录并没有立即从ibd文件中删除,而是给该条记录打上了一个delete_flag删除的标签,如果一张表有5000w条记录时,那么执行其他SQL语句时会导致额外的访问该删除的列,因此导致效率低下。来清理垃圾数据,也就是重建表。所以如果我们用 delete 命令把整个表的数据删除,仅仅是,把所有的数据页都标记为可复用,磁盘上的文件大小并不会改变。InnoDB 的数据是按页存储的,如果删除一个数据页上记录,那么一整个数据页就可以被复用,并且可以被复用到任何位置。

2023-04-19 17:39:54 47 1

原创 将xlsx文件中内容转换到md文件

xlsx中的内容指的是表格内容,直接对xlsx中的内容 Ctrl + A ,然后Ctrl+c复制,此时,xlsx中的表格就会 完全的 显示在md文件中。

2023-02-24 10:52:41 207

原创 2022年总结

同时在所在的公司经过22个月(1年加10个月)的历练对本行业有了新的认识和思考,对所重试的行业有了新的领悟,也学到了一些新的知识,提升了自己,得到了升华。大城市的娱乐还是比较多的,起码比我老家农村那边的娱乐项目比较多,但是对于普通的打工一族来说娱乐是比较少的,特别是有了孩子之后娱乐项目基本没有,加上2022年疫情,都不敢出去游玩了,对于大部分人来说,2022年是最不值得提起的一年,也是最不值得怀念的一年,因为这一年给了普通人最致命的一击,每个人都有深刻体会。主要分为以下几个方面,工作、生活、家庭和娱乐。

2022-12-30 18:07:25 165 1

转载 什么是 mmap

换言之,CPU 进行一次磁盘读写操作涉及的数据量至少是 4KB,但是进行一次内存操作涉及的数据量是基于地址的,也就是通常的 64bit(64 位操作系统)。mmap 受限于操作系统内存大小:例如在 32-bits 的操作系统上,虚拟内存总大小也就 2GB,但由于 mmap 必须要在内存中找到一块连续的地址块,此时你就无法对 4GB 大小的文件完全进行 mmap,在这种情况下你必须分多块分别进行 mmap,但是此时地址内存地址已经不再连续,使用 mmap 的意义大打折扣,而且引入了额外的复杂性;

2022-09-22 17:09:53 8270

转载 开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别

GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。而在MPL(1.1版本)许可证中,对源代码的定义是:“源代码指的是对作品进行修改最优先择取的形式,它包括:所有模块的所有源程序,加上有关的接口的定义,加上控制可执行作品的安装和编译的‘原本’(原文为‘Script’),或者不是与初始源代码显著不同的源代码就是被源代码贡献者选择的从公共领域可以得到的程序代码。LGPL是GPL的一个为主要为类库使用设计的开源协议。

2022-08-22 15:57:10 167

原创 MySQL中创建partition表的几种方式

其中,个人比较喜欢的方式是partition by hash(c) partitions xxx.数据库:MySQL 8.0.25。欢迎补充其他的方式。

2022-08-17 16:47:46 1333

原创 查询mysql单个分区的方法

今天工作中遇到了如何查询单个分区中数据的问题,记录下以便于后续再次遇到此问题就可以直接查询该文章了。数据库: musql 8.0.25。

2022-08-17 16:39:50 2404

原创 MySQL cast()函数以及json列

在工作中遇到了json列,不清楚如何写SQL,查询了下相关的文档之后总结下,根据json列的值进行区分,列值指的是 json_type(json列)的结果。2、列值为 time/date/datetime。3、列值为 signed/unsigned。5、列值为 double/float。6、列值为 timestamp。4、列值为 object。7、列值为array。...

2022-08-11 17:27:53 854

转载 一定用得到的免费 C++ 资源,值得收藏!

提到C/C++语言很多初学者都觉得,学到中间就进行不下去了,但是如果你最难啃的那几块硬骨头拿下,一切都会顺畅许多,而且C++诞生很久了,因此有大量可以免费阅读编程文档。近日,在Quora上发现一份免费的C++资料列表,涉及到C++的各方各面。如果你对C++感兴趣,不妨继续往下看看看这些资料是不是你正需要的。...

2022-07-27 18:55:15 189

转载 多线程的互斥锁应用RAII机制

从输出结果上看,我们的锁是生效的,没有出现错乱。这里的资源可以是文件句柄,内存,Event,互斥量等等,由于系统的资源是有限的,就好比自然界的石油,铁矿一样,不是取之不尽,用之不竭的。在步骤一和步骤二上,我们平时都比较容易把握,而资源的释放会因为种种编码原因容易被忽略,导致系统资源实际没有使用了,但却没有释放或者引发其他问题,影响了系统资源利用率。RAII的做法是使用一个类对象,在对象的构造函数中获取资源,在对象生命期内控制对资源的访问,最后在对象消失时,其析构函数来释放获取的资源;......

2022-07-27 17:30:40 116

转载 并发与并行的区别

并发(concurrency)指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。并行在多处理器系统中存在,而并发可以在单处理器和多处理器系统中都存在,并发能够在单处理器系统中存在是因为并发是并行的假象,并行要求程序能够同时执行多个操作,而并发只是要求程序假装同时执行多个操作(每个小时间片执行一个操作,多个操作快速切换执行)。并发是指一个处理器同时处理多个任务。...

2022-07-26 17:37:02 7564 1

转载 普通的int main(){}没有写return 0;会怎么样?

但个人认为这也确实是不好的习惯,mian函数会犯这种错误,其它函数估计也会这样,所以最好所有的带有返回值的函数都添加returnxxx。网站更强大的功能是它支持市面上几乎所有的编译器,而且各个版本都有。得出结论正常一个带有返回值的函数,返回值都会存在某个地方,可能是栈上也可能是寄存器里,如果你不给它返回值,那可能外部获取的返回值就是个奇奇怪怪的值,因为咱也不知道那块地址是什么数据。看我右面红框圈出来的代码,大家可以理解为eax就是main()函数的返回值,这里可以看到main()函数的返回值是0。...

2022-07-26 15:37:53 1304

转载 对int变量赋值的操作是原子的吗?

count++;是原子操作吗?先说答案1、在单处理器下,如果将count++;语句翻译为单指令时,是原子操作。不过现在处理器都会对语句进行优化。2、在多处理器下,对于X86和ARM两个处理器来说(1)、在X86架构下,指令集提供了指令前缀lock用于锁定前端串行总线,保证了指令执行时不会收到其他处理器的干扰。因此是原子操作。(2)、在ARM架构下,引入了独占访问内存来实现"原子操作"。原问题什么指令集支持原子操作?其原理是什么?如果考虑到全部的指令集,问题太大了,这里简化下。...

2022-07-26 15:31:53 264

原创 main()的参数argc与argv

C语言中的main()函数,一般会带有2个参数,例如int main (int argc, char* argv[]),这是一个典型的main函数的声明。参数如下: argc: 整数, 为传给main()的命令行参数个数。 argv: 字符串数组。 在DOS 3.X 版本中, argv[0] 为程序运行的全路径名; 对DOS 3.0 以下的版本, argv[0]为空串("") 。 argv[1] 为在D

2022-06-21 18:44:24 462

原创 今年适合买房吗

本人是程序员,今天不聊程序相关的事情。不过今天有了点时间,考虑了下今年是否适合买房这件事。因为从中央到地方都在鼓励买房,每个人根据自己的实际情况决定是否要买房。优点:(1)、房贷利率低,基本上是历史低点了(2)、现在转到买方市场了,买家可以尽情的挑选房子。但是期房尽量选择央企,中小开放商的期房就不要去看了,你懂得。(3)、二手房市场低迷,可以选择的比较多,谈价的空间大缺点:(1)、疫情导致工作不稳定,收入不稳定,也就是月供不稳定。小心买了之后被法拍(2)、对于期房,开发商极度缺钱,很可能烂尾,维权困难。例如

2022-06-17 18:23:31 91

原创 MySQL中varchar(11)与int(11)的区别

结果:对于varchar(11):最多存储11个字符,超过则不存。mysql> create table tt(c1 int primary key,c2 varchar(50))engine=xxx;Query OK, 0 rows affected (0.15 sec)mysql> insert into tt values(1, 'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeef');ERROR 1406 (22001

2022-05-31 15:09:49 297 1

原创 记一次使用pt-query-digest工具分析MySQL慢查询日志

最近遇到了MySQL性能问题,使用percona 的 pt-query-digest工具分析性能的瓶颈点。并且pt-query-digest工具要优于MySQL本身自带的mysqldumpslow工具。查看pt-query-digest工具在ubuntu下的安装流程请看:ubuntu下安装pt-query-digest_一缕阳光a的博客-CSDN博客https://blog.csdn.net/zgaoq/article/details/124710484?spm=1001.2014.3001.550

2022-05-11 16:13:00 315

原创 ubuntu下安装pt-query-digest

最近在开发MySQL时要使用pt-query-digest工具分析性能问题,也一路遇到了一些问题,记录下俩偏于日后翻看。系统: #45~20.04.1-Ubuntu SMP Mon Apr 4 09:38:31 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux在安装过程中遇到了很多的问题,官网给的直接安装失败,不再贴图,下面是安装成功的过程:Ubuntu下安装pt-query-digest的过程:(1)、安装percona-toolkitsudo a

2022-05-11 15:10:00 422

转载 mysqld_safe启动脚本源码阅读与分析

原文链接:https://blog.csdn.net/weixin_39844426/article/details/113422137前几天读了下mysqld_safe脚本,个人感觉还是收获蛮大的,其中细致的交代了MySQL数据库的启动流程,包括查找MySQL相关目录,解析配置文件以及最后如何调用mysqld程序来启动实例等,有着不错的参考价值;与此同时,脚本中涉及了很多shell编程中的小技巧,像变量解析,sed替换转义,进程优先级的判断以及无处不在test结构等等,当作Linux shell的学习

2022-05-09 18:28:26 485

转载 mysql ld preload过程

纯手工打造每一篇开源资讯与技术干货,数十万程序员和Linuxer已经关注。导读本文将叙述通过二进制源码方式安装Percona-5.7.15,并进行快速启动。这边如何使用二进制版本安装Percona-5.7.15就不说了,和之前一模一样。不做多余的事1、解压2、创建用户3、创建相关目录并且赋予MySQL权限4、使用mysqld初始化麻烦的地方按道理来说安装和启用MySQL应该是一件很容易的事,特别是使用二进制版本安装的特别容易的,只要解压初始化就行了。但是在Percon

2022-05-09 18:25:38 279

原创 MySQL字段值大小写敏感的解决方案

最近在用开源的MySQL 8.0开发本公司的产品,在客户现场建表时默认使用的是CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 字符集导致与oracle的结果不一致,最后将建表时的字符集改为utf8mb3就可以了。正常建表如下,默认使用的是CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 字符集[test]> CREATE TABLE t3(id int primary key, name varchar(50))eng

2022-04-27 16:38:16 2060 1

原创 MySQL中的insert ignore into讲解

最近工作中,使用到了insert ignore into语法,感觉这个语法还是挺有用的,就记录下来做个总结。insert ignore into : 忽略重复的记录直接插入数据。包括两种场景:1、插入的数据是主键冲突时insert ignore into会给出warnings,show warnings就可以看到提示主键冲突;[test]> create table tt(c1 int primary key, c2 varchar(50))engine = xx;Query

2022-04-26 17:41:05 26531

原创 STL中的set/map

std::set/std::map底层实现的机制是红黑树,树中的数据是有序的,那么进行插入、删除、查找时的平均时间复杂读O(logN),以2为低的对数N。set相当于map中的key,map中的key不能有重复的并且按升序进行排序,如果结构体作为map中的key,需要重写小于函数实现排序的功能。std::unordered_set<T>和std::unordered_map<T, T>底层实现方式是哈希表,其中的数据是无序的。查找时效率高,没有hash冲突情况下时间复杂度是O

2022-04-18 19:35:57 991

原创 std::map中的lower_bound与upper_bound

最近在工作中遇到了std::map中的lower_bound与upper_bound,再次记录下其功能和使用方式。std::map<char, int> mp;mp.lower_bound<key> : 返回的是小于、等于key的iterator,如果没有则返回第一个元素的iterator。mp.upper_bound<key> :返回的是大于key的iterator,如果没有,则返回空例子如下:// map::lower_bound/upper

2022-04-18 13:57:23 1546

原创 std::string中的find_first_of()和find_last_of()函数

编程语言: c++/linux在std::string中,有时需要找到一个string中最后一个或者第一个以某个特定的字符开始的位置或者下标,这时就需要使用find_first_of()和find_last_of()函数。find_first_of() : 找到一个string中第一个以 某个 字符开始的位置find_last_of() :找到一个string中最后一个以 某个 字符开始的位置使用方式如下:#include <iostream>#include <s

2022-03-16 18:53:05 2405

原创 模板类的定义和实现可以分开吗?

一个模板,在a.h中定义,在a.cc中实现,这样可以吗?答案是不行的。 模板的定义和实现需要都写在头文件中。有一种特例可以实现模板的定义和实现分别放在a.h 和 a.cc中,但是需要指定参数的类型。但是这样导致每传入一份参数就需要写一份模板的实现,那么传入1000份参数就要写1000个模板的实现,这样导致太浪费代码了。...

2022-01-05 20:28:39 436

原创 invalid use of incomplete type struct 或者是class的解决办法

在写完代码之后进行编译时,提示"invalid use of incomplete type struct" 或者 "invalid use of incomplete type class" 的解决办法:1、对应的头文件要包含,这个是必须的。当时因为没有包含头文件,也汇报上的错误2、编译器不知道所用的是struct 还是class,所以需要引用该struct 或 class的头文件,记住:只要引用了struct 或 class,就需要包含对应的头文件一般就是这2种情况,其他的情况暂未遇到,

2022-01-05 20:21:36 5699

原创 2021年简单总结

2021年的余额还有不到6小时就要结束了,在这辞旧迎新的时刻,心情是十分复杂的。2021年还是比较艰辛的,不管在工作、生活、家庭、养育小孩或亲戚往来方面,遇到的困难远远地超过了我的预期,但是也收获了很多,包括工作技能、知识体系、友情、亲情等。分为以下几个部分进行陈述1、工作今年的工作还是比较符合预期的,但是做起来还是花了很大的力气的,遇到的困难也比较多,也学到了一些新的知识,总结起来就是在痛苦中螺旋式的进步,毕竟做的是基础软件部分,东西还是比较枯燥的,比较烧脑,但是对于提升自己有很大的帮助,需要真心地

2021-12-31 18:06:01 236

原创 幻读和不可重复读

MySQLMySQL默认的隔离级别为RR,因此只会出现幻读的情况。不会出现不可重复读的问题。幻读事务在插入已经检查过不存在的记录时,惊奇的发现这些数据已经存在了,之前的检测获取到的数据如同鬼影一般。例子:在事务1中,查询User表id为100的是用户否存在,如果不存在则插入一条id为100的数据。select*fromUserwhereid=100;在事务1查询结束后,事务2往User表中插入了一条id为100的数据。insertinto`Use...

2021-12-25 17:46:14 274

转载 MySQL幻读及解决方法

这是一篇数据库隔离级别的科普文章,旨在了解数据库中著名的幻读现象,为了专注,对脏读、不可重复读不作讨论。事务隔离级别MySQL有四级事务隔离级别:读未提交 READ-UNCOMMITTED: 存在脏读,不可重复读,幻读的问题读已提交 READ-COMMITTED:不存在脏读,但存在不可重复读,幻读问题可重复读 REPEATABLE-READ:不存在脏读,不可重复读问题,但存在幻读问题序列化SERIALIZABLE:解决脏读,不可重复读,幻读问题,但完全串行执行,性能最低什么是幻读幻

2021-12-25 17:14:32 3544

原创 在X32与X64下,每种数据类型占用的字节数

在X32与X64下,每种数据类型占用的字节数分别如下: X32 X64指针 4Byte 8Bytechar 1Byte ...

2021-12-25 10:34:18 646

原创 在c++中一个空类占用的字节数

结论: 在c++中一个空类占用:1Byte。有的同学认为一个空类占0Byte,那么定义一个空类时,他存放到哪里呢?为此,在c++编译器中,为空类设置了占用1Byte内存。#include <iostream> // std::coutclass Base {};class Point {private: int circle;};int main () { Base b; Point p; std::cout << "si.

2021-12-25 10:20:29 597

原创 在c++中,如果派生类没有重写基类中对应virtual函数会怎样?

在c++中,如果一个派生类没有重写基类中对应的虚函数,那么在派生类的构造函数中依然会创建虚指针,但是该虚指针指向的是基类的虚表。#include <iostream>#include <string>class Base {public: virtual void foo() { std::cout << "Base::foo" << std::endl; }};class Derived : pub

2021-12-22 19:47:53 924

转载 网卡驱动收发包过程图解

网卡网卡工作在物理层和数据链路层,主要由PHY/MAC芯片、Tx/Rx FIFO、DMA等组成,其中网线通过变压器接PHY芯片、PHY芯片通过MII接MAC芯片、MAC芯片接PCI总线PHY芯片主要负责:CSMA/CD、模数转换、编解码、串并转换MAC芯片主要负责:1. 比特流和帧的转换:7字节的前导码Preamble和1字节的帧首定界符SFD2. CRC校验3. Packet Filtering:L2 Filtering、VLAN Filtering、Manageability /

2021-12-22 19:21:14 2258

转载 MySQL5.7 常用系统表大全

MySQL5.7 默认的模式有:information_schema, 具有 61个表; m ysqL, 具有31个表; performance_schema,具有87个表; sys, 具有1个表, 100个视图. Information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。 在 MySQL中,把 ...

2021-12-05 15:46:21 1141

转载 MySQL源码解读之数据结构-LF_DYNARRAY

MySQL的代码中实现了一个Lock Free的Hash结构,称作LF_Hash。MySQL的不少模块使用了LF_Hash,比如Metadata Lock就依赖于它。但由于使用的方法不正确,导致了bug#98911和bug#98624。理解LF_Hash的实现细节,可以帮助我们用好LF_Hash。LF_HASH的基本特点动态扩展初始化时bucket的数量是1. 每个bucket平均拥有的元素(Element)是1个。因此当元素的总数量超过bucket的数量时,就会自动分裂。每次分裂增加一倍的buck

2021-11-30 11:57:28 109

转载 MySQL源码解读之数据结构-LF_DYNARRAY

MySQL源码解读之数据结构-LF_DYNARRAYLF_DYNARRAY数据结构是应用于LF_PINS和LF_HASH数据结构的一种特殊数据结构。该结构不同于DYNAMIC_ARRAY动态数组结构物理分配和逻辑操作,而是一种层级分配管理方式进行组织,对于稀疏、非连续的数组存储可以有效的提高空间利用率。LF_DYNARRAY,它是一个可以多级的、可动态扩充的数组。lf是lock_free的意思,即不使用锁的情况下实现多线程之间的变量同步。LF_DYNARRAY结构如下图所示:源码解读[源

2021-11-30 11:54:49 94

原创 MySQL单机版Recycle Bin回收站功能

由于DDL语句无法回滚,开发或运维人员如果误操作(例如DROP TABLE)可能会导致数据丢失。阿里云支持回收站(Recycle Bin)功能,临时将删除的表转移到回收站,还可以设置保留的时间,方便您找回数据,同时提供了工具包(DBMS_RECYCLE)便于您快捷使用。前提条件 MySQL单机版实例版本如下:RDS MySQL 8.0 RDS MySQL 5.7Recycle Bin参数Recycle Bin设计了如下五个参数。参数 说明 loose_recycle_bin

2021-11-25 19:10:56 1230

原创 MySQL一张innodb表列个数的限制和engine的选择

在MySQL innodb存储引擎中,一张表中列的个数最大为4096。其中在MySQL中,创建表时可以任意指定engine的类型,但是,考虑到join、union、union all等复杂的场景时,尽量每张表都用统一的engine。

2021-11-05 17:50:29 203

空空如也

空空如也

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

TA关注的人

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