MySQL高级篇-12-数据库的其他调优策略
数据库调优的措施调优的目标
尽可能 节省系统资源 ,以便系统可以提供更大负荷的服务(吞吐量更大)
合理的结构设计和参数调整,以提高用户操作 响应的速度 (响应速度更快)
减少系统的瓶颈,提高MySQL数据库整体的性能
如何定位调优问题
用户的反馈(主要)
用户是我们的服务对象,因此他们的反馈是最直接的。虽然他们不会直接提出技术建议,但是有些问题往往是用户第一时间发现的。我们要重视用户的反馈,找到和数据相关的问题。
日志分析(主要)
可以通过查看数据库日志和操作系统日志等方式找出异常情况,通过它们来定位遇到的问题。
服务器资源使用监控
通过监控服务器的CPU、内存、IO等使用情况,可以实时了解服务器的性能使用,与历史情况进行对比。
数据库内部状况监控
在数据库的监控中,活动会话(Active Session)监控是一个重要的指标。通过它,你可以清楚地了解数:据库当前是否处于非常繁忙的状态,是否存在SQL堆积等。
其它
除了活动会话监控以外,也可以对事务 、 锁等待 等进行监控,这些都可以帮助我们对数据库的运 行状态有更全面的认识。
调优的维度和步骤需 ...
MySQL高级篇-11-数据库的设计规范
数据库设计
糟糕的数据库设计
数据冗余、信息重复,存储空间浪费
数据更新、插入、删除的异常
无法正确表示信息
丢失有效信息
程序性能差
良好的数据库设计
节省数据的存储空间
保证数据的完整性
方便进行数据库应用系统的开发
范式范式简介在关系型数据库中,关于数据表设计的基本原则、规则就称为范式。它是一张数据表的设计结构需要满足的某种设计标准的 级别 。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
常用范式 目前关系型数据库有六种常见范式,按照范式级别,从低到高分别是:
第一范式(1NF)
第二范式 (2NF
第三范式(3NF)
巴斯-科德范式(BCNF)
第四范式(4NF)
第五范式(5NF,又称完美范式)
一般来说,在关系型数据库设计中,最高也就遵循到BCNF,普遍还是3NF。但也不绝对,有时候为了提高某些查询性能,还需要破坏范式规则,也就是反规范化。
键和相关属性的概念范式的定义会使用到主键和候选键,数据库中的键(Key)由一个或者多个属性组成。
数据表中常用的几种键和属性的定义:
超键:能唯一标识元组的属性集叫做超键
候选键:如果超键不包括多余 ...
JUC-7-CAS
CAS 介绍
WHAT CAS
CAS即compare and swap,包含三个操作数:
内存位置
预期原值
更新值
执行CAS操作时,将内存位置与预期原值进行比较,如果匹配,那么处理器会自动将该位置值更新为新值;如果不匹配,那么处理器不做任何操作,多个线程同时执行CAS操作只有一个会成功。
WHY CAS
CAS有3个操作数,位置内存值V、旧的预期值A和要修改的更新值B。
当且仅当旧的预期值A和内存值V相同时,将内存值V修改为B,否则无操作或者重试,这种重试行为称为自旋。
硬件级别
CAS是JDK提供的非阻塞原子性操作,它通过硬件保证了比较-更新的原子性。
CAS是一条CPU的原子指令cmpxchg指令,不会造成数据不一致问题,Unsafe提供的CAS方法(如compareAndSwapXXX)底层实现即为CPU指令cmpxchg。执行cmpxchg指令时会判断当前系统是否为多核系统,如果是就给总线加锁,只有一个线程会对总线加锁成功,加锁成功之后会执行CAS操作,CAS的原子性实际上是CPU实现独占的
compareAndSet(int expect, int u ...
JVM 内存与垃圾回收篇-10-垃圾回收器
GC 分类与性能指标GC 分类
按线程数分,可以分为串行垃圾回收器和并行垃圾回收器
串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束。
在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场合,串行回收器的性能表现可以超过并行回收器和并发回收器。所以串行回收默认被应用在客户端的client模式下的JVM中
在并发能力比较强的CPU上,并行回收器产生的停顿时间要短于串行回收器
和串行回收相反,并行收集可以运用多个CPU同时执行垃圾回收,因此提升了应用的吞吐量,不过并行回收仍然与串行回收一样,采用独占式,使用STW机制
按工作模式分,可以分为并发式垃圾回收器和独占式垃圾回收器
并发式垃圾回收器与应用程序线程交替工作,以尽可能减少应用程序的停顿时间
独占式垃圾回收器 STW 一旦运行,就停止应用程序中的所有用户线程直到垃圾回收过程完全结束
按碎片处理方式分,可分为压缩式垃圾回收器和非压缩式垃圾回收器
压缩式垃圾回收器会在回收完成后,对存活对象进行压缩整理,消除回收后的碎片。再分配对象空间 ...
JVM 内存与垃圾回收篇-9-垃圾回收算法
标记阶段:引用计数算法
垃圾标记阶段:对象存活判断
在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中存活对象和已经死亡的对象。只有被标记为己经死亡的对象,GC才会在执行垃圾回收时释放掉其所占用的内存空间,因此这个过程称为垃圾标记阶段。
当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡
判断对象存活一般有两种方式:引用计数算法 和 可达性分析算法。
引用计数算法
引用计数算法(Reference Counting)对每个对象保存一个整型的引用计数器属性,用于记录对象被引用的情况。
对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1;当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,即表示对象A不可能再被使用,可进行回收。
优点:实现简单,垃圾对象便于辨识;判定效率高,回收没有延迟性。
缺点:
它需要单独的字段存储计数器,增加存储空间的开销
每次赋值都需要更新计数器,伴随着加法和减法操作,增加时间开销
引用计数器有一个严重的问题,即无法处理循环引用的情况。这是一条致命缺陷,导致在Java的垃圾回 ...
JVM 内存与垃圾回收篇-8-垃圾回收介绍
垃圾回收概述
WHAT 垃圾
垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用,甚至可能导致内存溢出。
WHY GC
对于高级语言来说,一个基本认知是如果不进行垃圾回收,内存迟早都会被消耗完
除了释放没用的对象,垃圾回收也可以清除内存里的记录碎片。碎片整理将所占用的堆内存移到堆的一端,以便JVM将整理出的内存分配给新的对象
随着应用程序所应付的业务越来越庞大、复杂,用户越来越多,没有 GC 就不能保证应用程序的正常进行。而经常造成 STW 的 GC 又跟不上实际的需求,所以才会不断地尝试对 GC 进行优化
Java垃圾回收机制
自动内存管理机制,无需开发人员手动参与内存的分配与回收,降低内存泄漏和内存溢出的风险
垃圾回收器可以对年轻代回收,也可以对老年代回收,甚至是全堆和方法区的回收,其中 Java 堆是垃圾收集器的工作重点。
频繁收集 Young 区
较少收集 Old 区
基本不动 Perm 区
垃圾回收相关概念S ...