一个兼职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. hadoop基础学习---数据管理策略

    上图中的ABCDE都代表默认大小64M的数据块 nameNode与dataNode之间有一个心跳机制,datanode每隔多秒钟定期的发送心跳到nameNode

  2. ADO连接数据库【msado15.dll】

    Microsoft ActiveX Data Objects (ADO) 注册表查看ADO版本:HKEY_LOCAL_MACHINE\Software\Microsoft\DataAccess下有Ve ...

  3. RedisTemplate实现事物问题剖析和解决

    一.问题描述 Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,Redis对事物支持不会很复杂,当一个客服端连接Redis服务时,发出了MULTI命令时,这个连接会进入事物,在执行MU ...

  4. web开发中的安全问题

    web开发中很多东西由前段来负责判断,比如常见的邮箱 电话号码,前端判断到不是一个正确的格式,在你点击提交时候提示你格式填错了,然后不请求后端php,直到你填写正确的格式为止.这种其实可以修改js或者 ...

  5. 制作ramdisk-u.img根文件系统

    具体步骤如下:1.解压内核源码树解压linux-2.6.29-mini2440-20090708.tgz到自己的工作目录,会生成一个友善之臂修改过的并且有几个mini2440默认配置文件的内核源码目录 ...

  6. 关于 MVVMLight 设计模式系列

    MVVM设计模式你可以在WPF.Silverlight.Windows Phone开发中使用,我想至今已经有非常非常多的朋友正在使用MVVM设计模式,尤其是MVVMLight . 本系列文章以WPF举 ...

  7. Don‘t talk.Just do it.

    对于算法,自己掌握的还是不多.并且我发现对于一个算法的理解非常重要.也许你会发现你貌似会用某总算法但是,他一旦变形,自己就无从下手. 还有就是对于算法.最好每次都自己敲,这样不仅能添加对于算法的熟度. ...

  8. JAVA语言基础内部测试题(50道选择题)

    JAVA语言基础内部测试题 选择题(针对以下题目,请选择最符合题目要求的答案,针对每一道题目,所有答案都选对,则该题得分,所选答案错误或不能选出所有答案,则该题不得分.)(每题2分) 没有注明选择几项 ...

  9. Nginx 链接

    Nginx反向代理以及负载均衡配置:http://www.cnblogs.com/Miss-mickey/p/6734831.html

  10. c++11实现l延迟调用(惰性求值)

    惰性求值 惰性求值一般用于函数式编程语言中,在使用延迟求值的时候,表达式不在它被绑定到变量之后就立即求值,而是在后面的某个时候求值.     可以利用c++11中的std::function, lam ...