影响性能的几个方面

1. 服务器硬件
    CPU、内存、磁盘IO
2. 服务器系统
3. 数据库存储引擎的选择
    MyISAM:不支持事务,表级锁。
    InnoDB:事务级存储引擎,完美支持行级锁,事务ACID特性。
4. 数据库参数配置(前几项加起来的因素没有这一项影响大)
5. 数据库结构设计和SQL语句
    慢查询
    数据库表结构设计
    SQL语句的编写和优化

CPU 资源和可使用内存大小

计算密集型 的应用:CPU资源影响整个系统的性能,成为系统的瓶颈。
对 MySQL 影响的资源:CPU、可用内存大小
工作所需要的 热数据:远远超过可用内存大小时,I/O系统成为瓶颈。
网络:可以看作是另外一种I/O资源,网络的性能影响,往往发生在大数据被查询时。特别是使用 MemCache (存储引擎)时,当缓存失效时,会产生大量的网络传输,从而影响服务的性能。

当I/O出现瓶颈时,最有效的方法就是升级 I/O 子系统,增加更多的内存。

网络、I/O资源影响 MySQL 性能的第二个因素。

服务器硬件对 MySQL性能产生的的影响,如何进行优化

    增加CPU和内存

如何选择 CPU ,选择更快的 CPU 还是更多的 CPU(频率&数量)!

CPU 选购需要了解的前提:

    + 我们的应用是 CPU 密集型的吗?
        CPU 密集型的需要更好地 CPU ,而不是更多的 CPU。
        当前的 MySQL 不支持多 CPU 对同一 SQL 并发处理。
    + 我们系统的并发量(吞吐量)如何?
        衡量数据库处理能力的指标:
            QPS(同时处理SQL的数量)每秒钟
            这里的并发是 纳秒级 的,这个取决于 MySQL 执行情况。
    + MySQL 通常应用在 Web 类应用:核心数量比频率重要。
    + 我们所使用 MySQL 的版本也可以决定如何选择 CPU?
        老版本的 MySQL 对多核的 CPU 支持不好,5.0 之前版本这个限制很严重。
        现在的 5.6/5.7 对多核CPU支持有了改善,可以放心使用16核、32核的 CPU。
    + 选择 32位 还是 64位 的 CPU?
        完全多余的选择,64位 架构已经是默认配置,32位 服务器也不好买到。同时 MySQL 对 64位 已经做到了完美的支持。
    注意事项:
        64位 架构CPU运行 32位 操作系统。特别是云服务器、虚拟主机、公司自己服务器。
        32位 操作系统,不能使用大量的内存;任何一个单独的进程不能4G内存。
        MySQL 是单线程,如果使用了 32位 操作系统是对 MySQL 性能极大地限制。

内存选择

    内存的大小直接影响了 MySQL的性能;内存的I/O性能高于磁盘,就是和SSD、Fusion-IO高速磁盘,内存的I/O速率也高的多。
    把数据存到内存进行读取可以提高 MySQL的性能。

    常用的 MySQL 存储引擎:
        MyISAM:索引放在内存,数据放在操作系统缓存。
        InnoDB:索引、数据同时放在内存中缓存,从而提升数据库的运行效率。

    提示:
        1. 内存是越多越好,但是对性能影响有限,不能无限的增加内存而无限的增加性能。
        数据库可用内存是有限的:一般当缓存的数据和磁盘存储的数据一样时,也就是说当所有的数据都缓存到内存时,在增加内存的大小是没有意义的。
        举栗子:
            数据库数据大小是100G,内存只有64G情况下,可以增加服务器内存至128G,扩大数据库缓冲区。
            数据库数据大小是100G,内存是256G情况下,是不能增加内存的方式,获取性能提升。也不是绝对的,多余的内存,可以增加操作系统其他服务的性能。
        2. 缓存对读有益处,对写也有益处。
    内存的选择问题:
    内存的主频和CPU主频是类似的,建议选择服务器支持主频的最高的内存。频率越高内存读取速度越快。(主板支持的最大内存频率)

    服务器内存是组成购买的。每个通道的内存:相同的品牌、颗粒、频率、电压、效验技术和型号的内存条。
    单挑容量要尽可能的大,但这个所需要的成本就要高;可以根据数据库大小选择内存。要根据增长速度,增长幅度考虑,可以选择一些更大的,减少短时间内升级内存问题。

磁盘的配置和选择

内存对数据库性能影响很重要;很多时候要牺牲内存为代价,换取I/O子系统,因为最终数据要在磁盘持久存储。

1. 使用传统机器硬盘

- 存储空间大
- 价格低
- 读/写较慢
- 使用最多
- 最常见

传统机器硬盘读取数据的过程(工作机制):
1. 移动磁头到磁盘表面上的正确位置(访问时间)
2. 等待磁盘旋转,使的所需的数据在磁头之下(访问时间)
3. 等待磁盘旋转过去,所有所需的数据都被磁头读出(传输速度)

如何选择传统机器硬盘:
1. 存储容量
2. 传输速度
3. 访问时间
4. 主轴转速
5. 物理尺寸

2. 使用RAID增强传统机器硬盘的性能

3. 使用固态存储SSD和PCIe卡

4. 使用网络存储NAS和ASN