cpu缓存

专职DBA-MySQL优化

穿精又带淫゛_ 提交于 2019-11-28 03:56:02
专职DBA-MySQL优化 1.优化哲学 为什么优化? 为了获得成就感? 为了证实比系统设计者更懂数据库? 为了从优化成果来证实优化者更有价值? 但通常事实证明的结果往往会和你期待的相反! 优化有风险,涉足需谨慎! 2.优化风险 优化不总是对一个单纯的环境进行!还很可能是一个复杂的已投产的系统。 优化手段本来就有很大的风险,只不过你没能力意识到和预见到! 任何的技术可以解决一个问题,但必然存在带来另一个问题的风险! 对于优化来说解决问题而带来的问题控制在可接受的范围内才是有成果的。 优化后,保持现状或出现更差的情况都是失败! 稳定性和业务可持续性通常比性能更重要! 优化不可避免的就是涉及到变更,变更就有风险! 优化使性能变好,维持和变差是等概率事件! 优化不能只是DBA担当风险,但会所有的人分享优化成果! 所以优化工作是由业务需要驱使的!!! 3.谁会参与优化 数据库工程师 业务部门代表 应用程序架构师 应用程序设计人员 应用程序开发人员 硬件及系统管理员 存储管理员 网络工程师 研发人员 4.优化方向 安全优化(业务持续性) 性能优化(业务高效性) 5.优化的范围及思路 优化范围: 存储、主机和操作系统: 主机架构稳定性 I/O规划及配置 Swap OS内核参数 网络问题 应用程序:(Index,lock,session) 应用程序稳定性和性能 SQL语句性能 串行访问资源

这18条背下来没人敢和你忽悠CPU

这一生的挚爱 提交于 2019-11-28 02:38:07
http://hi.baidu.com/hieda/blog/item/eb78fd444c6e5748510ffe83.html 1.主频   主频也叫时钟频率,单位是MHz,用来表示CPU的运算速度。CPU的主频=外频×倍频系数。很多人认为主频就决定着CPU的运行速度,这不仅是个片面的,而且对于服务器来讲,这个认识也出现了偏差。至今,没有一条确定的公式能够实现主频和实际的运算速度两者之间的数值关系,即使是两大处理器厂家Intel和AMD,在这点上也存在着很大的争议,我们从Intel的产品的发展趋势,可以看出Intel很注重加强自身主频的发展。像其他的处理器厂家,有人曾经拿过一快1G的全美达来做比较,它的运行效率相当于2G的Intel处理器。   所以,CPU的主频与CPU实际的运算能力是没有直接关系的,主频表示在CPU内数字脉冲信号振荡的速度。在Intel的处理器产品中,我们也可以看到这样的例子:1 GHz Itanium 芯片能够表现得差不多跟2.66 GHz Xeon/Opteron一样快,或是1.5 GHz Itanium 2大约跟 4 GHz Xeon/Opteron一样快。CPU的运算速度还要看CPU的流水线的各方面的性能指标。   当然,主频和实际的运算速度是有关的,只能说主频仅仅是CPU性能表现的一个方面,而不代表CPU的整体性能。   2.外频  

并发编程与高并发解决方案(一):并发编程相关基础知识

人走茶凉 提交于 2019-11-28 01:49:53
并发编程与高并发解决方案(一):并发编程相关基础知识 【原文链接】 www.ronglexie.top 目录 基本概念 CPU多级缓存 CPU多级缓存-缓存一致性协议(MESI) MESI协议中的状态 MESI状态转换图 CPU多级缓存-乱序执行优化 Java内存模型(JMM) JVM对Java内存模型的实现 硬件内存架构 Java内存模型和硬件架构之间的桥接 共享对象的可见性 竞争现象 支撑Java内存模型的基础原理 指令重排序 数据依赖性 as-if-serial语义 内存屏障(Memory Barrier) happens-before原则 Java内存模型中线程和主内存的抽象关系 Java内存模型中同步的操作与规则 同步操作 同步规则 并发的优势与风险 基本概念 并发(Concurrency):并发是指同时拥有两个或者多个线程,如果程序在单核处理器上运行,多个线程将交替地换入或者换出内存,这些线程是同时”存在“的,每个线程都处理执行过程中的某个状态,如果运行在多核处理器上,此时,程序中的每个线程都将分配到一个处理器上,因此可以同时运行。 高并发(High Concurrency):高并发是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。 CPU多级缓存 CPU多级缓存配置(演变): 数据的读取和存储都经过高速缓存

关于 L3 缓存行 cacheLIne 的研究!还是对程序有举足轻重的作用!

