MySql优化--系统配置优化和硬件优化
2015-07-19 10:58
441 查看
数据库是基于操作系统的,目前大多装在linux上,所以操作系统的一些参数配置也会影响性能。
网络方面的配置:修改/etc/my.cnf
#增加TCP队列数
net.ipv4.tcp_max_syn_backlog = 65535
#减少断开连接时,资源回收
net.ipv4.tcp_max_tw_buckets = 8000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recyle = 1
net.ipv4.tcp_fin_timeout = 10
打开文件数的限制
ulimit -a 查看目录的限制
可以修改/ect/security/limits.conf,增加以下内容
soft nofile 65535
hard nofile 65535
除此之外,最好在MYSQL服务器上关闭iptables,selinux等防火墙软件。最好使用硬件防火墙,不要使用这种软件的防火墙。
MySql配置文件
linux -- my.cnf
windows -- my.ini
查看mysql配置文件顺序:
mysqld --verbose --help | grep -A 1 'Default options'
如果有多个配置文件,后面的会覆盖前面的。
常用参数说明:
innodb_buffer_pool_size: 用于配置innodb缓冲池,如果数据库中只有innodb表推荐配置为总内存的75%
注:查询所有引擎表的大小
SELECT ENGINE, ROUND(SUM(data_length+index_length)/1024/1024,1) AS "TOTAL MB", FROM INFORMATION_SCHEMA.TABLES WHERE table_schema no in ("information_schema,"performance_schema") group by ENGINE;
innodb_buffer_pool_size > TOTAL MB
innodb_buffer_pool_instance: 5.5中新增的参数,用于控制缓冲池的个数。默认只有一个缓冲池。该参数可增加并发性。
innodb_log_buffer_size: log 缓冲的大小,由于日志最长每秒就会刷新,所以不用太大。
innodb_flash_log_at_trx_commit: 数据库多长时间把变更刷新到磁盘。默认为1,每次更新就刷新。 0 表示每一秒刷新一次,2每一次提交刷新到缓冲区,每一秒由缓冲区提交到磁盘。 1最安全。 通常设为2,安全性和IO之间平衡。
innodb_read_io_threads
innodb_write_io_threads
决定了INNODB读写IO进程数,默认为4
innodb_file_per_table: 关键参数,控制innodb每一个表使用独立的表空间,默认为off,也就是所有的表会建立在共享表空间。
1. 共享表空间IO会出现瓶颈。2. 共享表空间不能主动收缩
建议设为ON, 分为多个文件,提高并发读写效率,同时可以快速回收表空间。
innodb_stats_on_metadata: 决定了什么情况下刷新innodb表的统计信息。
查询优化器选取哪个索引会使用到表的统计信息,通常情况下需要对表的统计信息进行刷新,但是刷新频率高的话会影响性能。
默认情况下,show create talbe,查询infomation下的信息时,会刷新统计信息,建议设为off,不让其自动刷新,而是找一个时间段统一的进行刷新。
第三方配置工具
Percon Configuration Wizard
https://tools.percona.com/wizard/
硬件优化
如何选择CPU?
1.mysql有一些工作只能用到单核CPU
2.MySQL5.5使用不超过32核CPU
DISK IO优化
RAID 0 : IO效果最好,多个磁盘连接成一个硬盘。
RAID 1:镜像。每组磁盘存储数据相同。
RAID 5:把多个硬盘合并成一个逻辑盘使用,建立奇偶校验信息。
一般使用RAID1+0: 既保证了安全性,也保证了磁盘的存储效率
SNA和NAT是否适合数据库?
1.常用于高可用解决方案
2.顺序读写效率高,随机读写不如人意
3.数据库随机读写比率高
网络方面的配置:修改/etc/my.cnf
#增加TCP队列数
net.ipv4.tcp_max_syn_backlog = 65535
#减少断开连接时,资源回收
net.ipv4.tcp_max_tw_buckets = 8000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recyle = 1
net.ipv4.tcp_fin_timeout = 10
打开文件数的限制
ulimit -a 查看目录的限制
可以修改/ect/security/limits.conf,增加以下内容
soft nofile 65535
hard nofile 65535
除此之外,最好在MYSQL服务器上关闭iptables,selinux等防火墙软件。最好使用硬件防火墙,不要使用这种软件的防火墙。
MySql配置文件
linux -- my.cnf
windows -- my.ini
查看mysql配置文件顺序:
mysqld --verbose --help | grep -A 1 'Default options'
如果有多个配置文件,后面的会覆盖前面的。
常用参数说明:
innodb_buffer_pool_size: 用于配置innodb缓冲池,如果数据库中只有innodb表推荐配置为总内存的75%
注:查询所有引擎表的大小
SELECT ENGINE, ROUND(SUM(data_length+index_length)/1024/1024,1) AS "TOTAL MB", FROM INFORMATION_SCHEMA.TABLES WHERE table_schema no in ("information_schema,"performance_schema") group by ENGINE;
innodb_buffer_pool_size > TOTAL MB
innodb_buffer_pool_instance: 5.5中新增的参数,用于控制缓冲池的个数。默认只有一个缓冲池。该参数可增加并发性。
innodb_log_buffer_size: log 缓冲的大小,由于日志最长每秒就会刷新,所以不用太大。
innodb_flash_log_at_trx_commit: 数据库多长时间把变更刷新到磁盘。默认为1,每次更新就刷新。 0 表示每一秒刷新一次,2每一次提交刷新到缓冲区,每一秒由缓冲区提交到磁盘。 1最安全。 通常设为2,安全性和IO之间平衡。
innodb_read_io_threads
innodb_write_io_threads
决定了INNODB读写IO进程数,默认为4
innodb_file_per_table: 关键参数,控制innodb每一个表使用独立的表空间,默认为off,也就是所有的表会建立在共享表空间。
1. 共享表空间IO会出现瓶颈。2. 共享表空间不能主动收缩
建议设为ON, 分为多个文件,提高并发读写效率,同时可以快速回收表空间。
innodb_stats_on_metadata: 决定了什么情况下刷新innodb表的统计信息。
查询优化器选取哪个索引会使用到表的统计信息,通常情况下需要对表的统计信息进行刷新,但是刷新频率高的话会影响性能。
默认情况下,show create talbe,查询infomation下的信息时,会刷新统计信息,建议设为off,不让其自动刷新,而是找一个时间段统一的进行刷新。
第三方配置工具
Percon Configuration Wizard
https://tools.percona.com/wizard/
硬件优化
如何选择CPU?
1.mysql有一些工作只能用到单核CPU
2.MySQL5.5使用不超过32核CPU
DISK IO优化
RAID 0 : IO效果最好,多个磁盘连接成一个硬盘。
RAID 1:镜像。每组磁盘存储数据相同。
RAID 5:把多个硬盘合并成一个逻辑盘使用,建立奇偶校验信息。
一般使用RAID1+0: 既保证了安全性,也保证了磁盘的存储效率
SNA和NAT是否适合数据库?
1.常用于高可用解决方案
2.顺序读写效率高,随机读写不如人意
3.数据库随机读写比率高
相关文章推荐
- MySQL的alter的使用
- [转载] 新浪微博MySQL优化的小结和反思
- RHEL6.4上安装mysql5.6.24并配置
- 简单介绍下MYSQL的索引类型
- [转载]MySQL存储过程详解 mysql 存储过程
- mysql-主从服务器同步搭建
- mydumper多线程备份还原mysql
- mysql-主主服务器同步搭建-半同步方式
- MySQL show
- mysql数据库批量转换引擎
- XtraBackup 单表文件恢复(原版mysql可用)
- MySQL数据库InnoDB数据恢复工具使用总结
- win8.1安装mysql56版本的时候出现服务无法启动
- mysql中文乱码
- MySQL-config-slow
- 简单介绍下MYSQL的索引类型
- MySQL 的模块不能安装的解决方法
- mysql 修改密码和设置允许远程登录
- MySQL中myisas和innoDB
- mysql int和varchar