摘录自:http://blog.51cto.com/8651620/2082164
1.硬件优化:
1)cpu:64位,高主频,高缓存,高并行处理能力.
2)内存:大内存,高主频,尽量不要用swap.
3)硬盘:固态,高转速.
4)网卡:万兆,光口.
2.磁盘io优化:
1)做raid10
2)磁盘分区:将数据放在独立的分区上.做主从时,binlog单独放在一个分区
3.操作系统优化:
1)使用64位系统
2)使用网卡绑定
3)设置TCP连接数限制
4)优化mysql用户打开文件数限制
5)禁用不必要的服务自启动
6)可以给数据分区一个单独的文件系统,一般为xfs(红帽6需要安装支持xfs的软件xfsprogs),在挂载分区时可以考虑启用noatime.
7)最小化原则:
安装系统最小化
开启服务最小化
操作最小化
登录最小化
权限最小化
4.数据库设计与规划:
1)专机专用
2)做主从同步,负载均衡,高可用集群等
3)选择合适的数据库引擎.如myiasm适合读多写少的表,innodb适合读少写多的表.做主从时主使用innodb引擎,从使用myisam引擎
5.my.cnf内的参数优化:
总原则:赋予mysql适当的资源,一般40%给系统,60%-70%给mysql.
1)启用mysql慢查询,分析sql语句,找到影响效率的sql:
vim /etc/my.cnf
log-slow-queries=/var/lib/mysql/slow.log
log_query_time=5
2)对查询进行缓存:
vim /etc/my.cnf
query_cache_size=32m
3)强制限制mysql资源配置,例如:
vim /etc/my.cnf
max_connections=500 #限制最大连接数
wait_timeout=10 sleep #mysqld将终止等待时间(空闲时间)超过10秒的连接
max_connection_error=10 #如果一个主机在连接到服务器时有问题,并重试很多次后放弃,那么这个主机就会被锁定,直到执行:mysql> FLUSH HOSTS;
4)表高速缓存:
vim /etc/my.cnf
table_cache=23 #缓存23个表.在 2G 内存以下的机器中的值默认从 256 到 512个
5)关键字缓存:
vim /etc/my.cnf
key_buffer=512M #只跑了一个mysql服务.结合所有缓存,mysql整体使用的缓存可以是物理内存的80%
6)关闭dns反查功能:
skip-name-resolve #该选项就能禁用DNS 解析,连接速度会快很多。不过,这样的话就不能在MySQL 的授权表中使用主机名了而只能用ip 格式。
6.sql语句优化:
1)建表:
表结构合理,不要太大,类型精确.
2)索引:
建立合适的索引.
3)查询:
减少逻辑运算,精确查询(不要查询不需要的数据).
适当的将多个小查询合并为一个大的查询.
适当的将某些过于复杂的查询拆解成多个小查询,和刚才的相反.
4)事务:
减小事务包的大小.
5)存储过程:
适当的建立并优化存储过程