暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第十二章 优化(一)

蜜蜂点滴 2020-06-23
209

〇、优化

优化是有风险的,不要轻易优化;

谁参与优化:研发,DBA等;

优化的大方向:

安全

性能

转:https://www.jianshu.com/p/5dbb5e095c9a

一、优化的范围及思路

优化的范围:

1、运行平台:存储,主机和操作系统

    主机架构稳定性

    I/O规划及配置

    Swap

    OS内核参数

        网络问题

2、应用程序:(Index,lock,session)

        应用程序稳定性和性能

        SQL语句性能

    串行访问资源

    性能欠佳会话管理

3、数据库优化:(内存、数据库设计、参数)

    内存

    数据库结构(物理&逻辑)

    实例配置

二、优化工具

1、操作系统层优化工具介绍

cpu IO MEM

(1)top:

%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

KiB Mem :   995896 total,   815644 free,    69064 used,   111188 buff/cache

KiB Swap:  1048572 total,  1048572 free,        0 used.   785516 avail Mem 

①id:空闲的CPU时间片占比

②wa:CPU用来等待的时间片占比

等待IO,全表扫描;等待大的事件,等待锁。

③us:用户程序工作所占用的时间片占比

④sy:内核工作花费CPU时间片占比

bug,中病毒,高并发连接,锁。

⑤KiB Mem :

⑥KiB Swap:建议不要使用

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)iostat

#dd if=/dev/zero of=/tmp/bigfile bs=1M count=4096

实时监控:

iostat -dm 1

如果没有iostat命令请安装:

yum install -y sysstat

一般情况下,cpu高,IO也应该高。

如果,CPU高,IO比较低:

wait高,IO出问题了(raid问题,过度条带化);

sys高,有可能是锁的问题,需要进一步去数据库中判断。

(3)vmstat

#vmstat 1

2、数据库优化工具

 show status  

    show variables 

    show index  

    show processlist 

    show slave status

    show engine innodb status 

    desc /explain 

        slowlog

    扩展类深度优化:

    pt系列(pt-query-digest pt-osc pt-index等)

    mysqlslap 

    sysbench 

    information_schema 

    performance_schema

    sys

三、优化思路分解

1、硬件优化

(1)主机:

真实的硬件(PC Server): DELL  R系列 ,华为,浪潮,HP,联想

云产品:ECS、数据库RDS、DRDS

IBM 小型机 P6  570  595   P7 720  750 780     P8 

(2)CPU根据数据库类型

OLTP :在线事务处理;

OLAP :查询类,仓库管理;

IO密集型:线上系统,OLTP主要是IO密集型的业务,高并发,增删改业务;

CPU密集型:数据分析数据处理,OLAP,cpu密集型的,需要CPU高计算能力(i系列,IBM power系列),报表分析,高计算能力;

CPU密集型:I 系列的,主频很高,核心少 

IO密集型:  E系列(至强),主频相对低,核心数量多

(3)内存

建议2-3倍cpu核心数量 (ECC)

(4)磁盘选择

SATA-III   SAS    Fc    SSD(sata) pci-e ssd  Flash

主机 RAID卡的BBU(Battery Backup Unit)关闭,主机备用电源。

(5)存储

根据存储数据种类的不同,选择不同的存储设备

配置合理的RAID级别(raid5、raid10、热备盘)   

r0 :条带化 ,性能高

r1 :镜像,安全

r5 :校验+条带化,安全较高+性能较高(读),写性能较低 (适合于读多写少)

r10:安全+性能都很高,最少四块盘,浪费一半的空间(高IO要求)

(6)网络

硬件买好的(单卡单口)

网卡绑定(bonding技术),交换机堆叠

以上问题,提前规避掉。

bonding技术:防止网卡,链路端口,高可用,主备模式比较常用,轮询负载均衡模式。

2、操作系统优化

(1)Swap调整

echo 0 >/proc/sys/vm/swappiness的内容改成0(临时),

/etc/sysctl.conf

上添加vm.swappiness=0(永久)

sysctl -p

    这个参数决定了Linux是倾向于使用swap,还是倾向于释放文件系统cache。在内存紧张的情况下,数值越低越倾向于释放文件系统cache。

当然,这个参数只能减少使用swap的概率,并不能避免Linux使用swap。

    修改MySQL的配置参数innodb_flush_method,开启O_DIRECT模式

这种情况下,InnoDB的buffer pool会直接绕过文件系统cache来访问磁盘,但是redo log依旧会使用文件系统cache。值得注意的是,Redo log是覆写模式的,即使使用了文件系统的cache,也不会占用太多

(2)IO调度策略

①deadline

centos 7 默认是deadline,不需要调整;

#cat /sys/block/sda/queue/scheduler

centos6临时修改为deadline:

#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:不要使用LVM逻辑卷管理;

    ext4或xfs

    ssd

    IO调度策略

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

3、应用端

①开发过程规范,标准

②减少烂SQL:不走索引,复杂逻辑,切割大事务.

③避免业务逻辑错误,避免锁争用.

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

优化,最根本的是"优化"人。

文章转载自蜜蜂点滴,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论