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标准。