数据库其它调优策略1. 数据库调优的措施1. 调优的目标
尽可能**节省系统资源**,以便系统可以提供更大负荷的服务。(吞吐量更大)
合理的结构设计和参数调整,以提高用户操作**响应的速度** 。(响应速度更快)
减少系统的瓶颈,提高MySQL数据库整体的性能。
2. 如何定位调优问题不过随着用户量的不断增加,以及应用程序复杂度的提升,我们很难用更快去定义数据库调优的目标,因为用户在不同时间段访问服务器遇到的瓶颈不同,比如双十一促销的时候会带来大规模的并发访问;还有用户在进行不同业务操作的时候,数据库的事务处理和SQL查询都会有所不同。因此我们还需要更加精细的定位,去确定调优的目标。
如何确定呢?一般情况下,有如下几种方式:
用户的反馈(主要)
用户是我们的服务对象,因此他们的反馈是最直接的。虽然他们不会直接提出技术建议,但是有些问题往往是用户第一时间发现的。我们要重视用户的反馈,找到和数据相关的问题。
日志分析(主要)
我们可以通过查看数据库日志和操作系统日志等方式找出异常情况,通过它们来定位遇到的问题。
服务器资源使用监控
通过监控服务器的CPU、内存、I/O等使 ...
数据库的设计规范1. 为什么需要数据库设计**我们在设计数据表的时候,要考虑很多问题。**比如:
用户都需要什么数据?需要在数据表中保存哪些数据?
如何保证数据表中数据的正确性,当插入、删除、更新的时候该进行怎样的约束检查?
如何降低数据表的数据冗余度,保证数据表不会因为用户量的增长而迅速扩张?
如何让负责数据库维护的人员更方便地使用数据库?
使用数据库的应用场景也各不相同,可以说针对不同的情况,设计出来的数据表可能千差万别。
现实情况中,面临的场景:
当数据库运行了一段时间之后,我们才发现数据表设计的有问题。重新调整数据表的结构,就需要做数据迁移,还有可能影响程序的业务逻辑,以及网站正常的访问。
如果是糟糕的数据库设计可能会造成以下问题:
数据冗余、信息重复,存储空间浪费
数据更新、插入、删除的异常
无法正确表示信息
丢失有效信息
程序性能差
良好的数据库设计则有以下优点:
节省数据的存储空间
能够保证数据的完整性
方便进行数据库应用系统的开发
总之,开始设置数据库的时候,我们就需要重视数据表的设计。为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。
2 ...
索引的创建与设计原则1. 索引的声明与使用1. 索引的分类MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。
从**功能逻辑**上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。
按照**物理实现方式**,索引可以分为 2 种:聚簇索引和非聚簇索引。
按照**作用字段个数**进行划分,分成单列索引和联合索引。
1. 普通索引
在创建普通索引时,不附加任何限制条件,只是用于提高查询效率。这类索引可以创建在任何数据类型中,其值是否唯一和非空,要由字段本身的完整性约束条件决定。建立索引以后,可以通过索引进行查询。例如,在表student的字段name上建立一个普通索引,查询记录时就可以根据该索引进行查询。
2. 唯一性索引
使用UNIQUE参数可以设置索引为唯一性索引,在创建唯一性索引时,限制该索引的值必须是唯一的,但允许有空值。在一张数据表里可以有多个唯一索引。
例如,在表student的字段email中创建唯一性索引,那么字段email的值就必须是唯一的。通过唯一性索引,可以更快速地确定某条记录。
3. 主键索引
主键索引就是一 ...
存储引擎为了管理方便,人们把连接管理、查询缓存、语法解析、查询优化这些并不涉及真实数据存储的功能划分为MySQL server 的功能,把真实存取数据的功能划分为存储引擎的功能。所以在 MySQL server 完成了查询优化后,只需按照生成的执行计划调用底层存储引擎提供的API,获取到数据后返回给客户端就好了。
MySQL中提到了存储引擎的概念。简而言之,存储引擎就是指表的类型。其实存储引擎以前叫做表处理器,后来改名为存储引擎,它的功能就是接收上层传下来的指令,然后对表中的数据进行提取或写入操作。
1. 查看存储引擎
查看 mysql 提供什么存储引擎:
1show engines;
1show engines\G;
显式如下:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768mysql> show engines\G;************************ ...
逻辑架构1. 逻辑架构剖析1. 服务器处理客户端请求首先 MySQL 是典型的 C/S 架构,即 Client / Server 架构,服务器端程序使用 mysqld。
不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送一段文本(SQL),服务器进程处理后再向客户端进程发送一段文本(处理结果)。
那服务器进程对客户端进程发送的请求做了什么处理,才能产生最后的处理结果呢?这里以查询请求为例展示:
下面具体展开看一下:
2. ConnectorsConnectors,指的是不同语言中与SQL的交互。MySQL首先是一个网络程序,在 TCP 之上定义了自己的应用层协议。所以要使用MySQL,我们可以编写代码,跟 MySQL Server 建立 TCP 连接,之后按照其定义好的协议进行交互。或者比较方便的办法是调用 SDK,比如 Native C API、JDBC、PHP等语言 MySQL Connector,或者通过 ODBC。但 通过 SDK 来访问MySQL,本质上还是在 TCP 连接上通过MySQL协议跟 MySQL 进行交互。
3. ...
Linux下MySQL的安装与使用
1. 安装前说明1. Linux系统及工具的准备
安装并启动好两台虚拟机: CentOS 7
掌握克隆虚拟机的操作
mac地址
主机名
ip地址
UUID
安装有 Xshell 和 Xftp 等访问CentOS系统的工具
CentOS6和CentOS7在MySQL的使用中的区别
防火墙:6 是 iptables,7 是 firewalld
启动服务的命令:6 是 service,7 是 systemctl
2. 查看是否安装过MySQL
如果你是用rpm安装, 检查一下RPM PACKAGE:
1rpm -qa | grep -i mysql # -i 忽略大小写
检查mysql service:
1systemctl status mysqld.service
如果存在mysql-libs的旧版本包,显示如下:
如果不存在mysql-lib的版本,显示如下:
3. MySQL的卸载1. 关闭 mysql 服务
1systemctl stop mysqld.service
2. 查看当前 mysql 安 ...
再谈类的加载器 🛴1. 概述类加载器是 JVM 执行类加载机制的前提。
ClassLoader 的作用:
ClassLoader 是 Java 的核心组件,所有的Class都是由 ClassLoader 进行加载的,ClassLoader 负责通过各种方式将 Class 信息的二进制数据流读入 JVM 内部,转换为一个与目标类对应的 java.lang.Class 对象实例。然后交给 Java 虚拟机进行链接、初始化等操作。因此,ClassLoader 在整个装载阶段,只能影响到类的加载,而无法通过ClassLoader 去改变类的链接和初始化行为。至于它是否可以运行,则由 Execution Engine 决定。
类加载器最早出现在 Java1.0 版本中,那个时候只是单纯地为了满足 Java Applet 应用而被研发出来。但如今类加载器却在0SGi、字节码加解密领域大放异彩。这主要归功于 Java 虚拟机的设计者们当初在设计类加载器的时候,并没有考虑将它绑定在 JVM 内部,这样做的好处就是能够更加灵活和动态地执行类加载操作。
1. 大厂面试题蚂蚁金服:
深入分析 class ...
类的加载过程详解1. 概述在Java中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载
按照Java虚拟机规范,从class文件到加载到内存中的类,到类卸载出内存为止,它的整 个生命周期包括如下7个阶段:
从程序中类的使用过程看 :
==大厂面试题==
蚂蚁金服 :
描述一下 JVM 加载 class 文件的原理机制?
一面:类加载过程
百度 :类加载的时机
java 类加载过程?
简述 java 类加载机制?
腾讯 :
JVM 中类加载机制,类加载过程?
滴滴 :
JVM 类加载机制
美团 :
Java 类加载过程
描述一下 jvm 加载 class 文件的原理机制
2. 1️⃣Loading(加载)阶段1. 加载完成的操作1. 加载的理解
**所谓加载,简而言之就是将 Java 类的乳节码文件加载到机器内存中,并在内存中构建出 Java 类的原型一一类模板对象。**所谓类模板对象,其实就是 Java 类在 JVM 内存中的一个快照,JVM 将从字节码文件中解析出的常量池、类字段、类方法 ...
字节码指令集与解析举例 🎡1. 概述
Java字节码对于虚拟机,就好像汇编语言对于计算机,属于基本执行指令。
Java虚拟机的插令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。由于 Java虚拟机采用面向操作数栈而不是寄存器的结构,所以大多数的指令都不包含操作数,只有一个操作码。
由于限制了Java虚拟机操作码的长度为一个字节(即0~255),这意味着指令集的操作码总数不可能超过256条。
官方文档 :https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html
熟悉虚拟机的指令对于动态字节码生成、反编译Class文件、Class文件修补都有着非常重要的价值。因此,阅读字节码作为了解 Java虚拟机的基础技能,需要熟练掌握常见指令。
1. 执行模型如果不考虑异常处理的话,那么Java虚拟机的解释器可以使用下面这个伪代码当做最基本的执行模型来理解
123456do{ 自动计算PC寄存器的 ...
Class文件结构 🤣
1. 概述1. 字节码文件的跨平台性1. Java语言:跨平台的语言
当Java源代码成功编译成字节码后,如果想在不同的平台上面运行,则无须再次编译
这个优势不再那么吸引人了。Python、PHP、Per1、Ruby、Lisp等有强大的解释器
跨平台似乎己经快成为一门语言必选的特性
2. Java 虚拟机:跨语言的平台**Java虚拟机不和包括Java 在内的任何语言绑定,它只与 “Class 文件” 这种特定的二进制文件格式所关联。**无论使用何种语言进行软件开发,只要能将源文件编译为正确的Class文件,那么这种诰言就可以在ava虚拟机上执行。可以说,统一而强大的class文件结构,就是Java虚拟机.的基石、桥梁。
官方文档 :https://docs.oracle.com/javase/specs/index.html
所有的JVM全部遵守Java虚拟机规范,也就是说所有的JVM环境都是一样的,这样一来字节码文件可以在各种JVM上运行。
3. 想要让一个Java程序正确地运行在JVM中,Java源码就必须要被编译为符合JVM规范的字节码。
...

