自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 收藏
  • 关注

原创 适合各种统计的数据类型

2020-11-11 10:13:56 432

原创 mysql之mysql数据在磁盘的储存方式

mysql的数据在磁盘上的存储:数据块:由多个磁盘block组成的块,存储引擎负责管理数据块。 磁盘是block块设备,数据在磁盘上的存放也是按照块存放的。 mysql读取表到内存的时候,也必许按照一块一块的方式读取。假设要查询的表在和其他表在都在同一个块内。加载块的时候除了读取要查询的表,其他表也一并被读取出来。 当一个块内的部分表被删除时,这是就是形成了碎片。这样会降低装载到内存的速度。 所以会生成一个块头,记录一个快内表的大小,有无空闲空间,空闲空间的位置。

2020-11-11 10:09:27 957

原创 哨兵机制

哨兵其实就是一个运行在特殊模式下的 Redis 进程,主从库实例运行的同时,它也在运行。哨兵主要负责的就是三个任务:监控、选主(选择主库)和通知。在监控和选主这两个任务中,哨兵需要做出两个决策:在监控任务中,哨兵需要判断主库是否处于下线状态;在选主任务中,哨兵也要决定选择哪个从库实例作为主库。哨兵进程会使用 PING 命令检测它自己和主、从库的网络连接情况,用来判断实例的状态。如果哨兵发现主库或从库对 PING 命令的响应超时了,那么,哨兵就会先把它标记为“主观下线”。哨兵机制也是类似的,它

2020-11-09 21:05:32 288

原创 能不能使用join语句?

如果可以使用 Index Nested-Loop Join 算法,也就是说可以用上被驱动表上的索引,其实是没问题的;如果使用 Block Nested-Loop Join 算法,扫描行数就会过多。尤其是在大表上的 join操作,这样可能要扫描被驱动表很多次,会占用大量的系统资源。所以这种 join 尽量不要用。所以你在判断要不要使用 join 语句时,就是看 explain 结果里面,Extra 字段里面有没有出现“Block Nested Loop”字样。在决定哪个表做驱动表的时候,应该是两个表.

2020-10-12 23:43:19 193

原创 读写分离-过期读的问题解决

强制走主库方案;sleep 方案;判断主备无延迟方案;配合 semi-sync 方案;等主库位点方案;等 GTID 方案。

2020-10-12 23:40:37 181

原创 MySQL怎么保证高可用

主备延迟即“同步延迟”。与数据同步有关的时间点主要包括以下三个:主库 A 执行完成一个事务,写入 binlog,我们把这个时刻记为 T1;之后传给备库 B,我们把备库 B 接收完这个 binlog 的时刻记为 T2;备库 B 执行完成这个事务,我们把这个时刻记为 T3。所谓主备延迟,就是同一个事务,在备库执行完成的时间和主库执行完成的时间之间的差值,也就是 T3-T1。你可以在备库上执行 show slave status 命令,它的返回结果里面会显示 seconds_behind_mast

2020-09-28 23:15:36 507

原创 MySQL主备原理

备库建议设置成只读(readonly)模式。这样做,有以下几个考虑:有时候一些运营类的查询语句会被放到备库上去查,设置为只读可以防止误操作;防止切换逻辑有 bug,比如切换过程中出现双写,造成主备不一致;可以用 readonly 状态,来判断节点的角色。备库设置成只读了,还怎么跟主库保持同步更新呢?readonly 设置对超级 (super) 权限用户是无效的,而用于同步更新的线程,就拥有超级权限。节点 A 到 B 这条线的内部流程是什么样的?一个事务日志同步的完整过程是这样的:在.

2020-09-28 22:51:58 742

原创 MySQL 是怎么保证数据不丢的?

binlog 的写入机制binlog 的写入逻辑比较简单:事务执行过程中,先把日志写到 binlog cache,事务提交的时候,再把 binlog cache 写到 binlog 文件中。系统给 binlog cache 分配了一片内存,每个线程一个,参数 binlog_cache_size 用于控制单个线程内 binlog cache 所占内存的大小。图中的 write,指的就是指把日志写入到文件系统的 page cache,并没有把数据持久化到磁盘,所以速度比较快。图中的 fsync,才是

2020-09-27 23:48:22 368 1

原创 业务高峰期临时性地提升一些性能。

