MySQL数据库多种优化方案

硬件优化(物理机)

  • CPU 8~16颗CPU ,2~4颗
  • mem 96G~128G,3~4个实例。 32~64G内存,2个实例
  • disk 数量越多越好,性能上:SSD (高并发)> SAS(普通) > sata (线下)
    • 4块盘为例:RAID0 > RAID10 > RAID5> RAID1
  • 网卡,多块网卡bond,buffer等等。内核调优能够处理

软件优化

  • 操做系统:x64,
  • 软件:mysql ,编译安装,编译优化。

my.cf参数优化(优化的幅度比较小,大部分是架构及SQL语句优化)

  • 参考:
  • 监控:生产参数是通常状况下的参数
  • 命令监控:show global status\G 而后能够看到每一个参数用了多少,每一个缓存用了多大。经过监控慢慢调整。
  • 调优工具:mysqlreport **,**还有其余的工具

SQL语句的优化

a、索引的优化html

  • 抓出慢SQL。让DBA尽可能早的参与的开发里面和开发共同讨论。白名单机制
long_query_time= #
log-slow-queries= /vra/lib/mysql/slow-log
复制代码
  • 慢查询日志分析工具 -- mysqlsla ,
pt-query-digest.,mysqldumpslows,
复制代码
  • 天天晚上0:00定时分析慢查询,发到核心开发,DBA分析,及高级运维,CTO邮箱。
  • DBA分析给出优化建议--> 核心开发确认更改--->DBA上线操做。

b、大的复杂的SQL语句的拆分为多个小的SQL语句前端

  • 子查询,JOIN连表查询。一张表数据太大,怎么拆分都有问题。须要拆表,拆库

c、数据库是存储数据的地方,可是不是计算数据的地方。mysql

  • 计算,应用类处理,都要拿到前端应用解决,禁止在数据库上处理。

d、搜索功能,like "%51cto%" ,通常不要使用MySQL数据库。linux

架构上的优化

  • 业务拆分: 搜索功能,like"%51cto%" ,通常不要使用MySQL数据库。redis

    • 业务拆分:某些业务应用使用nosql持久化分出,例如:memcachedb.redis,ttserver.
    • 例如:粉丝关注,好友关系等等。
  • 数据库前端必需要加cache,例如:memcached,用户登陆,商品查询等等。sql

  • 动态的数据静态化,整个文件静态化,页面片断静态化数据库

  • 数据库集群与读写分离,一主多从,经过程序或者dbproxy进行集群读写分离。缓存

  • 单表查过2000万了,拆库拆表,不一样的请求分到不一样的机器上面,前面hash取模。安全

流程,制度,安全优化。

  • 任何一次认为数据库记录的更新都要走一个流程:
  • 人的流程:开发 --> 核心开发确认 --> 运维或DBA
  • 测试的流程:开发人员内网测试 --> IDC测试 --> 线上执行。
  • 客户端的管理,客户端PHPmyadmin。客户端访问控制。防患于未然

以上摘自老男孩视频bash

最后

这是我在15年学习MySQL的笔记。

相关文章
相关标签/搜索