介绍服务器硬件、服务器系统、数据库存储引擎、数据库参数配置、数据库结构设计和mysql语句对数据库的影响

    一 影响性能的几个方面

            服务器硬件

            服务器系统

            数据库存储引擎(插件式存储引擎)

                    MyISAM:不支持事务,表级锁

                    InnoDB:事务级存储引擎,完美支持行级锁,事务的ACID

            数据库参数配置

            数据库结构设计和sql语句

    二 服务器硬件

            1 cpu资源和可用内存大小

                 mysql不支持多cpu对同一sql并发处理

            2 磁盘的配置和选择

                  使用传统机器磁盘

                        特点:

                               存储空间大,读写慢、价格低、使用最多

                               传统机器硬盘读取数据的过程

                               移动磁头到磁盘表面的正确位置

                               等待磁盘旋转过去,所有所需的数据都被磁头读出

                   使用raid增强传统机械硬盘的性能

                                什么是raid:raid是一种把多块的硬盘按不同的方式组合起来形成的一个硬盘组,从而提供比单个硬盘更高的存储性能和提供数据备份技术。

                           什么影响了mysql性能

                       什么影响了mysql性能

                       什么影响了mysql性能

                                          什么影响了mysql性能

什么影响了mysql性能

    使用固态存储SSD和PCIe卡

           什么影响了mysql性能

            特点相对于机械磁盘

                相比机械磁盘,固态磁盘更容易损坏(每次写操作,都要对写入单元进行擦除操作)

                更好的随机读写性能

                更好的支持并发

        SSD

            特点

                    使用SATA接口:可以替换传统磁盘而不需要任何改变

                    SATA接口的SSD同样支持RAID技术

    PCI-E  SSD

                    特点:

                        无法使用SATA接口:需要独特的驱动和配置

                        价格相对与SSD要贵,但性能比SSD更好

    固态存储的使用场景

            使用于存在大量随机I/O的场景

            使用于解决单线程负载的I/O瓶颈

    使用网络NAS和SAN

        定义: 两种外部文件存储设备加载到服务器的方式

        区别:SAN设备通过光纤连接到服务器,设备通过快接口访问,服务器可以将其当作磁盘使用

什么影响了mysql性能

        网络存储使用的场景

                数据库备份

网络对性能的影响

        磁盘性能的限制

                 延迟、吞吐量

        网络性能的限制

                  延迟、带宽

         网络带宽对性能的影响

               什么影响了mysql性能

    网络质量对服务器性能的影响(丢包、网络风暴)

    建议:

            采用高性能和高带宽的网络接口设备和交换机

            对多个网卡进行绑定,增强可用性和带宽

            对可能进行的网络隔离

服务器系统

            操作系统对性能的影响

                window大小写不敏感,linux敏感

                FreeBSD

                Solaris

                linux

    CentOs系统参数优化

                内核相关参数(/etc/sysctl.conf)

                增加资源限制(/tec/security/linit.conf)

                磁盘调度策略(/sys/block/devname/queue/scheduler)

    文件系统对性能的影响

                windows fat ntfs

                linux ext3,ext4,xfs

        数据库存储引擎

                mysql体系结构

                   什么影响了mysql性能

            插件式存储引擎

            mysql服务层,select如何从文件中获取我们所要查询的数据,这个具体的实现则是由下一层存储引擎实现的

            存储引擎是针对于表的而不是针对于库的(一个库中的不同表可以使用不同的存储引擎)

            mysql常用存储引擎之MyISAM

                myISAM存储引擎表有MYD和MYI组成

                Mysql5.5之前版本默认存储引擎(系统表,临时表;在排序、分组等操作中,当数量超过一定大小后,由查询优化器建立的临时表)

                特性:

                    并发性与锁级别:表级锁

                    表损坏修复

                            check table;

                            repair table myisam

                     myisam表支持的索引类型

                     myisam表支持数据压缩(myisampack)

                限制

                        版本<5.0 默认大小是4G

                        如存储大表则需要修改MAX_ROWS和AVG_ROW_LENGTH    

                        版本>mysql5.0默认支持为256TB

                 使用场景

                          非事务型应用

                          只读类应用(压缩功能)

                           空间类应用(gps函数运算)

        mysql常用存储引擎之Innodb

                Mysql5.5 及以后版本默认存储引擎

                innodb使用表空间进行数据存储

                        innodb_file_per_table on 独立表空间

                                                        off 系统表空间