短连接风暴第一种方法:先处理掉那些占着连接但是不工作的线程。第二种方法:减少连接过程的消耗。(风险极高,是我特别不建议使用的方案)慢查询性能问题在 MySQL 中,会引发性能问题的慢查询,大体有以下三种可能:索引没有设计好;SQL 语句没写好;MySQL 选错了索引。QPS 突增问题...

2020-09-27 23:17:14 208

原创 如何开启并查询慢日志

1、配置文件配置找到[mysqld],在其下面添加如下代码即可.slow_query_log=ONslow_query_log_file=/usr/local/mysql/var/localhost-slow.loglong_query_time=0log-queries-not-using-indexes = 1// 配置好后,重启mysql服务1.slow_query_log该配置项是决定是否开启慢日志查询功能,配置的值有ON或者OFF.2.slow_query_log_file该

2020-09-27 21:03:20 297

原创 什么是幻读,幻读会有什么问题

什么是幻读?幻读指的是一个事务在前后两次查询同一个范围的时候,后一次查询看到了前一次查询没有看到的行。“幻读”做一个说明:在可重复读隔离级别下,普通的查询是快照读,是不会看到别的事务插入的数据的。因此,幻读在当前读下才会出现。第二次查看,发现被修改的“行”,不能称为幻读,幻读仅专指“新插入的行”。当前读:也叫即时读,就是忽略版本控制,读取最新的数据。幻读有什么问题?首先是语义上的是数据一致性的问题。如何解决幻读问题?读锁是行锁,无法解决幻读问题,因此引入间隙锁(GAP锁)间隙

2020-09-27 00:12:40 2149 1

原创 对索引字段做函数操作,会导致全索引遍历查找

对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。需要注意的是,优化器并不是要放弃使用这个索引。放弃了树搜索功能,优化器可以选择遍历主键索引,也可以选择遍历二级索引 ,优化器对比哪个索引更小,就会遍历哪个索引。那些是函数操作? mysql> select count(*) from tradelog where month(t_modified)=7;使用了month()函数因此,该语句就不会走树搜索,而是遍历索引。mysql> select * fr

2020-09-26 21:42:46 390

原创 order by排序是如何工作的?

Order By排序的方式全字段排序rowid 排序全字段排序初始化 sort_buffer,确定放入 name、city、age 这三个字段;从索引 city 找到第一个满足 city='杭州’条件的主键 id,也就是图中的 ID_X;到主键 id 索引取出整行,取 name、city、age 三个字段的值,存入 sort_buffer 中;从索引 city 取下一个记录的主键 id;重复步骤 3、4 直到 city 的值不满足查询条件为止,对应的主键 id 也就是图中的 ID_Y;

2020-09-25 23:07:00 223

原创 MySQL count()函数

count(*) 的实现方式不同的 MySQL 引擎中,count(*) 有不同的实现方式。MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高;而 InnoDB 引擎就麻烦了,它执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数。为什么InnoDB不直接存储表的总行数?由于InnoDB支持事务,多版本并发控制(MVCC)的原因,InnoDB 表“应该返回多少行”也是不确定的缓存系统保存计数的缺点缓存系

2020-09-24 22:57:47 98

原创 MySQL数据库事务嵌套

