CPU
为了支持更多的内存支持,CPU必须是64位来支持64位操作系统。
OLTP
- 用户操作并发量大
- 事务处理的时间比较短
- 查询语句简单,走索引
- 复杂查询少
OLTP对CPU要求不是很高,但是并发量高,是IO密集型操作。
OLAP
- 用户操作并发量小
- 一般只用于查询
- 查询语句复杂,需要优化分析,比较、排序、连接等耗费CPU
- 复杂查询多,耗费时间长
OLAP对CPU要求较高,是CPU密集型操作。
从InnoDB存储引擎的设计架构上来看,主要后台操作都是在一个单独的master thread中完成的,因此并不能更好的支持多核应用。InnoDB1.2支持多个purge线程,以及将刷新操作从master thread中分离出来。虽然一条SQL查询语句只能在一个CPU总工作,但是可以有效的提升大并发量的请求处理。
可以通过修改以下两个参数来增加IO线程。
innodb_read_io_threads
innodb_write_io_threads
内存
内存的大小直接反映了数据库的性能(InnoDB缓存数据、索引都缓存在内存中时性能最优。)
通常InnoDB存储引擎的缓冲池的命中率不应该小雨99%。
1 | show global status like 'innodb%read%'; |
innodb_buffer_pool_reads: 表示从物理磁盘读取页的次数;
innodb_buffer_pool_read_ahead: 表示预读的次数;
innodb_buffer_pool_read_ahead_evicted: 预读的页,但是没有被读取就从缓冲池中被替换的页的数量,一般用来判断预读的效率;
innodb_buffer_pool_read_requests: 从缓冲池中读取页的次数;
innodb_data_read: 总共读入的字节数;
innodb_data_reads: 总共读取请求的次数,每次读取可能需要读取多个页;
缓冲池命中率 = (innodb_buffer_pool_read_requests) / (innodb_buffer_pool_read_requests + innodb_buffer_pool_read_ahead + innodb_buffer_pool_reads);
平均每次读取字节数 = innodb_data_read / innodb_data_reads;
当缓冲池的大小已经大于数据库文件的大小时,磁盘操作依旧会进行。
数据库的缓冲池只是用来存放热点的区域, 后台线程还负责将脏页异步写入到磁盘。
每次事务提交还要将日志写入重做日志文件。
磁盘
机械硬盘
机械硬盘的访问需要耗费长时间的磁头旋转和定位来查找,因此顺序访问的速度远高于随机访问。
同时用多块磁盘组成RAID来提高数据库的性能,也将数据分布在不同的硬盘上来达到负载均衡。
固态硬盘
基于闪存的固态硬盘,内部由山村组成。企业级应用一般使用固态硬盘,通过并联多块闪存来进一步提高数据传输的吞吐量。
固态硬盘没有传统的机械磁盘的读写磁头,不需要耗费大量的时间用于磁盘旋转和定位来查找数据,所以固态硬盘可以提供一致的随机访问时间。
闪存中的数据时不可以更新的,智能通过扇区的覆盖重写。在覆盖重写之前需要执行非常耗时的擦除工作。擦除操作不能再所含数据的扇区上完成,而需要在删除整个被称为擦出块的基础上完成,这个擦除块的尺寸大于山区大小,通常是128KB或者256KB。每个擦除块有擦写次数的限制。
因为有擦除写入的问题,因此需要考虑如何利用齐读取性能,避免过多次的写入操作。
增加 innodb_io_capacity 变量的值达到充分利用固态硬盘带来的高IOPS特性。
关闭临接页的刷新,可以可以带来一定效果的提升。
RAID
RAID(Redundant Array of Independent Disks,独立磁盘冗余数组)基本思想是吧多个相对便宜的硬盘组合起来,成为一个磁盘数组,使得性能达到甚至超过一个价格昂贵、容量巨大的硬盘。由于将多个硬盘组合成一个逻辑山区,RAID看起来就像一个单独的硬盘或者逻辑存储单元,因此操作系统会把它当作一个硬盘。
RAID的作用:
- 增强数据集成度
- 增强容错功能
- 增加处理量或者容量
RAID0
将多个磁盘并列起来合并成一个大磁盘,存放数据时将数据按照磁盘个数分段,同时将这些数据写入磁盘,不会有冗余,并行IO速度最快,但是没有冗余如果一个磁盘损坏,则所有数据都会丢失。
RAID1
两组以上的N个磁盘相互作为镜像,在一些多线程操作系统中能有很好的读取速度,但是写入速度略有降低。
除非拥有相同数据的主磁盘与镜像同时损坏,否则只要一个磁盘正常即可用维持运作,可靠性最高,磁盘利用率最低。
RAID5
一种存储性能、数据安全和存储成本兼顾的解决方案。是一种硬盘分区技术,RAID5至少需要三个硬盘,RAID5部队存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成?RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储与不同的磁盘上。
RAID10
RAID1和RAID0的组合体
RAID50
RAID5和RAID0的组合体
操作系统
Linux
FreeBSD
Windows操作系统下,表名不区分大小写;Linux操作系统大小写敏感。
测试工具
sysbench
模块化的,跨平台的多线程基准测试工具,用于测试各种不同系统参数下的数据库负载情况。
- CPU性能
- 磁盘IO性能
- 调度程序性能
- 内存分配以及传输速度
- POSIX线程性能
- 数据库OLTP基准测试
tpcc-mysql
开源的TPC-C测试工具,遵循tpcc标准。