什么影响了mysql性能

        系统表空间和独立表空间要如何选择

            系统表空间无法简单的收缩文件大小

            独立表空间可以通过optimize table收缩系统文件

            系统表空间会产生io瓶颈

            独立表空间可以同时向多个文件刷新数据

        建议:

            对innodb使用独立表空间

        表转移的步骤(系统-》独立)

              使用mysqldump到处所有数据库表数据

              停止mysql服务,修改参数,并删除innodb相关文件

             重启mysql服务,重建innodb系统表空间

              重新导入数据

       innodb存储引擎的特性

               innodb是一种事务性存储引擎

               完全支持事务的ACID特性

                Redo log(已提交事务的log)和Undo log(未提交事务的log)

                innodb支持行级锁

                行级锁可以最大程度的支持并发

                行级锁是有存储引擎层实现的

                innodb状态检查:show engine innodb status

        什么是锁

                锁的主要作用是管理共享资源的并发访问

                锁用于实现事务的隔离性

         锁的类型

            共享锁(读锁)

            独占锁(写锁)

            

什么影响了mysql性能

        锁的粒度

                表级锁

    如何选择存储引擎

            参考条件

                    事务、备份、崩溃恢复、存储引擎的所有特性、不要混合使用存储引擎

    数据库参数配置

            命令行参数

                    mysql_safe -datadir=/data/sql_data

            配置文件

                    /etc/my.cnf

                    /etc/mysql/my.cnf

                    /home/mysql/my.cnf

                    ~/.my.cnf

            mysql配置参数的作用域

                    全局参数

                        set global 参数名=参数值

                        set @@global 参数名=参数值

                     会话参数

                          set[session]参数名=参数值

            内存配置相关参数

                    确定可以使用的内存上限

                    确定mysql的每个连接使用的内存

                        下面的配置都是针对线程

                               sort_buffer_size 排序缓存区的大小

                               join_buffer_size 连接缓存区的大小

                               read_buffer_size 全表查询读的缓冲区大小

                               read_rnd_buffer_size 索引

                需要为系统保留多少内存

                如何为缓存池分配内存

                    innodb_buffer_poor_size

                                    总内存-(线程连接所需的内存*连接数)-系统保留内存

                                    key_buffer_size:针对MySAM

    IO相关配置参数

       innodb i/o相关配置

              先写事务日志,后刷新数据到io

              innodb_log_file_size

              innodb_log_files_in_group

              事务日志总大小=innodb_log_files_in_group*innodb_log_file_size

              innodb_log_buffer_size 

              innodb_flush_log_at_trx_commit

    安全相关配置参数

               expire_logs_days 指定自动清理binlog的天数

               max_allowed_packet:控制mysql可以接受的包的大小

               skip_name_resolve 禁用dns查找

               sysdate_is_now 确保sysdate()返回确定性日期

                read_only禁止非super权限的用户写权限

               skip_slave_start 禁用slave自动复制  

                sql_mode设置mysql所使用的sql模式

            其他常用参数配置

                sync_binlog控制mysql如何向磁盘刷新binglog

                tmp_table_size

                max_heap_table_size 控制内存临时表

                max_conections 控制允许的最大连接数

        数据库结构设计和sql语句

            数据库设计对性能影响

                过分的反范式化为表建立太多的列

                过分的范式化造成了太多的表关联

                oLTP环境中使用了不恰当的分区表

                使用外键保证数据的完整性

        总结

            性能优化顺序

                  数据库结构和sql语句,数据库存储引擎的选择和参数配置,系统选择及优化,硬件升级              

相关文章: