一个兼职DBA的数据库运维经验 小米科技  xx@xiaomi.com 2011

内存扩容 16G-》64G ,调大bp后,凌晨说监控物理内存有余量情况下,开吃swap,内存泄露
措施1  定时 echo 1 >/proc/sys/vm/drop_caches  页面缓存
措施2 下次mysql实例重启期间,numactl --interleave=all  mysqld &  启动mysql时候关闭numa特性

ulimit允许core
ulimit -c  最大的core文件大小,以block为单位  ulimit -c unlimited 对生成core文件大小不进行限制

需要深入了解OS底层才能运维好上层应用

报警监控系统粒度太大,不好用(我们公司现状)
数据库状况:十个服务器,惠普HP380G7 戴尔R710 ,都做了主从
全部sas盘 15K RAID10
服务器内存24G
数据库跟业务混用,不是专门给数据库用 导致出问题(我们公司现状)
备份用的xtrabackup

数据库不大:160G 70G 30G
程序支持分库分表(未做到)

--------------------------
问题

io util% 100%(学)
正常io util%应该稳定在20%~30%

磁盘await/svctm值高,经常在毫秒级(学)
问题:

raid卡电池无电(学)
买电池后,io util% 降到10%,await/svctm值在0.x毫秒级

数据数据和binlog文件分到不同磁盘(未做到)

kernel io deadline调度算法
内存 swappiness=0,即使swappiness=0 也有可能使用swap(学)
重视dmesg(学)

架构优化后,qps稳定在1500~2000

源码编译mysql

权限最小化,只分配CRUD权限(已经做到)

内存扩容16G->64G ,调大bp后,凌晨监控内存有余量情况下,开吃swap
解决方法1:定时 echo 1> /proc/sys/vm/drop_caches (学)
解决方法2:下次mysql实例重启期间,numactl --interleave=all  mysqld &  启动mysql时候关闭numa特性 (学)

执行计划不好,就直接force index

我们公司现状

报警监控系统粒度太大,不好用
数据库跟业务混用,不是专门给数据库用 导致出问题

io util% 100%
磁盘await/svctm值高,经常在毫秒级
raid卡电池无电
内存 swappiness=0
重视dmesg
解决方法1:定时 echo 1> /proc/sys/vm/drop_caches
解决方法2:下次实例重启期间,numactl --interleave=all  mysqld &  启动mysql时候关闭numa特性

做到

权限最小化,只分配CRUD权限

未做到

程序支持分库分表
数据数据和binlog文件分到不同磁盘

linux swap空间的swappiness=0
http://blog.csdn.net/wulantian/article/details/36184943

linux会使用硬盘的一部分做为SWAP分区,用来进行进程调度--进程是正在运行的程序--把当前不用的进程调成‘等待(standby)‘,甚至‘睡眠(sleep)’,一旦要用,再调成‘活动(active)’,睡眠的进程就躺到SWAP分区睡大觉,把内存空出来让给‘活动’的进程。
  如果内存够大,应当告诉 linux 不必太多的使用 SWAP 分区, 可以通过修改 swappiness 的数值。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
  在linux里面,默认设置swappiness这个值等于60。

  
  现在一般1个G的内存可修改为10, 2个G的可改为5, 甚至是0。具体这样做:
  1.查看你的系统里面的swappiness
  $ cat /proc/sys/vm/swappiness
  不出意外的话,你应该看到是 60
  2.修改swappiness值为10
  $ sudo sysctl vm.swappiness=10
  但是这只是临时性的修改,在你重启系统后会恢复默认的60,为长治久安,还要更进一步:
  $ sudo gedit /etc/sysctl.conf
  在这个文档的最后加上这样一行:
  vm.swappiness=10
  然后保存,重启。ok,你的设置就生效了。

值为0、1、60、100时的效果
0 Linux3.5或以上,宁愿用OOM Killer也不用swap
Linux3.4或之前,宁愿用swap也不用OOM Killer
1 Linux3.5或以上,宁愿用swap也不用OOM Killer
60 默认值
100 操作系统主动使用swap

redis开发与运维

Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches
--http://www.linuxidc.com/Linux/2010-03/24939.htm

频繁的文件访问会导致系统的Cache使用量大增

$ free -m
total used free shared buffers cached
Mem: 3955 3926 28 0 55 3459
-/+ buffers/cache: 411 3544
Swap: 5726 0 5726

free内存减少到几十兆,系统运行缓慢

运行sync将dirty的内容写回硬盘
$sync

通过修改proc系统的drop_caches清理free的cache
$echo 3 > /proc/sys/vm/drop_caches

drop_caches的详细文档如下:
Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.
To free pagecache:
* echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
* echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
* echo 3 > /proc/sys/vm/drop_caches
As this is a non-destructive operation, and dirty objects are notfreeable, the user should run "sync" first in order to make sure allcached objects are freed.
This tunable was added in 2.6.16.

修改/etc/sysctl.conf 添加如下选项后就不会内存持续增加
vm.dirty_ratio = 1
vm.dirty_background_ratio=1
vm.dirty_writeback_centisecs=2
vm.dirty_expire_centisecs=3
vm.drop_caches=3
vm.swappiness =100
vm.vfs_cache_pressure=163
vm.overcommit_memory=2
vm.lowmem_reserve_ratio=32 32 8
kern.maxvnodes=3

上面的设置比较粗暴,使cache的作用基本无法发挥。需要根据机器的状况进行适当的调节寻找最佳的折衷。

清理linux内存cache
--http://blog.chinaunix.net/uid-25505925-id-180921.html

在使用grep从很多文件中搜索特定数据串的时候,发现内存使用迅速提高,主要是cache的使用占用了相当多的内存。在使用下面命令的时候忽视了文件的数量和文件大小,导致cache突增。
 
# grep -e "dst_string" ./*
     大家在使用shell编程的时候一定要注意通配符的使用,这里尤其提醒大家就是星号(*)的使用,星号固然方便,但要适度使用。
 
      这里主要还是记录如何手动清理linux内存cache,因为上面的操作使用的大量的cache。
 
1、使用free查看一下当前内存使用情况:
 
# free
             total used free shared buffers cached
Mem: 16621896 8967952 7653944 0 212352 8377276
-/+ buffers/cache: 378324 16243572
Swap: 10241428 0 10241428
2、执行sync同步数据
 
# sync
      该命令将未写的系统缓冲区写到磁盘中。包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。
 
3、清理cache
 
# echo 3 > /proc/sys/vm/drop_caches
# free
             total used free shared buffers cached
Mem: 16621896 579592 16042304 0 268 308708
-/+ buffers/cache: 270616 16351280
Swap: 10241428 0 10241428
4、对比一下加粗部分就清楚了,cache被清理掉了。
 
参考资料:
http://www.linuxidc.com/Linux/2010-03/24939.htm
http://han19838383.blog.163.com/blog/static/54316486201101032825333/
 
