1.硬件优化
a.CPU,2-8颗
b.mem 90G-128G.3-4个实例,32G-64G-跑两个实例
c.disk 数量越多越好。性能>ssd >sas >sata
RAID 4块盘 RAID0>RAID10>RAID5>RAID1
d。网卡,多块网卡bond,及buffer,tcp优化
2.软件优化
操作系统:x86_64系统
软件:mysql编译优化
3.my.cnf参数优化
优化幅度很小,大部分架构以及SQL语句优化
命令监控:show global status\G
工具:mysqlreport (mysql性能调优工具)
4.SQL语句优化
a.索引优化
1)抓出慢SQL,配置my.cnf(百度做法为白名单,项目开发,DBA参与,减少上线后的慢SQL数量)
long_query_time = 2
log-slow-queries=/data/3306/slow-log.log
按天轮询
2) 慢查询日志分析工具(推荐mysqlsla)
(mysqldumpslow,mysqlsla,myprofi,mysql-explain-slow-log,mysqllogfilter)
3)每天晚上0点定时分析慢查询,发到核心开发,DBA分析,及高级运维,CTO的邮箱。
DBA分析给出优化建议---核心开发确认更改---DBA线上处理。
b.大的复杂的SQL语句拆分成多个小的SQL语句
子查询,JOIN连表查询,
c.数据库是存储的地方,但不是计算数据的地方。
对数据计算,应用类处理,都要拿到前端应用解决。禁止
d.搜索功能, like %内容%,一般不要用Mysql数据库
5.架构上的优化
a.业务拆分,搜索功能, like %内容%,一般不要用Mysql数据库
b.动态的数据静态化。整个文件静态花,页面片段静态化
c.某些应用使用nosql持久化存储,例如:memcahcedb,redis,ttserver.
d.数据库前端必须加cache. 例如:memcached,用户登陆,商品查询。
e.数据库集群与读写分离。一主多从。通过程序或者dbproxy进行集群读写分离。
f.单表超2000万。拆库,拆表。(登陆/商品/订单)
6.流程,制度,安全优化
任何一次人为数据库人更新,都要走一个流程:
a.人的流程:开发---核心开发---运维或DBA
b.测试流程:内网测试---IDC测试---线上执行
c.客户端管理:phpmyadmin
停留在世界边缘,与之惜别