一般情况下,整个Yii应用使用了同一个数据库连接,或者说是使用了单例。而在yii\db\Connection中,又对事务对象进行了缓存:class Connection extends Component{// 保存当前连接的有效Transaction对象private $_transaction;// 已经缓存有事务对象,且事务对象有效,则返回该事务对象// 否则返回nullpublic function getTransaction(){ return $this->_t

2020-09-24 22:36:04 349

原创 MySQL的脏页

什么是脏页?当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。什么是干净页?内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。什么情况下会刷脏页?第一种是“redo log写满了,要flush脏页” 整个系统就不能再接受更新了,所有的更新都必须堵住。第二种是“内存不够用了,要先将脏页写到磁盘” 这种情况是常态第三种是mysql空闲时候第四种是mysql正常关闭时候InnoDB 用缓冲池(buffer pool)管理内存,缓冲池中的内存页有三种状态

2020-09-22 22:28:32 399

原创 前缀索引使用注意

优点:节省存储空间。缺点:会增加扫描行数,并且不能使用覆盖索引,因为前缀索引存储的数据不够完整,需要回表查询。如果字段前面重复率高,后面重复率低,怎么设计索引?一、第一种方式是使用倒序存储使用reverse()函数,将数据倒叙存储二、使用hash算法再创建一个字段,用来存储hash计算后的数据值,前缀索引可以加到该字段中。怎么判断前缀索引的的最短长度多少合理?mysql> select count(distinct email) as L from SUser;该语句可以查出该字段

2020-09-22 21:46:01 348

原创 如何选择普通索引和唯一索引

1、从查询上来看普通索引和唯一索引的区别?唯一索引查到一条数据后会直接返回数据,而普通索引查到数据后会继续查找是否还有满足条件的索引。从查询的角度来看,普通索引和唯一索引的差距微乎其微。2、什么是change buffer当需要更新一个数据页时,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,在不影响数据一致性的前提下,InnoDB 会将这些更新操作缓存在 change buffer 中,这样就不需要从磁盘中读入这个数据页了。在下次查询需要访问这个数据页的时候,将数据页读入内存,然

2020-09-22 20:55:50 210

原创 事务可重复读是怎么实现的?

一、事务 T 启动的时候会创建一个视图 read-view,之后事务 T 执行期间,即使有其他事务修改了数据,事务 T 看到的仍然跟在启动时看到的一样。二、begin/start transaction 命令并不是一个事务的起点,在执行到它们之后的第一个操作 InnoDB 表的语句,事务才真正启动。第一种启动方式,一致性视图是在执行第一个快照读语句时创建的;第二种启动方式,一致性视图是在执行 start transaction with consistent snapshot 时创建的。三、在 My

2020-09-21 21:52:03 900

原创 全局锁和表锁和行级锁

全局锁1、根据加锁的返回,Mysql可以分为三类锁,全局锁,表锁,行级锁2、全局锁,命令Flush tables with read lock (FTWRL),使整个库都处于只读状态,典型的使用场景是做全库逻辑备份。3、mysqldump 使用参数–single-transaction 的时候,导数据之前就会启动一个事务,来确保拿到一致性视图。而由于 MVCC 的支持,这个过程中数据是可以正常更新的。也可以达到全局锁的效果,因此,全局锁只适用于不支持事务的存储引擎,如果全库都支持事务,不建议使用全局锁

2020-09-19 19:00:50 238 1

原创 MySQL索引

1、索引的目的:提高查询效率2、实现索引的原理,数据结构。常见的三种数据结构哈希表、有序数组、搜索树(1)、哈希表哈希表是一种以键 - 值(key-value)存储数据的结构,不可避免地,多个 key 值经过哈希函数的换算,会出现同一个值的情况。处理这种情况的一种方法是,拉出一个链表缺点:哈希表只适合做等值搜索,不适合做区间搜索(2)、有序数组有序数组在等值查询和范围查询场景中的性能就都非常优秀缺点:更新成本太高,新增数据后面的数据都需要后移。只适合静态存储引擎(3)、二叉搜索树

2020-09-18 00:06:47 57

原创 mysql事务

1、事务的特性:原子性、一致性、隔离性、持久性2、多事务同时执行的时候,可能会出现的问题:脏读、不可重复读、幻读不可重复读和幻读的区别:不可重复读指的是多次读取一条记录,发现该记录被修改过幻读指的是多次读取一个范围,发现记录增多或者减少。3、事务隔离级别:读未提交、读提交、可重复读、串行化可重复读使用视图实现的,每次开启事务的时候创建一个静态视图,串行化是用锁来实现的4、不同事务隔离级别的区别:读未提交:一个事务还未提交,它所做的变更就可以被别的事务看到读提交:一个事务提交之后,它所做

2020-09-16 23:43:53 51

原创 redo log和 binlog

mysql执行update语句和执行select语句前面的流程都一样,到执行器的时候会涉及到两个日志模块,redo log和 binlog。redo log 和binlog配合就是Mysql经常提到WAL技术,WAL 的全称是 Write-Ahead Logging,它的关键点就是先写日志,再写磁盘。一、redo log1、redo log叫重做日志/物理日志,只适用于InnoDb存储引擎。2、用来实现 crash-safe 能力。3、记录在内存中。4、redo log固定大小,循环记录,因此会

2020-09-16 00:10:22 159

原创 SQL查询语句执行过程

1、连接器管理连接,用户登录权限验证。(1)建立连接后,长时间没有后续操作,会变成空闲连接,超过一定时间后,连接器会断开连接,由参数wait_timeout控制,一般时长是8个小时。(2)连接分为长连接和短连接。长连接只连续的后续操作都是用同一个连接。短连接指执行完少数几个操作后就断开连接,下次查询需要重新建立连接。建立连接的过程比较复杂,尽量减少建立连接的动作,也就是尽量使用长连接。(代码中尽量使用sql将全部需要的数据查出后再处理,减少查询次数)(3)全部使用长连接会导致另一个问题出现,就是.

2020-09-15 23:17:05 178

转载 Session过期策略

Session.gc_probability = 1 //session删除几率的分子Session.gc_divisor=1000 //session删除几率的分母Session.gc_maxlifetime=1440 //24分钟删除一次一次终上所述:默认的session过期机制为 24分钟删除一次,每个session_id会话被删除的几率为1/1000。...

2020-08-13 11:04:28 329

转载 HTTPS四次握手

HTTPS和HTTP的区别主要如下:https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。SSL四次握手建立连接一次握手:步骤 1: 客户端通过发送 Client He

2020-08-12 23:55:03 1908

转载 揭秘微信红包:架构、抢红包算法、高并发和降级方案

与传统意义上的红包相比,近两年火起来的“红包”,似乎才是如今春节的一大重头戏。历经上千年时代传承与变迁,春节发红包早已成为历史沉淀的文化习俗,融入了民族的血脉。按照各家公布的数据,除夕全天微信用户红包总发送量达到80.8亿个,红包峰值收发量为40.9万个/秒。春晚直播期间讨论春晚的微博达到5191万条,网友互动量达到1.15亿,网友抢微博红包的总次数超过8亿次。为此,InfoQ策划了“春节红包”系列文章,以期为读者剖析各大平台的红包活动背后的技术细节。本文为微信篇。微信红包在经过15年春晚摇一摇之后,2

2020-08-12 14:48:53 442

原创 《MySQL高性能》------总结

第一章:MySQL架构MySQL服务器逻辑架构图:第一层:最上层的服务器不是MySql所独有的,大多数基于网络的客户端/服务器工具或者服务都有类似的系统。比如链接处理,授权认证,安全等等。第二层:大多数的MySql的核心服务功能都在这一层,包括查询解析、分析、优化、缓存以及所有的内置函数(例如:日期,时间,数学和加密函数等)。所有跨存储引擎的功能都在这一层实现:存储过程,触发器,视图。第三层:包含了存储引擎。存储引擎负责MySql中的数据存储和提取。服务器通过API和存储引擎进行通信,这些接口屏蔽

2020-07-16 14:35:59 175

转载 Redis持久化

1. 为什么需要持久化?因为Redis是内存数据库,它将自己的数据存储在内存里面,一旦Redis服务器进程退出或者运行Redis服务器的计算机停机,Redis服务器中的数据就会丢失。为了避免数据丢失,所以Redis提供了持久化机制,将存储在内存中的数据保存到磁盘中,用于在Redis服务器进程退出或者运行Redis服务器的计算机停机导致数据丢失时,快速的恢复之前Redis存储在内存中的数据。Redis提供了2种持久化方式,分别为:RDB持久化AOF持久化接下来,我们一一详解。2. RDB持久化

2020-06-08 14:46:31 104

转载 微服务的优缺点

微服务架构有如下好处:1:使大型的复杂应用程序可以持续交付和持续部署持续交付和持续部署是DevOps的一部分,DevOps是一套快速、频繁、可靠的软件交付实践。高效的DevOps组织通常将软件部署到生产环境时面临更少的问题和故障。DevOps工具有Docker、Kubernets、Jenkins、Git等。2:每个服务相对较小并容易维护微服务架构相比单体应用要小的多,开发者理解服务中的逻辑代码更容易。代码库小,打包,启动服务速度也快。3:服务可以独立部署每个服务都可以独立于其他服务进行部署4:

2020-06-07 22:18:56 732

转载 微服务

前言最近公司某个项目的架构越来越庞大,维护起来非常难受。我主动想领导提出要把这个项目重构在工作中需要把原来的项目重构成微服务架构,因此学习微服务相关知识,在这里记录下来,权当笔记的同时也希望能对你有启发。今天就来聊聊什么是微服务?单体应用在聊微服务之前,我先给你们梳理下什么是单体应用。如果你不知道单体应用的痛,那也不会深刻理解微服务的价值。单体应用上图为我司某项目架构,包含了四个模块。可以看出我司此项目的架构完完全全属于传统的 MVC 架构,所有的子系统都集成在一个很繁杂的 JVM 进程中。优

2020-06-07 22:16:33 119

转载 SCTP通信协议

SCTP是一个传输层协议,和UDP,TCP类似TCP是一种面向连接的协议,提供可靠传输,确保数据有序发送;UDP是一种面向消息的协议,不能确保数据有序发送SCTP是后来引入的一种新的协议,提供了和TCP一样的可靠、有序的数据传输功能,同时却能和UDP一样面对消息的方式来进行操作,保护消息边界,有下面一些特性多宿主(Multi-Homing)多流(Multi-streaming)初始化保护(Initiation protection)消息分帧(Message framing)可配置的无序发送(

2020-06-02 23:58:06 1027

原创 DNS服务器

DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。 域名是Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区

2020-06-02 00:11:52 357

原创 路由协议

静态路由:一种路由的方式,路由项(routing entry)由手动配置,而非动态决定。与动态路由不同,静态路由是固定的,不会改变,即使网络状况已经改变或是重新被组态。一般来说,静态路由是由网络管理员逐项加入路由表。动态路由:动态路由是指路由器能够自动地建立自己的路由表,并且能够根据实际情况的变化适时地进行调整。路由规则:目的网络:这个包想去哪儿?出口设备:将包从哪个口扔出去?下一跳网关:下一个路由器的地址。策略路由:策略路由,是一种比基于目标网络进行路由更加灵活的数据包路由转发机制。路由

2020-05-28 11:54:12 156

翻译 ICMP协议

介绍:ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。 [3] 它属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。ICMP 是 TCP/IP 模型中网络层的重要成员,与 IP 协议、ARP 协议、RARP 协议及 IGMP 协议共同构成 TCP/IP 模型中的网络层。ping 和 t

2020-05-27 22:32:27 1662

翻译 STP协议

介绍:STP协议(生成树协议)逻辑上断开环路,防止二层网络的广播风暴的产生。当线路出现故障,断开的接口被激活,恢复通信,起备份线路的作用。原理STP的作用是通过阻断冗余链路,使一个有回路的桥接网络修剪成一个无回路的树形拓扑结构算法STP将一个环形网络生成无环拓朴的步骤:选择根桥(Root Bridge)选择根端口(Root Ports)选择指定端口(Designated Ports)在数据结构中,有一个方法叫做最小生成树。有环的我们常称为图。将图中的环破了,就生成了树。在计算机网络中,生成

2020-05-27 22:26:40 296

转载 HTTP/1.0/1.1/2.0

HTTP协议HTTP(超文本传输协议,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。是用于从WWW服务器传输超文本到本地浏览器的传输协议。默认使用80端口,HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP协议和TCP协议是不冲突的,HTTP定义在七层协议中的应用层,TCP解决的是传输层的逻辑。HTTP使用TCP而不

2020-05-24 23:49:39 126

转载 WebSocket介绍,与Socket的区别

WebSocket介绍与原理WebSocket protocol是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成。——百度百科目的:即时通讯,替代轮询网站上的即时通讯是很常见的,比如网页的QQ,聊天系统等。按照以往的技术能力通常是采用轮询、Comet技术解决。HTTP协议是非持久化的,单向的网络协议,在建立连接后只允许浏览器向服务器发出请求后,服务器才能返回相应的数据。当需要即时通讯时,通过轮询在特定的时间间隔(如1秒

2020-05-24 20:57:24 158

转载 Redis跳表

在前面说Redis的文章里,提到了Redis的有序集合zset底层是依赖跳表实现的,当时没有展开讨论,内心认为还是需要一个专门的篇幅来介绍它。  先想一想为什么有序集合需要用跳表实现?回忆一下有序集合的几个关键词:是SortedSet和HashMap的结合;value具有唯一性;多了一个score;支持范围查询,结构如下:下面我决定针对zset的功能分析对应的造就这种功能所需的底层结构。功能一:zset支持快速插入和删除对应的解决思路:针对快速插入和删除,有没有想到什么?首选肯定是链表,所以,底

2020-05-23 22:52:29 127

转载 mysql锁

脏读:一个事务读取另一个事务未提交的问题不可重复读: 在同一事务中,两次读取同一数据,得到内容不同幻读:同一事务中,用同样的操作读取两次,得到的记录数不相同mysql的默认的RR(允许重复度)隔离级别下,如何避免事务的安全问题?在mysql的innodb的引擎下,采用MVCC机制+锁 方式解决事务的安全问题,但在RR(允许重复读)的级别下没有完全解决幻读的问题.解决脏读 修改时加排他锁(写锁),直到事务提交后才释放,读取时加共享锁(读锁),其他事务只能读取,不能再有更新操作 。防止脏读。解决不可

2020-05-20 23:21:40 63

空空如也

空空如也

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

TA关注的人

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