您的位置:首页 > 数据库 > MySQL

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.数据库随机读写比率高
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: