一个兼职DBA的数据库运维经验 小米科技 xx@xiaomi.com 2011
一个兼职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的更多相关文章
- 美图秀秀DBA谈MySQL运维及优化
美图秀秀DBA谈MySQL运维及优化 https://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEwNg==&mid=401797597&idx=2& ...
- MySQL数据库运维的五大指标
如何评价一个公司数据库运维水平的高低?用什么来进行横向与纵向对比?自动化平台建设的目标是什么?必须有相应的指标体系来指导,此指标体系必须满足以下条件: • 可以用数字来测算和衡量 • 最终指标,而不是 ...
- JStorm开发经验+运维经验总结
1.开发经验总结 ——12 Sep 2014 · 8 revisions 在jstorm中, spout中nextTuple和ack/fail运行在不同的线程中, 从而鼓励用户在nextTuple里 ...
- 数栈运维实例:Oracle数据库运维场景下,智能运维如何落地生根?
从马车到汽车是为了提升运输效率,而随着时代的发展,如今我们又希望用自动驾驶把驾驶员从开车这项体力劳动中解放出来,增加运行效率,同时也可减少交通事故发生率,这也是企业对于智能运维的诉求. 从人工运维到自 ...
- 循序渐进DB2(第2版)——DBA系统管理、运维与应用案例
<循序渐进DB2(第2版)——DBA系统管理.运维与应用案例> 基本信息 作者: 牛新庄 出版社:清华大学出版社 ISBN:9787302323013 上架时间:2013-7-3 出 ...
- Oracle数据库运维优化六脉神剑口诀
我们知道数据库性能是数据库运维中至关重要的一个部分,据传在Oracle数据库的江湖中也有威力无比的六脉神剑技能,下面与大家免费分享Oracle大师们广为流传的六脉神剑口诀,一般人我不告诉他哦:) 少商 ...
- MySQL数据库运维课程
MySQL数据库运维课程 http://www.dataguru.cn/article-4834-1.html?union_site=comm100 课程大纲 第一课:机器选型.系统规划 第二课:安装 ...
- ZooKeeper 运维经验
转自:http://www.juvenxu.com/2015/03/20/experiences-on-zookeeper-ops/ ZooKeeper 运维经验 ZooKeeper 是分布式环境下非 ...
- Elasticsearch运维经验总结
Elasticsearch运维经验总结 2018年12月10日 16:38:41 运小白 阅读数 3811 版本说明:5.6.4(要严格注意ES及其插件.第三方工具的版本匹配关系) 系统负载:(日 ...
随机推荐
- Spark Streaming源码分析 – Checkpoint
PersistenceStreaming没有做特别的事情,DStream最终还是以其中的每个RDD作为job进行调度的,所以persistence就以RDD为单位按照原先Spark的方式去做就可以了, ...
- RabbitMQ消息确认(发送确认,接收确认)
前面几篇记录了收发消息的demo,今天记录下关于 消息确认方面的 问题. 下面是几个问题: 1.为什么要进行消息确认? 2.rabbitmq消息确认 机制是什么样的? 3.发送方如何确认消息发送成功? ...
- JQuery--使用autocomplete控件进行自己主动输入完毕(相当于模糊查询)
之前为了实现这个功能花了我几天的时间. 事实上.实现了之后发现也就那么回事,正所谓万事开头难嘛.. 废话不多说了.这里我使用的是JQuery控件库中的一个Autocomplete控件.即Autocom ...
- Python 爬虫知识点 - XPath
http://cuiqingcai.com/2621.html 一.基础介绍 <bookstore> <book> <title>Harry Potter</ ...
- 第二篇:一个经典的比喻( 关于TCP连接API )
前言 编程是对现实世界的模拟,网络通信自然也是对现实世界通信的模拟.可以将网络通信中使用的各种API和对现实世界中的各种通信设备进行通讯的操作进行对比以加深理解. 对比 socket() 函数 vs ...
- js jquery获取当前元素的兄弟级 上一个 下一个元素 jquery如何获取第一个或最后一个子元素
var chils= s.childNodes; //得到s的全部子节点 var par=s.parentNode; //得到s的父节点 var ns=s.nextSbiling; //获得 ...
- Docker源码分析(八):Docker Container网络(下)
1.Docker Client配置容器网络模式 Docker目前支持4种网络模式,分别是bridge.host.container.none,Docker开发者可以根据自己的需求来确定最适合自己应用场 ...
- codevs 5966 [SDOI2017]硬币游戏
输入描述 Input Description 输入输出数据精度为1e-10 [题解] #include<cstdio> using namespace std; ; char s[N][N ...
- String() 函数把对象的值转换为字符串。
var test1 = new Boolean(1);var test2 = new Boolean(0);var test3 = new Boolean(true);var test4 = new ...
- C# 验证码生成
后台: //生成验证码 public void CreateImage() { //获取4位验证码,并转成小写. ).ToLower(); //验证码赋值Cookie HttpCookie myCoo ...