November 11, 2019

MySQL问题排查及优化

SQL优化

explain来分析索引有效性:

EXPLAIN SELECT select_options

输出结果:

id:当前查询语句中,第个SELECT语句的编号;

select_type:查询类型:

table:查询针对的表;

type:关联类型,或称为访问类型,即MySQL如何去查询表中的行

ALL:全表扫描;

index:根据索引的顺序进行的全表扫描;但同时如果Extra列出现了"Using index”表示使用了覆盖索引;

range:有范围限制地根据索引实现范围扫描;扫描位置始于索引中的某一项,结束于另一项;

ref:根据索引返回的表中匹配到某单个值的所......

November 11, 2019

MySQL技术内幕(三)-索引

索引与算法

InnoDB存储引擎支持几种常见的索引:B+树索引,全文索引,自适应哈希索引.

B+树是从平衡二叉树演化而来的,但是B+树不是一颗二叉树.

B+树索引并不能找到一个给定健值的具体行.B+树索引能找到的只是被查找数据行所在的页,数据库通过把查找到的页载入到内存中,然后再在内存中进行查找,最后得到要查找的数据.

B+树索引

B+树是由B树(平衡树)和索引顺序访问法(ISAM)演化而来的.

B+树索引就是B+树在数据库中的实现.(B+树是一种算法理论,B+树索引是一种应用实践)

B+树的高度一般在2--4层,硬盘查找最多只需要啊2到4次IO.

数据库中的B+树索引可以......

November 11, 2019

MySQL技术内幕(二)-锁与事务

没有锁,就没有事务,所以了解事务前,需要先了解锁.

注意:下面讨论所时,在做实验操作SQL时,需要手动开启事务哦,不然看不到效果.

锁机制主要用于管理对共享资源的并发访问.InnoDB存储引擎会在行级别上对表数据上锁.

InnoDB存储引擎提供了一致性的非锁定读,行锁级别支持.行级锁没有相关额外的开销,并可以同时得到并发性和一致性.

锁类型

共享锁(S Lock),允许事务读一行数据.

排它锁(X Lock),允许事务删除或更新一行数据.

S锁与S锁互相兼容,X锁与S锁互相不兼容.X锁与X锁不兼容. (兼容是指对同一行记录锁的兼容情况).

意向锁

InnoDB......

November 11, 2019

MySQL技术内幕(一)-底层结构笔记

数据库:物理操作系统文件或其他形式文件类型的集合.在MySQL数据库中,数据文件可以是frm,myd,myi,ibd文件结尾的文件.

实例: MySQL数据库由后台线程以及一个共享内存区组成.共享内存可以被运行的后台线程所共享.实例才是真正用于操作数据库文件的.

MySql被设计为一个单进程多线程架构的数据库.MqSQL数据库实例在系统上的表现就是一个进程.

MySQL数据库实例在启动时会查找:

$ mysql --help|grep my.cnf

order of preference, my.cnf, $MYSQL_TCP_PORT,

/etc/my.cnf......

November 11, 2019

MySql整理笔记

数据库的基本概念

磁盘文件--> 层次模型 --> 网状模型 --> (Codd) 关系模型

主键(Primary key):用于惟一确定一个记录的字段;复合主键:多个字段组合成一个主键(NOT NULL);

惟一键:一个或多个字段的组合,填入的数据必须能在本表 中唯一标识本行;允许为NULL,但只能有一个null。

约束:

主键约束:惟一、非空;一张表只能有一个;

惟一键约束:惟一,可以存在多个;

外键约束:参考性约束;

检查性约束:check;

三层模型:

物理层 --> SA (决定数据的存储格式,即RDBMS在磁盘上如何组织文件)

逻辑层......

October 25, 2019

关于Java手动打包那点小事

习惯了使用IDE,maven 突然使用原生的Java命令打包执行,反而陌生了.网上找了搜了下,都是些垃圾文章,参考后还能遇到各种问题.

class执行文件

不带包

在某个路径下创建一个文件

$ cd /User/Share/test

$ vi TestDemo.java

写入如下代码:

public class TestDemo {

public static void main(String[] args) {

System.out.println("===输出hello word");

for (String s : args) {

......

October 10, 2019

RabbitMQ高级-存储与运维(五)

关于存储和运维,有点不太想写了.因为Rabbitmq的默认配置,以及强大的后台管理.基本不需要我们做什么多余的事情,就能直接使用rabbitmq.但是后台管理我们也不见的用的很好,所以这里可以截图说明观察一下.

存储

登陆mq的管理后台,点击overview-->Nodes(name)名字.可以看到当前节点的存储信息.

我的macbook存储在:/usr/local/var/lib/rabbitmq/mnesia/rabbit@name

center OS存储在:/var/lib/rabbitmq/mnesia/rabbit@name

mnesia这个目录是需要rabbitm......

October 10, 2019

RabbitMQ高级-消息可靠性(四)

在前面3三章节中主要是介绍使用,安装,集成Spring,springboot,还有各种路由模式,在这些之外还有一些比较值得关注的,那就是如何确保我们的消息投递成功了或者确保我们消费者真的消费了.这些在我们生产中是非常重要的所以这里将重点讲解.

消息确认

生产者发送确认

在项目中使用了mq,随着业务越来越多,与其他项目交互的地方也增多.做一个操作时生产消息,另外一个项目消费消息.一看没啥问题.但是消费者收不到消息时,就过来找你,为啥你没发消息给我啊.我咋没收到消息啊.等等扯皮的问题就来了.这个时候我们又没有证据证明自己发送了(尽管在发送前后打印了日志,但是你就能确保它确实发送了消息到mq......

October 10, 2019

RabbitMQ与Spring,SpringBoot集成及MQ的六种工作模式

RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。

它可以使对应的客户端(client)与对应的消息中间件(bro......

October 10, 2019

RabbitMq集群之高可用(二)

前面一文中搭建了集群,还有镜像模式,看似安全了,但是RabbitMq却没有负载均衡,就是说,你在使用客户端连接mq的时候,即使有node1,node2两台mq集群,但是client只会连接到一台,当node1挂了,才会连接到node2中,如果node1没有挂掉,将会一直使用node1,这样一来node2就成了摆设了,或者成了备份机了。集群我们更希望的是高可用,高性能。比如node1,node2分别能处理60万的请求,有集群的情况下按理可以处理120万的请求。client只会连接到一台mq中,它的瓶颈还是60万的数量级,node2在大量请求时并没有派上用场,只有在node1挂掉的时候才有用。所以......