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

MySQL数据库优化

2017-06-27 09:38 169 查看
一、硬件优化(不要用虚拟机,要用物理机)

1、CPU:尽量采用64位cpu ,一台机器8-16颗cpu
2、mem(内存):一般情况下 96G-128G ,跑3-4个实例;  32G-64G ,跑2个实例
3、disk盘:数量越多越好。性能 ssd(高并发) > sas(普通业务线上) > sata(线下)
4、磁盘raid: raid10>raid5>raid1(主库用raid10,从库用raid0)
5、网卡:多块网卡做bound,以及buffer,tcp的优化


二、软件优化

操作系统:64位最好
软件:尽量采用比较新的源码包,编译优化


三、my.cnf里参数的优化

my.cnf里参数优化的幅度很小。大部分是架构和SQL调优,在这里也不过多说明
innodb_buffer_pool_size = 2048M (为物理内存的30%到50%)
sort_buffer_size = 2M
read_buffer_size = 1M
skip-name-resolve      #不加的话可能会有用户权限错误


四、SQL语句优化

1、索引优化
减少上线后的慢SQL数量,哪些数据没有走索引,首先抓出慢SQL  (建议在前期,开发、DBA首先参与进去,怎么建索引,怎么建表)
long_query_time = 2
log-slow-queries=/var/mysql/slow-log.log
按天轮询:slow-log.log

2、SQL语句的拆分(大的复杂的SQL语句拆分成多个小的SQL语句)
子查询,join连表查询,但是某个表4000万条记录,拆分就没用了。

3、数据库时存储数据的地方,但是不是计算数据的地方
对数据计算、应用类的处理,都要拿到前端应用处理,禁止在数据库上处理。

4、搜索功能,一般不要用MySQL数据库,例如:like "%186254%",因为这样的语句不走索引。


五、架构的优化

1、业务上进行拆分:搜索功能,一般不要用MySQL数据库,例如:like "%186254%"
2、数据库前端加cache,例如:memcache(用户登录,商品查询)
3、某些业务应用使用nosql持久化存储,例如redis,memcachedb
4、把动态的数据静态化,(网站发表新闻,生成html,放到缓存里面;整个文件静态化,页面片段静态化)。
5、数据库集群与读写分离,一主多从,通过程序或者dbproxy进行集群读写分离
6、单表超过两千万还慢,这时需要拆库拆表。(人工拆库拆表,前端通过hash算法进行轮询[用户登录、商品、订单])


六、流程、制度、安全优化

任何一次人为数据库记录的更新,都要走一个流程:
a.人的流程:开发核心开发运维或者DBA
b.测试流程:内网测试IDC测试线上执行
c.客户端的管理,开发用phpmyadmin。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: