mysql数据库优化
1.硬件优化
a.64位cpu 一台机器8-16颗cpu,(其他)2-4颗
b.内存 96-128g 3-4个实例(百度),(其他)32-64,2个实例
c.硬盘,数量越多越好,性能:ssd(高并发)>sas(普通线 上)>sata(线下)
raid 4块盘:RAID0>RAID10>RAID5>RAID1
d.网卡 多块网卡bond,以及buffer,tcp优化
2.软件优化
操作系统:64位
软件:mysql 编译优化
3.参数优化(my.cnf)
my.cnf优化的幅度很小,大部分是架构和sql语句的调优
innodb_buffer_pool_size=2048m物理内存的30%-50%
sort_buffer_size=2m 线程buffer,不能给太大
tmp_table_size=256m 临时表
long_query_time=2 slow_log,超过两秒的
skip-name-resolve 不加会遇到权限问题
思想:
监控:show global status\G查看命中率
调优工具:mysqlreport
4.sql语句的优化
a.索引优化
抓出慢sql,配置my.cnf(大于2s的,没走索引的记录下来)
long-slow-query=/data/3306/slow-log.log
慢查询日志分析工具:mysqldumpslow,mysqlsla,myprofi
按天轮询:slow-log.log
b.每天晚上0点定时分析慢查询,发到核心开发,DBA的邮箱
c.大的复杂的sql语句拆分成多个小的sql语句
子查询,JOIN链表查询,某个表4000万条记录
d.数据库是存储数据的地方,但不是计算的地方,拿到前端应用解决
e.搜索功能,LIKE'%老男孩%'一般不要用mysql数据库
5.架构优化
1.业务拆分
2.数据库前端加cache,例如:memcache(用户登录,商品查询等等)
3.某些业务应用使用nosql持久化存储,例如:memcachedb,redis(粉丝,关注,好友关系等等)
4.动态的数据静态化。整个文件静态化,页面片段静态化
5.数据库集群与读写分离。一主多从。通过程序或者dbproxy进行集群读写分离
6.单表超过2000万。拆库拆表
6.流程,制度,安全优化
任何一次人为数据库记录的更新,都要走一个流程:
a.人的流程:开发-->核心开发-->运维或DBA(确认)
b.测试流程:内网测试-->IDC测试-->线上执行
c.客户端管理,phpmyadmin