全面优化

MySQL全面优化

1.优化哲学

1.1 为什么优化?

为了获得成就感?
为了证实比系统设计者更懂数据库?
为了从优化成果来证实优化者更有价值?

但通常事实证实的结果往往会和您期待相反!
优化有风险,涉足需谨慎!

1.2 优化风险

优化不总是对一个单纯的环境进行!还很可能是一个复杂的已投产的系统。
优化手段本来就有很大的风险,只不过你没能力意识到和预见到!
任何的技术可以解决一个问题,但必然存在带来一个问题的风险!
对于优化来说解决问题而带来的问题控制在可接受的范围内才是有成果。
保持现状或出现更差的情况都是失败!

稳定性和业务可持续性通常比性能更重要!
优化不可避免涉及到变更,变更就有风险!
优化使性能变好,维持和变差是等概率事件!
优化不能只是数据库管理员担当风险,但会所有的人分享优化成果!
所以优化工作是由业务需要驱使的!!!

1.3 谁参与优化

数据库管理员
业务部门代表
应用程序架构师
应用程序设计人员
应用程序开发人员
硬件及系统管理员
存储管理员

1.4 优化方向

安全优化(业务持续性)
性能优化(业务高效性)

1.5 优化的范围及思路

优化范围:
存储、主机和操作系统:
    主机架构稳定性
    I/O规划及配置
    Swap
    OS内核参数
        网络问题
应用程序:(Index,lock,session)
        应用程序稳定性和性能
        SQL语句性能
    串行访问资源
    性能欠佳会话管理
数据库优化:(内存、数据库设计、参数)
    内存
    数据库结构(物理&逻辑)
    实例配置
优化效果和成本的评估:

2. 优化工具的使用

2.1 系统层面的

2.1.1 CPU
top  
top -H
top -H -p pid
top -H -p 9618

CPU使用情况:
%Cpu(s):  
0.1 us    : 用户进程占用CPU时间占比
我们觉得越高越好,不要满负荷

0.2 sy    : 系统本身和内核工作CPU时间占比
资源管理,维护,分配,回收等等.

并发连接过高 .
锁争用
99.8 id   : 空闲

0.0 wa    : 等待时CPU时间占比
IO吞吐 有问题   : 硬件,链路,RAID 
IO/PS  峰值     :   大量随机IO ,索引设计不合理,多表连接优化不到位,大量子查询,大事务.  
锁争用
2.1.2 MEM
KiB Mem :  4028432 total,  3774464 free,   116240 used,   137728 buff/cache
1.2.1 名称介绍
total :总内存大小
free  :空闲的
used  :在使用的
buff/cache :缓冲区 和 缓存
2.1.3 内存管理子系统:
slab Allocator
buddy system 
程序=指令+数据
对于page cache来讲(OS buffer)
1. 内存的可用空间的计算   free +buffer cache 
2. 内存回收(buffer)的方式:
        (1) 写入磁盘
        (2) swap  
对于数据库来讲:需要将swap屏蔽掉
2.1.4 swap
KiB Swap:  2097148 total,  2097148 free,        0 used.  3701464 avail Mem 
Linux 6操作系统,默认回收策略(buffer cache),不立即回收策略
内存使用达到100%-60%时候,40% 会使用swap
Linux 7操作系统
内存使用达到100%-30%(70%)时候,才会时候swap
cat /proc/sys/vm/swappiness 
30  
echo 0 >/proc/sys/vm/swappiness    的内容改成0(临时)
vim /etc/sysctl.conf
添加:
vm.swappiness=0
sysctl -p 

2.2. iostat 命令

dd if=/dev/zero of=/tmp/bigfile bs=1M count=4096
iostat -dm 1
现象说明

1. IO 高 cpu us 也高,属于正常现象
2. CPU  us高  IO很低  ,MySQL 不在做增删改查,有可能是存储过程,函数,排序,分组,多表连接
3. Wait,SYS 高  , IO低:  IO出问题了,锁等待过多的几率比较大. 
IOPS:每秒磁盘最多能够发生的IO次数,这是个定值 
频繁小事务,IOPS很高,达到阈值,可能IO吞吐量没超过IO最大吞吐量.无法新的IO了
存储规划有问题.

2.3 数据库优化工具

    show status  
    show variables 
    show index  
    show processlist 
    show slave status
    show engine innodb status 
    desc /explain 
    slowlog
        
    扩展类深度优化:
    pt系列
    mysqlslap 
    sysbench 
    information_schema 
    performance_schema
    sys

3. 优化思路分解

3.1 硬件优化

3.1.1 主机
(1) 真实的硬件(PC Server): 
    DELL  R系列 ,华为,浪潮,HP,联想 ,曙光
        
(2)云产品:
    ECS、
    数据库RDS、DRDS\Polardb  , TDSQL

(3) IBM 小型机: 
 P6  570  595  
 P7 720  750 780     
 P8 
3.1.2 CPU根据数据库类型
OLTP  在线事务处理系统.
OLAP  数据分析,处理 

IO密集型:线上系统,OLTP主要是IO密集型的业务,高并发
CPU密集型:数据分析数据处理,OLAP,cpu密集型的,需要CPU高计算能力(i系列,IBM power系列)

CPU密集型: I 系列的,主频很高,核心少 
IO密集型:  E系列(至强),主频相对低,核心数量多
3.1.3 内存
建议2-8倍cpu核心数量 (ECC)
3.1.4 磁盘选择
SATA-III   SAS    Fc    SSD(sata) pci-e  ssd  Flash
主机 RAID卡的BBU(Battery Backup Unit)关闭
3.1.3 存储设备
根据存储数据种类的不同,选择不同的存储设备
配置合理的RAID级别(raid5、raid10、热备盘)   
r0 :条带化 ,性能高
r1 :镜像,安全
r5 :校验+条带化,安全较高+性能较高(读),写性能较低 (适合于读多写少)
r10:安全+性能都很高,最少四块盘,浪费一半的空间(高IO要求)
3.1.4 网络
1、硬件买好的(单卡单口)
2、网卡绑定(bonding),交换机堆叠
以上问题,提前规避掉。

3.2 操作系统优化

3.2.1 Swap调整
echo 0 >/proc/sys/vm/swappiness的内容改成0(临时),
vim  /etc/sysctl.conf
上添加vm.swappiness=0(永久)
sysctl -p

扩展:内存管理

1. 三个区域 :
    常驻内存集: 程序运行服务的
    页缓存page cache: 
        FREE list 
        LRU  list
    匿名页:

2. Slab Allocator
    将 page cache 划分成了好多条链状结构.
类型一: 
    Free list(空闲的)
    ==================================================
     |    |
     o    o
    
类型二 :
    LRU list (正在被使用的)
    
    冷================================================热
      i    i 
      0    0
    
3. buddy system (内存伙伴系统)
    内存回收和重利用
    
cat /proc/sys/vm/swappiness   ====> 0

free list 上为 0;

buddy system 进行内存回收和重利用 
1. 优先释放 Cache(负责查询类的内存结构),从冷到热进行释放. 
2. Cache没法释放时,会根据buffer从冷导热,进行回收和重用内存
3. 所有可被释放 buffer 或cache,已经全部被回收重用了,还是内存紧缺的话
此时,swap还是会被使用. 


内存泄露问题:     
8G   使用率达到了 95%以上
innodb_buffer_pool_size=2G 
redo_buffer_size=256M 
其他内存总共: 1G 左右
innodb_flush_log_at_trx_commit=1
innodb_flush_method=O_DIRECT
3.2.2 IO调度策略
centos 7 默认是 deadline
cat   /sys/block/sda/queue/scheduler
cat   /sys/block/vda/queue/scheduler


# 临时修改为deadline(centos6)
echo deadline >/sys/block/sda/queue/scheduler 
vi /boot/grub/grub.conf

更改到如下内容:
kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quiet


IO :
    raid
    no lvm
    ext4或xfs
    ssd
    IO调度策略

提前规划好以上所有问题,减轻MySQL优化的难度。

3.3 应用层

1. 开发过程规范,标准
2. 减少慢SQL:不走索引,复杂逻辑,切割大事务.
    like '%aa%'
    != not in 
    limit >500w 
    DDL  ---> show processlist ;  ---> kill  ---> Online DDL ,pt-osc
    delete 大量数据. ----> pt-archive
    update : 索引  ,   锁.

3. 避免业务逻辑错误,避免锁争用.
    a :   update  id=10 ; update  id=100;
    b :  update   id=100; update id=10;


这个阶段,需要我们DBA深入业务,或者要和开发人员\业务人员配合实现

优化,最根本的是"优化"人.
                    ----oldguo              






©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容

  • 1. 环境准备 cpu:4 , mem:8G , mysql:5.7.26全新环境 1.1. 压力测试准备 2. ...
    新_WX阅读 501评论 0 5
  • 前言 Unity的项目优化已经是老生常谈,很多人在项目完成之后,即便创意新颖,也会觉得差强人意,原因就在于没有做详...
    欣羽馨予阅读 10,834评论 9 77
  • 优化介绍 准备一台MySQL的虚拟机环境,最好修改为4G内存,4核CPUimage 启动3306节点的 mysql...
    酷酷的伟阅读 637评论 0 0
  • 详细的MySQL优化—oldguo导师 一、优化介绍 准备一台MySQL的虚拟机环境,最好修改为4G内存,4核CP...
    Linux丶晨星阅读 538评论 0 5
  • 在知乎上看到一个问题大概是说:为什么很多人不是同性恋却要为同性恋发声呢? 其中有个回答我很喜欢: “把同性恋换成女...
    碎沫阅读 257评论 0 0