.SQL数据库管理—第二章数据库硬件性能
2.1 数据库硬件性能概述
系统吞度量要素:
一个系统的吞度量(承压能力)与request对CPU的消耗、内存、IO等等紧密关联。
单个reqeust 对CPU消耗越高,内存、IO影响速度越慢,系统吞吐能力越低,反之越高。
为了能正确理解数据库性能点,我们需要快速定位能性的瓶颈点,也就是说快速找到我们SQL主要的开销在哪里?而大多数情况性能最慢的设备会是瓶颈点。讨论性能时需要考虑四项重要资源:
CPU:服务器主流都是多核2.4GB/S,访问10GB数据,六核才需要0.7秒
内存: DDR4-2400MHZ=2.4GHZ,访问10GB数据,需要4秒。
I/O:10K 硬盘-140M/S,访问10GB数据,需要71秒。
网络:1000Kbps,B=8bit, 1000/8=125M 访问10GB数据,需要80秒。
数据库系统硬件吸能CPU——Cache(L1-L2-L3)——内存——SSD硬盘——(网络和硬盘)
2.2 硬件各层次性能
2.2.1 CPU
2.2.1.1 缓存:CPU重要性能指标,越大越好。
CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。高速缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可先缓存中调用,从而加快读取速度。价格高
目前现代CPU缓存为多层(L1,L2,L3)从L3到L1,缓存越来越小,但是速度越来约快,L1通常为2ns,32K。L2通常为4ns,256K,L3通常为6ns,10MB-40MB。
2.2.1.2 主频:CPU重要性能指标,越大越好。
也叫时钟频率,单位是兆赫(MHz)或千兆赫(GHz),用来表示CPU的运算、处理数据的速度。通常,主频越高,CPU处理数据的速度就越快。
2.2.1.3 超线程:实际提高0.1-0.15,物理内核越多越好。
“超线程”(Hyperthreading Technology)技术就是通过采用特殊的硬件指令,可以把两个逻辑内核模拟成两个物理超线程芯片,在单处理器中实现线程级的并行计算,同时在相应的软硬
件的支持下大幅度的提高运行效能,从而使单处理器上模拟双处理器的效能。其实,从实质上说,超线程是一种可以将CPU内部暂时闲置处理资源充分“调动”起来的技术。
2.2.1.4多核:如图
2.2.1.5 服务器系统体系结构
SMP(Symmetric Multi-Processor) 所谓对称多处理器结构
所谓对称多处理器结构,是指服务器中多个CPU对称工作,无主次或从属关系。各CPU共享相同的物理内存,每个 CPU访问内存中的任何地址所需时间是相同的,因此SMP也被称为一致存储器访问结构(UMA:Uniform Memory Access)。对SMP服务器进行扩展的方式包括增加内存、使用更快的CPU、增加CPU、扩充I/O(槽口数与总线数)以及添加更多的外部设备(通常是磁盘存储)。
SMP服务器的主要特征是共享,系统中所有资源(CPU、内存、I/O等)都是共享的。也正是由于这种特征,导致了SMP服务器的主要问题,那就是它的扩展能力非常有限。对于SMP服务器而言,每一个共享的环节都可能造成SMP服务器扩展时的瓶颈,而最受限制的则是内存。由于每个CPU必须通过相同的内存总线访问相同的内存资源,因此随着CPU数量的增加,内存访问冲突将迅速增加,最终会造成CPU资源的浪费,使 CPU性能的有效性大大降低。实验证明,SMP服务器CPU利用率最好的情况是2至4个CPU
NUMA 非一致存储访问结构
由于SMP在扩展能力上的限制,人们开始探究如何进行有效地扩展从而构建大型系统的技术,NUMA就是这种努力下的结果之一,利用NUMA技术,可以把几十个CPU(甚至上百个CPU)组合在一个服务器内。
优点是:使用更多的CPU,缺点:如果访问的数据在另一个NUMA节点内存中,访问成本将略高与SMP系统。
2.2.2 内存
因为内存的速度比硬盘IO高,所以高效使用内存资源对整个系统的性能产生很大影响。
所有的系统或者数据库管理员,总是希望内存越大越好,越快越好。随着内存技术的发挥,内存的价格越来越便宜。现在我们在生产环境中,可以见到128、256GB,甚至TB级的内存也不罕见。一般来说,数据库通常会利用内存作为缓冲区,大内存的配置对数据库的性能有着比较明显的提升
内存的性能参数:容量、频率、延迟值。
DDR4 2400HMZ, 35ns。
内存带宽速度就=2400HMZX64bit/8=19.2GB/S。
2.2.3 磁盘
磁盘基本参数
容量:容量指标还包括硬盘的单碟容量,所谓单碟容量是指硬盘单片盘片的容量,单碟容量越大,单位成本越低,平均访问时间也越短。们买硬盘的时候说是500G的,但实际容量都比500G要小的。因为厂家是按1MB=1000KB来换算的,所以我们买新硬盘,比买时候实际用量要小点的。
转速(Rotational Speed 或Spindle speed),
是硬盘内电机主轴的旋转速度,也就是硬盘盘片在一分钟内所能完成的最大转数。转速的快慢是标示硬盘档次的重要参数之一,它是决定硬盘内部传输率的关键因素之一,在很大程度上直接影响到硬盘的速度。硬盘的转速越快,硬盘寻找文件的速度也就越快,相对的硬盘的传输速度也就得到了提高。硬盘转速以每分钟多少转来表示,单位表示为RPM,RPM是Revolutions Per minute的缩写,是转/每分钟。RPM值越大,内部传输率就越快,访问时间就越短,硬盘的整体性能也就越好。
传输速率
传输速率(Data Transfer Rate)硬盘的数据传输率是指硬盘读写数据的速度,单位为兆字节每秒(MB/s)。硬盘数据传输率又包括了内部数据传输率和外部数据传输率。
内部传输率(Internal Transfer Rate) 也称为持续传输率(Sustained Transfer Rate),它反映了硬盘缓冲区未用时的性能。内部传输率主要依赖于硬盘的旋转速度。
外部传输率(External Transfer Rate)也称为突发数据传输率(Burst Data Transfer Rate)或接口传输率,它标称的是系统总线与硬盘缓冲区之间的数据传输率,外部数据传输率与硬盘接口类型和硬盘缓存的大小有关。
硬盘接口
硬盘与主机系统间的连接部件,作用是在硬盘缓存和主机内存之间传输数据。不同的硬盘接口决定着硬盘与计算机之间的连接速度,在整个系统中,硬盘接口的优劣直接影响着程序运行快慢和系统性能好坏。
2.3 关于数据库存储需要考虑的事情
2.3.1 存储最重要的指标
以MB/sec为单位的吞吐量用于衡量1秒内能从存储传输多少字节
以IO/sec为IOPS单位的吞吐量表示磁盘每秒可执行多少IO
IOPS计算
IOPS = 1/IO Time
IO Time = Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate
Seek Time=平均寻道时间(Averageseektime),
(Rotational Speed=磁盘转速
Transfer Rate=数据传输率
10K磁盘 8K页计算
IO Time = 5ms + (60sec/10000RPM/2) + 8K/40MB = 5 + 3+ 0.2 = 8.2ms
IOPS =1/8.2ms=120 IOPS
以MB/sec 与IOPS那个对数据库性能有更大影响那,执行随机读写的OLTP数据库主要是IOPS,对于大量顺序读取的OLAP分析数据库主要为MB/sec。
2.3.2 关于存储需要考虑的事项
2.3.2.1采用更多磁盘
在RAID中,磁盘多时的运行速度总是比磁盘少时更快。例如需要4TB的卷,采用10块400G硬盘要比2块2TB硬盘获得的性能更高。在有些情况下吞吐量约等于各个磁盘吞吐量之和。假设400G和2T的转速一致,为20M/S,那么采用400G组合总吞吐量为200M/S,2TB组合为40M/S。400G组合是2TB组合5倍。
2.3.2.2 采用高速硬盘
毫无疑问,高速硬盘比低速硬盘有更好的性能。15K的硬盘理论速度是250M/S,实际上非顺序随机读取速度实际为2-4M/S,顺序大块读取,速度也不会超过50-60M/S。
2.3.2.3 磁盘测试
可以使用windows自带的windows system performance monitor,或者IOMeter使用三个参数就行Avg sec/Read , Avg sec/Write, Avg sec/Transfer计算器来衡量。
数据库事务日志:不超过5MS,最好0ms。
OLTP数据:不超过10MS。
OLAP与报表系统:不超过25MS。
监控物理Disk的IO延迟
在Windows级别上对Physical Disk的IO延迟进行分析,主要依赖于Performance Monitor的计数器,衡量物理Disk的IO延迟的计数器主要有三个:
Avg. Disk sec/Transfer:Disk每一次读写操作所用的平均时间
Avg. Disk sec/Read:Disk每一次读操作所用的平均时间
Avg. Disk sec/Write:Disk每一次写操作所用的平均时间
avg.Disk sec/(Transfer,Read,Write),能够很好的反映Disk的IO速度,推荐的衡量Disk的IO速度的基线(baseline):
很快:<10ms
一般:10-20ms
有点慢:20-50ms
非常慢:>50ms