Deadly 提交于 2019-11-27 16:02:39
https://www.cnblogs.com/PurpleTide/archive/2010/11/25/1887506.html CLR via C# 读书笔记 2-3 Cache Lines and False Sharing(高速缓冲区和错误共享???) 关于CPU中缓存行的问题。 volatile 修饰的字段 会 lock 整个缓存行,而 每个缓存行占用64KB ,老的CPU32KB。。 因此class A{ int a ,int b} 如果A.a 被线程1 修改, 线程2 就无法修改以及访问 A.b ,直到A.a被线程1修改完成 再次写入内存 , 线程2 才能访问 内存中的A.b ,这就是 内存锁定(跟CPU中L3缓存中的缓存行锁定是同步的。 因此 一个类最好 set 内存布局,int a 占用64个字节,int b 偏移64个字节后存放。这样就能 a ,b 字段 各占用一个 L3 缓存行。不同线程读写a,b 时无需等待另一个线程读写完毕。 https://blog.csdn.net/sprayabc/article/details/8658369 以下是最最最长尽的多核CPU 以及L3缓存的缓存行,设计过程。 https://www.cnblogs.com/jokerjason/p/9584402.html 来源: https://www.cnblogs.com

SQLSERVER预读逻辑读物理读

半世苍凉 提交于 2019-11-27 15:29:04
  预读:用估计信息,去硬盘读取数据到缓存。预读 100次,也就是估计将要从硬盘中读取了100页数据到缓存。   物理读:查询计划生成好以后,如果缓存缺少所需要的数据,让缓存再次去读硬盘。物理读 10页,从硬盘中读取10页数据到缓存。   逻辑读:从缓存中取出所有数据。逻辑读 100次,也就是从缓存里取到100页数据。 lob逻辑读:从缓存读取的text,ntext,image或大值类型(varchar(max),nvarchar(max),varbinary(max))的页的数目 SQL Server存储的最小单位是页,每一页大小为8K,SQL Server对于页的读取是原子性的,要么读完一页,要么完全不读。即使是仅仅要获得一条数据,也要读完一页。而页之间的数据组织结构为B树结构。 所以SQL Server对于逻辑读、预读、物理读的单位是页。 基本上,逻辑读、物理读、预读都等于是扫描了多少个页。 当遇到一个查询语句时, SQL SERVER会走第一步,分别为生成执行计划(占用CPU和内存资源),同步的用估计的数据去磁盘中取得需要取的数据(占用IO资源,这就是预读), 注意,两个第一步是并行的,SQL SERVER通过这种方式来提高查询性能. 然后查询计划生成好了以后去缓存读取数据.当发现缓存缺少所需要的数据后让缓存再次去读硬盘(物理读) 最后从缓存中取出所有数据(逻辑读)。 来源

并发问题的源头—原子性、可见性、有序性。

女生的网名这么多〃 提交于 2019-11-27 13:04:37
源头的源头——为什么会有这三个问题。 先说并发问题的源头: 原子性问题是因为多线程切换,导致程序没有按照自己的意愿正确执行。 可见性问题是因为数据在缓存中的更新不能及时的通知其它线程。 有序性问题是因为编译器优化使程序的执行顺序发生变化导致程序发生异常结果。 那么,这三个问题的源头又是什么呢?——那就是 为了缓解CPU、内存、硬盘这三者的速度差异带来的问题 。 我们都知道,这三者的速度差异非常的大,无论哪一代计算机都有这样的特征。由于木桶效应,所以就需要有一些方法优化它们速度差异所带来的性能瓶颈,这里我们说跟并发问题有关的: CPU增加缓存,避免每次都在内存读取数据。 操作系统层面增加进程、线程的概念,每个程序分时复用CPU,缓解CPU与磁盘I/O的速度差异。 编译器优化执行指令,使CPU更好利用缓存。 缓存的可见性问题 在现代多核CPU中,每个核心都会有自己的独立缓存。而CPU利用缓存,缓和了CPU与内存之间的速度差异带来的问题。但是,我们都知道一个运行时的程序,它的运行数据是放在内存当中的。而CPU在计算数据的数值后,把存放在缓存中的值再次写回内存的时机是不确定的。这样,就会发生缓存可见性问题。当然,其实还有很多地方都有缓存可见性问题,这里只说了其中一个。 例如:当CPU的多个核心参与一个程序的运行,当不同核心间进行了各自的计算,把计算后的值放入自己的缓存而不选择写入内存中

linux下的缓存机制 buffer/cache/swap