5、drop_cache的详细文档如下,以便查阅(摘自:http://www.linuxidc.com/Linux/2010-03/24939.htm)
 
Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.
To free pagecache:
* echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
* echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
* echo 3 > /proc/sys/vm/drop_caches
As this is a non-destructive operation, and dirty objects are notfreeable, the user should run "sync" first in order to make sure allcached objects are freed.
This tunable was added in 2.6.16.

f

f

f

f

f

f

f

f

f

f

f


f

f

f

f

f

f

f

f

f

f


我先来解释一下这三个步骤的作用:
第一步,使用free命令查看内存,这其实没有什么实际作用,就是做个前后对比;
第二步,执行sync命令,是为了确保文件系统的完整性(sync命令将所有未写的系统缓存写到磁盘中);
第三步,执行echo 3 > /proc/sys/vm/drop_caches就开始释放内存了。

这里说明一下/proc/sys/vm/drop_caches的作用:
当写入1时,释放页面缓存     #无任何危害
写入2时,释放目录文件和inodes
写入3时,释放页面缓存、目录文件和inodes            #缓存目录文件和inodes的目的跟B树缓存根节点和中间节点的原理一样,快速查找叶子节点,快速根据内存中的inode找到data block

# free -m
             total       used       free     shared    buffers     cached
Mem:           996        925         71          9        187        252
-/+ buffers/cache:        484        511
Swap:         2047        400       1647

http://www.ibm.com/developerworks/cn/linux/l-cache/

f

MySQL工作故障运行中的MySQL被drop cache导致丢数据的案例
http://www.pro-mysql.com/2016/03/11/%E8%BF%90%E8%A1%8C%E4%B8%AD%E7%9A%84mysql%E8%A2%ABdrop-cache%E5%AF%BC%E8%87%B4%E4%B8%A2%E6%95%B0%E6%8D%AE%E7%9A%84%E6%A1%88%E4%BE%8B/

生产环境,一天回来,MySQL中丢了一些数据,咨询发现做了以下操作

echo 3 > /proc/sys/vm/drop_caches

具体看文档,最怕乱来的人
/proc/sys/vm/drop_caches (since Linux 2.6.16)
Writing to this file causes the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.
To free pagecache, use echo 1 > /proc/sys/vm/drop_caches; to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches; to free pagecache, dentries and inodes, use echo 3 > /proc/sys/vm/drop_caches.
Because this is a non-destructive  非破坏性操作operation and dirty objects 脏对象不会释放 are not freeable, the user should run sync first 用户必须要先执行sync命令.

sync
echo > /proc/sys/vm/drop_caches
swapoff -a
swapon -a

可以cat一下/proc/sys/vm/drop_caches,看一下之前是否有人改过/proc/sys/vm/drop_caches,在/etc/sysctl.conf或者手动echo 3 >  /proc/sys/vm/drop_caches

cat /proc/sys/vm/drop_caches

f

f

f

f

f

f

一个兼职DBA的数据库运维经验 小米科技 xx@xiaomi.com 2011的更多相关文章

  1. 美图秀秀DBA谈MySQL运维及优化

    美图秀秀DBA谈MySQL运维及优化 https://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEwNg==&mid=401797597&idx=2& ...

  2. MySQL数据库运维的五大指标

    如何评价一个公司数据库运维水平的高低?用什么来进行横向与纵向对比?自动化平台建设的目标是什么?必须有相应的指标体系来指导,此指标体系必须满足以下条件: • 可以用数字来测算和衡量 • 最终指标,而不是 ...

  3. JStorm开发经验+运维经验总结

    1.开发经验总结  ——12 Sep 2014 · 8 revisions 在jstorm中, spout中nextTuple和ack/fail运行在不同的线程中, 从而鼓励用户在nextTuple里 ...

  4. 数栈运维实例:Oracle数据库运维场景下,智能运维如何落地生根?

    从马车到汽车是为了提升运输效率,而随着时代的发展,如今我们又希望用自动驾驶把驾驶员从开车这项体力劳动中解放出来,增加运行效率,同时也可减少交通事故发生率,这也是企业对于智能运维的诉求. 从人工运维到自 ...

  5. 循序渐进DB2(第2版)——DBA系统管理、运维与应用案例

    <循序渐进DB2(第2版)——DBA系统管理.运维与应用案例> 基本信息 作者: 牛新庄    出版社:清华大学出版社 ISBN:9787302323013 上架时间:2013-7-3 出 ...

  6. Oracle数据库运维优化六脉神剑口诀

    我们知道数据库性能是数据库运维中至关重要的一个部分,据传在Oracle数据库的江湖中也有威力无比的六脉神剑技能,下面与大家免费分享Oracle大师们广为流传的六脉神剑口诀,一般人我不告诉他哦:) 少商 ...

  7. MySQL数据库运维课程

    MySQL数据库运维课程 http://www.dataguru.cn/article-4834-1.html?union_site=comm100 课程大纲 第一课:机器选型.系统规划 第二课:安装 ...

  8. ZooKeeper 运维经验

    转自:http://www.juvenxu.com/2015/03/20/experiences-on-zookeeper-ops/ ZooKeeper 运维经验 ZooKeeper 是分布式环境下非 ...

  9. Elasticsearch运维经验总结

    Elasticsearch运维经验总结 2018年12月10日 16:38:41 运小白 阅读数 3811   版本说明:5.6.4(要严格注意ES及其插件.第三方工具的版本匹配关系) 系统负载:(日 ...

随机推荐

  1. C#设计模式系列:抽象工厂模式(AbstractFactory)

    出自:http://www.cnblogs.com/libingql/archive/2012/12/09/2809754.html 1. 抽象工厂模式简介 1.1 定义 抽象工厂(Abstract ...

  2. 5、Cocos2dx 3.0游戏开发找小三之測试例子简单介绍及小结

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27186557 測试例子简单介绍 Cocos2d-x ...

  3. opencv-从图像旋转学习Mat数据訪问

    先看一个简单的样例 代码: // ConsoleApplication3_6_23.cpp : Defines the entry point for the console application. ...

  4. Int 型数值存储

    1. Int 在计算机中占 4 Byte, 共 32 位, 最大正数为 2147483647, 最小负数为 -2147483648 2. 正数存储在计算机中的形式为原码,最大正数的十六进制形式为 0X ...

  5. ios UIButton得 几种触发方式

    在控件事件中,简单解释下下面几个事件.说明:由于是在“iOS 模拟器”中测试的,所以不能用手指,只能用鼠标.1)UIControlEventTouchDown指鼠标左键按下(注:只是“按下”)的动作2 ...

  6. zookeeper-端口说明

    一.zookeeper有三个端口(可以修改) 1.2181 2.3888 3.2888 二.3个端口的作用 1.2181:对cline端提供服务 2.3888:选举leader使用 3.2888:集群 ...

  7. 上传文件提示IO Error

    百度查到的解决办法 http://www.wang0214.com/news/466.html 作者:深圳网站建设 原因: Asp.net中,上传文件的默认大小是4096 KB,也就是4M,不过你可以 ...

  8. 如何搭建本地WordPress

    今天就来介绍一下如何在Windows下搭建本地WordPress. 安装前准备 1.正常的电脑 2.PHPNow  http://www.phpnow.org 这里面的PHPNow环境包其实包含了常见 ...

  9. LeetCode——Single Number II

    Description: Given an array of integers, every element appears three times except for one. Find that ...

  10. struts2的核心和工作原理 <转>

    在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计.在这儿MVC模式的好处就 ...