自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 springboot+springsecurity+oauth2整合(并用mysql数据库实现持久化客户端数据)

springboot+springsecurity+oauth2整合(并用mysql实现持久化)本文主要讲的是,实现oauth2的工作流程,需要对oauth2.0概念有一定的基础知识了解。阅读前请学习oauth2.0的理论知识。文末有此项目代码地址。介绍AuthorizationServer的搭建创建Client请求access_token刷新access_token介......

2018-08-13 12:57:29 28559 29

原创 Windows环境Java8(jdk1.8)安装

方法:此电脑 > 属性 > 关于。

2024-02-19 17:52:59 718

原创 22-从JDK源码级别彻底剖析JVM类加载机制

当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到JVM。

2023-02-07 21:43:21 276 1

原创 21-InnoDB引擎底层存储和缓存原理

到目前为止,MySQL对于我们来说还是一个黑盒,我们只负责使用客户端发送请求并等待服务器返回结果,表中的数据到底存到了哪里?以什么格式存放的?MySQL是以什么方式来访问的这些数据?这些问题我们统统不知道。要搞明白查询优化背后的原理,就必须深入MySQL的底层去一探究竟,而且事务、锁等的原理也要求我们必须深入底层。

2023-01-04 22:29:19 464

原创 20-Mysql内核查询优化规则详解

在前面的课程中我们看到当我们把SQL语句交给MySQL执行后,MySQL在执行的过程中会有很多的优化措施,比如索引条件下推,回表中的MRR、索引合并等等。但是在执行之前,MySQL会依据一些规则,竭尽全力的把我们的SQL语句进行转换,以期可以达到成某种可以更高效执行的形式,这个过程也可以被称作查询重写或者查询优化,很多时候这些优化可以由我们自行完成以减少MySQL的优化时间。

2022-12-22 21:41:56 434

原创 19-Mysql执行原理之索引合并详解

我们前边说过MySQL在一般情况下执行一个查询时最多只会用到单个二级索引,但存在有特殊情况,在这些特殊情况下也可能在一个查询中使用到多个二级索引,MySQL中这种使用到多个索引来完成一次查询的执行方法称之为:索引合并/index merge,在前面的成本计算中我们说到过这个概念:“我们需要分别分析单独使用这些索引执行查询的成本,最后还要分析是否可能使用到索引合并”。其实optimizer trace输出的文本中就有这个片段:具体的索引合并算法有下边三种。

2022-12-19 21:56:55 234

原创 18-从架构师角度全局理解Mysql性能优化