匆匆过客 提交于 2019-11-27 08:53:18
一、缓存机制介绍 缓存用途:在Linux系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。 缓存机制优点 :减少系统调用次数,降低CPU上下文切换和磁盘访问频率。 CPU上下文切换 :CPU给每个进程一定的服务时间,当时间片用完后,内核从正在运行的进程中收回处理器,同时把进程当前运行状态保存下来,然后加载下一个任务,这个过程叫做上下文切换。实质上就是被终止运行进程与待运行进程的进程切换。 Swap用途 :Swap意思是交换分区,通常我们说的虚拟内存,是从硬盘中划分出的一个分区。当物理内存不够用的时候,内核就会释放缓存区(buffers/cache)里一些长时间不用的程序,然后将这些程序临时放到Swap中,也就是说如果物理内存和缓存区内存不够用的时候,才会用到Swap。 swap清理:swapoff -a && swapon -a Swap清理命令有个前提条件,空闲的内存必须比已经使用的swap空间大。 二、查看缓存区及内存使用情况 可以用 free 命令查看缓存区与内存的使用情况,通过free后缀不同可以看到不同的单位,包括free -m以兆为单位,free -g以GB为单位, free -k则以Kb为单位。 Mem

Java并发编程(二)

梦想与她 提交于 2019-11-27 04:45:48
线程的安全性问题 总所周知,多线程提高了系统的性能,但令人头痛的是线程会存在的安全性问题. 为什么会存在安全性问题,并且我们应该怎么去解决这类的问题。 其实线程安全问题可以总结为: 可见性、原子性、有序性 这几个问题,我们搞 懂了这几个问题并且知道怎么解决,那么多线程安全性问题也就不是问题 CPU 高速缓存 线程是 CPU 调度的最小单元,线程涉及的目的最终仍然是更充分的利用计算机处理的效能,但是绝大部分的运算任务不能只依靠处理器“计算”就能完成,处理器还需要与内存交互,比如读取运算数据、存储运算结果,这个 I/O 操作是很难消除的。而由于计算机的存储设备与处理器的运算速度差距非常大,所以 现代计算机系统都会增加一层读写速度尽可能接近处理器运算速度的高速缓存来作为内存和处理器之间的缓冲:将运算需要使用的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步到内存之中 https://pan.baidu.com/s/18yKW0QR8xcUajc0pX_AOwg 高速缓存从下到上越接近 CPU 速度越快,同时容量也越小。现在大部分的处理器都有二级或者三级缓存,从下到上依次为 L3 cache, L2 cache, L1 cache. 缓存又可以分为指令缓存和数据缓存,指令缓存用来缓存程序的代码,数据缓存 用来缓存程序的数据 L1 Cache,一级缓存,本地 core 的缓存

java并发编程之美-阅读记录2

被刻印的时光 ゝ 提交于 2019-11-26 17:55:36
2.1什么是多线程并发编程   并发:是指在同一时间段内,多个任务同时在执行,并且执行没有结束(同一时间段又包括多个单位时间,也就是说一个cpu执行多个任务)   并行:是指在单位时间内多个任务在同时执行(也就是多个cpu同时执行任务)      而在多线程编程实践中,线程的个数一般是多于cpu的个数的 2.2为什么要多线程并发编程   多个cpu同时执行多个任务,减少了线程上下文切换的开销 2.3线程安全问题   共享资源:就是说该资源可以被多个线程持有,或者说能够被多个线程访问。   对共享资源的修改会造成线程安全问题。 2.4共享变量的内存可见性问题   java内存模型(JMM)规定,所有的变量都存储在主内存中,当线程使用变量时,会将主内存中的变量复制一份到自己的工作内存,之后线程操作的变量都是自己工作内存(L1缓存或者L2缓存或者寄存器)中的变量。   这样对于内存不可见(没有使用volatile修改的变量)的变量来说,在不同线程中就可能存在不同的值。就那下图一个双核cpu系统来说,当操作一个共享变量X时,线程A就会获取当前内存中的变量X,由于线程A是第一次操作,当前工作内存中没有该变量,此时,线程A就会将主内存中的变量X复制一份到自己的工作内存(L1/L2缓存),线程A给变量X重新赋值(假设主内存中默认值为1,线程A修改为2),修改后,线程A会将修改后的值重新刷会主内存

Java8的伪共享和缓存行填充--@Contended注释

巧了我就是萌 提交于 2019-11-26 15:44:20
缓存系统中是以缓存行(cache line)为单位存储的。缓存行是2的整数幂个连续字节,一般为32-256个字节。最常见的缓存行大小是64个字节。当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。缓存行上的写竞争是运行在SMP系统(SMP的全称是" 对称多处理 "(Symmetrical Multi-Processing)技术,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间 共享内存 子系统以及 总线结构 )中并行线程实现可伸缩性最重要的限制因素。有 人将伪共享描述成无声的性能杀手,因为从代码中很难看清楚是否会出现伪共享。 来源: https://www.cnblogs.com/mazhimazhi/p/11324870.html