作为金字塔的底部的架构调优,采用更适合业务场景的架构能最大程度地提升系统的扩展性和可用性。比如硬件和OS调优,需要对硬件和OS有着非常深刻的了解,仅仅就磁盘一项来说,一般非DBA能想到的调整就是SSD盘比用机械硬盘更好,但其实它至少包括了,使用什么样的磁盘阵列(RAID)级别、是否可以分散磁盘IO、是否使用裸设备存放数据,使用哪种文件系统(Linux下常见的有ext2、3、4和xfs,zfs等,目前比较推荐的是XFS),操作系统的磁盘调度算法(目前比较推荐deadline,对机械硬盘和SSD都比较合适。

2022-11-30 21:27:49 187

原创 树莓派系统安装,使用SSD/U盘启动centos

树莓派系统安装,使用SSD/U盘启动centos。

2022-11-26 19:09:18 2841 1

原创 17-Explain执行计划-01

有了慢查询语句后,就要对语句进行分析。一条查询语句在经过 MySQL 查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划,这个执行计划展示了接下来具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采用什么访问方法来具体执行查询等等。EXPLAIN 语句来帮助我们查看某个查询语句的具体执行计划,我们需要搞懂EPLATNEXPLAIN 的各个输出项都是干嘛使的,从而可以有针对性的提升我们查询语句的性能。

2022-11-16 22:15:04 646

原创 16-Mysql内核查询成本计算实战-08

可以看到,这两个表都位于mysql系统数据库下边,其中:innodb_table_stats存储了关于表的统计数据,每一条记录对应着一个表的统计数据。innodb_index_stats存储了关于索引的统计数据,每一条记录对应着一个索引的一个统计项的统计数据。

2022-11-15 22:12:02 305

原创 15-Mysql内核查询成本计算实战-07

我们前边学习查询成本的时候经常用到一些统计数据,比如通过SHOW TABLE STATUS可以看到关于表的统计数据,通过SHOW INDEX可以看到关于索引的统计数据,那么这些统计数据是怎么来的呢?它们是以什么方式收集的呢?

2022-11-14 21:53:21 272

原创 14-Mysql内核查询成本计算实战-06

大家可以看到,创建临时表和对这个临时表进行写入和读取的操作代价还是很高的就行了。这主要是因为在MySQL目前的实现中,并不能准确预测某个查询需要访问的块中有哪些块已经加载到内存中,有哪些块还停留在磁盘上,所以MySQL简单的认为不管这个块有没有加载到内存中,使用的成本都是1.0。也就是说一条语句在server层中执行的成本是和它操作的表使用的存储引擎是没关系的,所以关于这些操作对应的成本常数就存储在了server_cost表中,而依赖于存储引擎的一些操作对应的成本常数就存储在了engine_cost表中。

2022-11-13 22:15:25 350

原创 13-Mysql内核查询成本计算实战-05

即使是有上边两条规则的限制,但是分析多个表不同连接顺序成本花费的时间还是会很长,所以MySQL干脆提出了一些所谓的启发式规则(就是根据以往经验指定的一些规则),凡是不满足这些规则的连接顺序压根儿就不分析,这样可以极大的减少需要分析的连接顺序的数量,但是也可能造成错失最优的执行计划。比方说A、B、C三个表进行连接,已经得到连接顺序ABC是当前的最小连接成本,比方说10.0,在计算连接顺序BCA时,发现B和C的连接成本就已经大于10.0时,就不再继续往后分析BCA这个连接顺序的成本了。

2022-11-12 22:13:16 345

原创 12-Mysql内核查询成本计算实战-04

连接查询的成本计算公式是这样的:连接查询总成本 = 单次访问驱动表的成本 + 驱动表扇出数 x 单次访问被驱动表的成本对于左(外)连接和右(外)连接查询来说,它们的驱动表是固定的,所以想要得到最优的查询方案只需要分别为驱动表和被驱动表选择成本最低的访问方法。可是对于内连接来说,驱动表和被驱动表的位置是可以互换的,所以需要考虑两个方面的问题:不同的表作为驱动表最终的查询成本可能是不同的,也就是需要考虑最优的表连接顺序。然后分别为驱动表和被驱动表选择成本最低的访问方法。

2022-11-11 21:24:50 385

原创 11-Mysql内核查询成本计算实战-03

假设使用s1表作为驱动表,很显然对驱动表的单表查询只能使用全表扫描的方式执行,驱动表的扇出值也很明确,那就是驱动表中有多少记录,扇出值就是多少。在MySQL 5.7之前的版本中,查询优化器在计算驱动表扇出时,如果是使用全表扫描的话,就直接使用表中记录的数量作为扇出值,如果使用索引的话,就直接使用满足范围条件的索引记录条数作为扇出值。说了这么多,其实就是想表达在这两种情况下计算驱动表扇出值时需要靠猜:如果使用的是全表扫描的方式执行的单表查询,那么计算驱动表扇出时需要猜满足搜索条件的记录到底有多少条。

2022-11-10 18:14:22 432

原创 10-Mysql内核查询成本计算实战-02

这就意味着MySQL的查询优化器为了计算这些单点区间对应的索引记录条数,要进行20000次index dive操作,这性能损耗就很大,搞不好计算这些单点区间对应的索引记录条数的成本比直接全表扫描的成本都大了。也就是说如果我们的IN语句中的参数个数小于200个的话,将使用index dive的方式计算各个单点区间对应的记录条数,如果大于或等于200个的话,可就不能使用index dive了,要使用所谓的索引统计数据来进行估算。

2022-11-09 20:43:06 174

原创 09-Mysql内核查询成本计算实战-01

Optimizer Trace在MySQL 5.6以及之后的版本中,MySQL提出了一个optimizer trace的功能,这个功能可以让我们方便的查看优化器生成执行计划的整个过程比如对于下面这个SQL语句:我们执行如下的命令:可以看见全表扫描的成本:2169.9使用索引idx_order_no的成本为72.61:使用索引idx_expire_time的成本为47.81:最终MySQL使用了idx_expire_time作为这个SQL查询过程中索引:在MySQL中一条查询语句的执

2022-11-08 17:57:01 326

原创 08-高性能表结构及索引设计最佳实践-05

由于磁盘顺序读取的效率很高(不需要寻道时间,只需很少的旋转时间),一般来说,磁盘的顺序读的效率是随机读的40到400倍都有可能,顺序写是随机写的10到100倍(SSD盘则差距要小的多,顺序读写的效率是随机读写的7到10倍,但是有评测表明机械硬盘的顺序写性能稍优于SSD。页是计算机管理存储器的逻辑块,硬件及操作系统往往将主存和磁盘存储区分割为连续的大小相等的块,每个存储块称为一页,页大小通常为4k当然也有16K的,主存和磁盘以页为单位交换数据。经过上面步骤,指定数据的存储位置就被找到。

2022-11-07 21:49:40 163

原创 08-高性能表结构及索引设计最佳实践-03

正确地创建和使用索引是实现高性能查询的基础。前面我们已经了解了索引相关的数据结构,各种类型的索引及其对应的优缺点。现在我们一起来看看如何真正地发挥这些索引的优势。

2022-11-06 21:49:26 273

原创 08-高性能表结构及索引设计最佳实践-02

经常使用到InnoDB表order_exp,基础表结构如下:数据量大概在1万多行。

2022-11-05 22:15:33 89

原创 08-高性能表结构及索引设计最佳实践-01

范式化设计优缺点1、范式化的更新操作通常比反范式化要快。2、当数据较好地范式化时,就只有很少或者没有重复数据,所以只需要修改更少的数据。3、范式化的表通常更小,可以更好地放在内存里,所以执行操作会更快。4、很少有多余的数据意味着检索列表数据时更少需要DISTINCT或者GROUP BY语句。在非范式化的结构中必须使用DISTINCT或者GROUPBY才能获得一份唯一的列表,但是如果是一张单独的表,很可能则只需要简单的查询这张表就行了。范式化设计的缺点是通常需要关联。

2022-11-04 17:10:15 87

原创 07-深入理解MVCC与BufferPool缓存机制

对于删除的情况可以认为是update的特殊情况,会将版本链上最新的数据复制一份,然后将trx_id修改成删除操作的trx_id,同时在该条记录的头信息(record header)里的(deleted_flag)标记位写上true,来表示当前记录已经被删除,在查询时按照上面的规则查到对应的记录如果delete_flag标记位为true,意味着记录已被删除,则不返回数据。更新内存的性能是极高的,然后顺序写磁盘上的日志文件的性能也是非常高的,要远高于随机读写磁盘文件。,同时还能保证各种异常情况下的数据一致性。

2022-11-03 17:56:45 110

原创 06-深入理解Mysql事务隔离级别与锁机制

我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。这些问题的本质都是数据库的多事务并发问题,为了解决多事务并发问题,数据库设计了,用一整套机制来解决多事务并发问题。接下来,我们会深入讲解这些机制,让大家彻底理解数据库内部的执行原理。

2022-11-02 21:37:39 95

原创 05-Mysql索引优化实战二

很多时候我们业务系统实现分页功能可能会用如下sql实现表示从表 employees 中取出从 10001 行开始的 10 行记录。看似只查询了 10 条记录,实际这条 SQL 是先读取 10010条记录,然后抛弃前 10000 条记录,然后读到后面 10 条想要的数据。因此要查询一张大表比较靠后的数据,执行效率是非常低的。

2022-11-01 21:44:42 114

原创 04-MySQL索引优化实战一

MySQL索引优化

2022-10-31 21:18:51 87

原创 03-一条sql在MySQL中的执行过程

sql在MySQL中的执行过程

2022-10-30 21:46:53 98

原创 02-Explain详解与索引最佳实践

使用EXPLAIN关键字可以模拟优化器执行sql语句,分析你的查询语句或是结构的性能瓶颈再select语句之前增加 explain 关键字,mysql 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条sql注意:如果from 中饱汉子查询,仍会执行该子查询,将结果放入临时表中。

2022-10-29 20:31:52 371

原创 mysql索引

mysql学习笔记

2022-10-19 11:12:34 93

原创 sqlserver 查看建表语句,生成建表语句

sqlserver 查看建表语句,生成建表语句,sqlserver show create table

2022-06-10 11:20:59 8404 6

原创 Java ODBC连接SqlServer,FreeTDS/jtds 连接SqlServer

Windows, Linux Ubuntu Java ODBC连接SqlServer,Linux FreeTDS/jtds 连接SqlServer 加载数据源解决JDBC连接时发生以下报错的解决方式。The server selected protocol version TLS10 is not accepted by client preferences [TLS12]

2022-04-18 15:41:25 2427 5

转载 Java中遍历Map的几种方式

谈谈java中遍历Map的几种方法java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点先初始化一个mappublic class TestMap { public static Map<Integer, Integer> map = new HashMap<Integer, Integer>();}keySet values如果只需要map的key或者v

2021-02-22 10:28:10 1129

原创 企业微信回调地址调试

企业微信回调地址调试页面:https://open.work.weixin.qq.com/wwopen/devtool/interface/combineurl:自己服务的回调地址token:企业微信管理后台,生成的tokenencodingAESKEY:企业微信管理后台,生成的tokenencodingAESKEYtoUserName:企业微信id点击调用接口,下面回显示结果。...

2020-11-18 14:18:16 2330 5

原创 分布式监控CAT客户端的SpringBoot集成

客户端项目接入CAT监控:maven依赖<dependency> <groupId>com.dianping.cat</groupId> <artifactId>cat-client</artifactId> <version>3.0.0</version></dependency>项目中创建src/main/resources/META-INF/app.properties写入:app.na

2020-11-12 16:56:35 2119 6

原创 分布式监控CAT服务端部署、客户端SpringBoot集成

一:CAT简介:CAT(Central Application Tracking)是基于Java开发的实时监控平台,主要包括移动端监控、应用侧监控、核心网络层监控等。CAT是一个给提供实时架空告警、应用性能分析诊断的工具。二:部署环境Ubuntu16CAT3.0Java8Tomcat8Mave3MySQL5.7内网IP:192.168.1.120三、开始部署1.下载CAT源码git clone https://github.com/dianping/cat.git2.创建数据

2020-11-12 16:27:38 536 1

原创 http请求Elasticsearch7中Xpack保护数据,用户名密码,curl转http

http请求Elasticsearch7中Xpack保护数据,用户名密码,curl转http问题简介解决办法问题简介由于之前一直用7之前的版本,es一直在本地裸奔,不用考虑安全问题。自从把集群放到服务器上了就升级了一下7.7,并且配置了xpack,访问的链接就要变化了。不能直接get请求http://ip:port/index/type/id 的url数据了一开始以为传两个参数模拟一下post请求就可以了,但是研究一番,发现事情并没有那么简单。解决思路官网上提供了curl携带用户名密码的访问

2020-05-29 14:42:35 2415 2

原创 SpringBoot+mybatis,启动报错Failed to determine suitable jdbc url

SpringBoot+mybatis,启动报错Failed to determine suitable jdbc url 或者 Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required当你找到这篇文章的时候,我相信你已经试过了很多方法,比如:需要把启动类放到最外层去掉冲突的jar包springboot 1.1.1...

2019-05-27 14:49:56 4250 5

原创 elasticsearch创建mapping字段索引说明

样例PUT paper_wanfang{ "settings": { "number_of_replicas": 0, "number_of_shards": 2 }, "mappings": { "wanfang": { "properties": { "linkCount": { "fielddata": true, "store": t...

2019-04-12 14:24:11 4562 2

原创 elasticsearch清空某个索引(index)中数据的dsl(使用查询删除)

elasticsearch清空某个索引(index)中数据的dsl(使用查询删除)/_delete_by_query/_delete_by_querykibana:POST index_name/type_name/_delete_by_query{ "query": {"match_all": {}}}curl:curl -u用户名:密码 -XPOST '192.168.1....

2019-04-12 10:32:07 19267

原创 Jsoup爬页面时:org.jsoup.UncheckedIOException

样例代码public static void getText(){ try { Connection connect = Jsoup.connect(&amp;amp;amp;quot;https://www.baidu.com/&amp;amp;amp;quot;); Document document = connect.get(); System.out.println...

2019-03-04 14:20:46 1793 7

原创 Jsoup打开链接报错:org.jsoup.UnsupportedMimeTypeException: Unhandled content type Must be text/*

Jsoup打开链接报错:org.jsoup.UnsupportedMimeTypeException: Unhandled content type Must be text/*样例代码报错详情解决办法样例代码 String yourUrl = &quot;www.123.com&quot;; Connection connect = Jsoup.connect(yourUrl);报错详情org.jsou...

2019-03-04 14:00:03 2506

空空如也

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

TA关注的人

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