前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >让你快速乘风破浪的 成为专业dba

让你快速乘风破浪的 成为专业dba

作者头像
怀朔
发布于 2022-05-25 06:08:37
发布于 2022-05-25 06:08:37
27700
代码可运行
举报
文章被收录于专栏:运维入门时间运维入门时间
运行总次数:0
代码可运行

1

mysql

1、实例CPU使用率过高

a、通过命令行,或者sql平台登录数据库执行如下sql:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select /*gtt*/  count(*) '并发数',max(time)'最长执行时间',concat(SUBSTR(REPLACE(REPLACE(REPLACE(info, CHAR(10), ''), CHAR(13), ''),'  ',' ' )FROM 1 FOR 30),'||', REPLACE(REPLACE(substr(info,LOCATE('from',info)+4,30), CHAR(10), ''), CHAR(13), ''))  'sql格式化展示'  from information_schema.PROCESSLIST where info is not null  and id not in( select connection_id() )  group by concat(SUBSTR(REPLACE(REPLACE(REPLACE(info, CHAR(10), ''), CHAR(13), ''),'  ',' ' )FROM 1 FOR 30),'||', REPLACE(REPLACE(substr(info,LOCATE('from',info)+4,30), CHAR(10), ''), CHAR(13), '')) order by 1;

b、通过下面的sql 查看具体的每一个进程情况:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from information_schema.PROCESSLIST where info is not null  order by time,info ;

如果并发进程量大(>实例所承载的进程量),最长执行时间比较大(>1s)可从云平台或者grafana的监控上总体对比数据库前后时间段的压力情况(主要从tps,qps,网络流量,连接数),

同时和运维、开发人员沟通是否有推送,新上线,业务请求量增大等情况,

推送:可以先设置innodb_thread_concurrency参数控制最大并发

业务请求量增大:升级数据库配置

恶意攻击:修改数据库账号权限,ip访问白名单,修改数据库密码等

如果并发量特别大,进程数>数据库实例所承载的进程数,数据库处于hang的状态可以协商进行数据库主备切换(此操作业务时候肯定是受损.对比业务不可用,快速恢复数据库变成可用这个时候是DBA最要考虑的事情

c、通过下面的sql,输入过滤条件,查询出满足条件的进程列表,执行查询结果 kill 进程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select concat('kill ',id,';') 'kill',USER,host,db,COMMAND,time ,STATE from information_schema.PROCESSLIST where info is not null and TIME>0  and info like '%过滤条件%';

并发量不大,进程执行时间比较长超100s,可以先kill进程,后续再优化sql

2、实例内存使用率过高

紧急情况:数据库主备切换并告知开发,一般业务都有自动重连机制影响不大

非紧急情况:登录数据库,使用performance_schema下面的memory_summary_by_xxx表分析内存使用分布情况

3、实例磁盘iops使用率过高

kill长时间运行的sql,及优化慢sql(控制台-日志-慢日志明显)

4、实例连接数使用率过高

释放长时间的空闲连接:

  • kill sleep进程直接释放
  • 调整超时timeout参数

5、实例磁盘空间使用率过高

扩容磁盘 (业务低风期 扩容

清理表碎片(analyze table 会锁表 要注意) 根据上面的sql查询占用磁盘空间大的表,及碎片

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT table_schema,table_name,sum(round( round( data_length + index_length ) / (1024 *1024*1024) , 2 )) total_size_G ,round(sum(DATA_FREE)/1024/1024/1024,2) FROM information_schema.TABLES group by table_schema,table_name  HAVING sum(round( round( data_length + index_length ) / (1024 *1024*1024) , 2 ))>1   order by  total_size_G desc ;

清理归档废弃数据

2

redis

1、 监控大盘上整体查看redis(推荐使用 grafana prometheus)

所有数据库都需要对区域、维度、重要级别 有不同的应级方案

所有数据库都需要对区域、维度、重要级别 有不同的应级方案

所有数据库都需要对区域、维度、重要级别 有不同的应级方案

2、查看慢操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
slowlog get N

3、内存使用率分析:

redis-analyzer

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go get github.com/lanfang/redis-analyzer
cd go/bin/
./redis-analyzer parse-rdb --rdb-file=mess.rdb

redis-rdb-tools

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/sripathikrishnan/redis-rdb-tools
cd redis-rdb-tools

python setup.py install
rdb -c memory 30.rdb > memory2.csv

从源码安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 python setup.py install
 rdb -c memory 30.rdb > memory2.csv

分析内存快照

SQLite 是一款轻型的数据库。我们可以将前面生成的 csv 导入到数据库中之后,就可以利用 sql 语句很方便的对 Redis 的内存数据进行各种分析了。 导入方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sqlite3 30.db
create table memory30(database int,type varchar(128),key varchar(128),size_in_bytes int,encoding varchar(128),num_elements int,len_largest_element varchar(128),expiry varchar(128));
.mode csv
.import memory.csv memory2018070420320

数据导入以后,接下来想怎么分析就怎么分析了,举几个简单的例子: 查询key个数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select count(*) from memory30;

查询总的内存占用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select sum(size_in_bytes)/1024/1024 from memory30 where key like 'xxx_detail%';

查询内存占用最高的10个 key

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from memory20180704203207 order by size_in_bytes desc limit 10;

查询成员个数1000个以上的 list

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from memory20180704203207 where type='list' and num_elements > 1000 

3、实时分析redis实例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/Instagram/redis-faina.git
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
redis-cli -h 0.0.0.0 -a passwd -p 6379 MONITOR | head -n 10000 | ./redis-faina.py |more
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Overall Stats
========================================
Lines Processed 10000        --采样的数目
Commands/Sec 31718.97    --TPS 单实例tps可以达到8-10w

Top Prefixes                            --热点key前缀
========================================
vivashow 8526 (85.26%)
v 275 (2.75%)
vid 102 (1.02%)
n 70 (0.70%)
vids 10 (0.10%)

Top Keys                                  --热点key 
========================================
vivashow:f:v:i~lock 559 (5.59%)
vivashow:v:i~lock 395 (3.95%)

Top Commands                      --热点命令

========================================
EXISTS 4817 (48.17%)
GET 2943 (29.43%)
SET 368 (3.68%)

Command Time (microsecs)--命令耗时
========================================
Median 20.0
75% 217.25
90% 585.75
99% 1184.0

Heaviest Commands (microsecs)--最重的命令

========================================
GET 100961.5
SET 44970.0
EXISTS 38443.25

Slowest Calls                     --最慢的调用
========================================
1519.75 "EXISTS" "xxxxxx:user:info:36833133"

3

mongodb

1、数据库常用命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.currentOp() ---查看数据库当前正在执行的操作
db.killOp(opid) ---直接终止该操作
db.userInfo.find({name: /mongo/})-模糊查询
db.user_message_feed_index.createIndex( { created_at:1}, {expireAfterSeconds:2592000,background: true} )-添加索引

2、日常使用的慢日志(system.profile)查询 a、返回最近的10条记录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.system.profile.find().limit(10).sort({ ts : -1 }).pretty()

b、返回所有的操作,除command类型的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.system.profile.find( { op: { $ne : 'insert' } }).pretty()

c、返回特定集合

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.system.profile.find( { ns : ‘mydb.test‘ } ).pretty()

d、返回大于5毫秒慢的操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.system.profile.find({ millis : { $gt : 100 } } ).pretty()

3、分片集 mongodb常用命令

a、db启用shard

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sh.enableSharding('xxxashow')

b、对集合分片:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sh.shardCollection("xxx.notification",{"receiverId":"hashed"})

c、查看是否发生了迁移与分割:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use config
db.changelog.find({what: "split"}).sort({time:-1})
db.changelog.find({what: "moveChunk.commit"}).sort({time:-1})

写到尾声:赠送故障时 3大操作 让你快速恢复数据库

1、快速对数据库进行主备切换!数据业务不重要可以恢复到某个时间来保证数据库能正常使用

2、快速联系云厂商要求帮助协助问题!(网络 DNS 宿主机本身)

3、升级数据库配置!

以上3条操作 ,遇到比较大故障第1条优先处理!(如删除会话等操作无效情况下)

文中部分脚本用同事湍神之前整理mysql脚本

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维入门时间 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一线运维 DBA 五年经验常用 SQL 大全(二)
本文 SQL 及相关命令均是在运维工作中总结整理而成的,对于运维 DBA 来说可提高很大的工作效率,值得收藏。当然如果你全部能够背下来那就很牛逼了,如果不能,还是建议收藏下来慢慢看,每条 SQL 的使用频率都很高,肯定能够帮助到你。
JiekeXu之路
2021/03/15
9000
一线运维 DBA 五年经验常用 SQL 大全(二)
一线运维 DBA 五年经验常用 SQL 大全(一)
本文 SQL 均是在运维工作中总结整理而成的,对于运维 DBA 来说可提高很大工作效率,当然如果你全部能够背下来那就牛逼了,如果不能,建议收藏下来慢慢看,每条 SQL 的使用频率都很高,肯定能够帮助到你。
JiekeXu之路
2021/02/23
1.5K0
MySQL 故障诊断:MySQL 占用 CPU 过高问题定位及优化
◆ CPU 占用过高常见现象 在使用 MySQL 的过程中会遇到各种瓶颈问题,常见的是 IO 瓶颈,但是有时候会出现服务器 CPU 使用率超过 100%,应用页面访问慢,登录服务器负载很高。而导致这个问题竟然是 MySQL 进程,按理说如果 MySQL 运行稳定,服务器的 CPU 资源并不会跑满,如果出现这个问题,初步可以断定,是 MySQL 实例中出现了问题 SQL。 ◆ CPU 占用过高常见原因 CPU 占用过高常见原因: 服务器硬件问题 内存溢出 业务高并发 如果是业务高并发引起,可以理解为一种业务繁
IT大咖说
2022/05/27
17.6K0
MySQL 故障诊断:MySQL 占用 CPU 过高问题定位及优化
关于MySQL内存泄露如何排查的一些思路
MySQL使用内存上升90%!在运维过程中50%的几率,会碰到这样的问题。算是比较普遍的现象。
数据和云
2021/08/27
2.8K0
关于MySQL内存泄露如何排查的一些思路
Redis中的Big Key问题:排查与解决思路
在处理大型数据时,Redis 作为我们的非关系型数据库经常出现在解决方案之中。然而,在使用 Redis 的过程中,有一些问题可能会悄无声息地影响我们的系统性能,其中最具代表性的就是 Big Key 问题。
BookSea
2023/10/12
5840
使用rdbtools工具来解析redis rdb文件
源码地址:https://github.com/sripathikrishnan/redis-rdb-tools/
SEian.G
2021/03/03
7.5K0
[Oracle 故障处理]记一次undo表空间使用率99%的问题
公司一套11g的RAC undo表空间使用率在99%,一直不会下降,由于我们用的是自动UNDO空间管理,可能的原因可能就是由于会话一直在利用UNDO里面的内容
bsbforever
2020/08/19
3.4K1
[Oracle 故障处理]记一次undo表空间使用率99%的问题
MySQL数据库cpu飙升到500%的话他怎么处理?[通俗易懂]
当 cpu 飙升到 500%时,先用操作系统命令 top 命令观察是不是 mysqld 占用导致的,如果不是,找出占用高的进程,并进行相关处理。
全栈程序员站长
2022/07/11
1.1K0
MySQL数据库cpu飙升到500%的话他怎么处理?[通俗易懂]
一线运维 DBA 五年经验常用 SQL 大全(三)
本文作为常用 SQL 系列的第三篇,本文涉及到的 SQL 及相关命令均是在运维工作中总结整理而成的,对于运维 DBA 来说可提高很大的工作效率,值得收藏下来慢慢看。
JiekeXu之路
2023/02/24
1.4K0
一线运维 DBA 五年经验常用 SQL 大全(三)
Oracle DBA的SQL编写技能提升宝典(含SQL资源)
背景:要迁移数据库,需要创建与源库相同的表空间,大小与源库相同。由于个别表空间较大,手工添加可能需要写很多的脚本,于是同事通过PL/SQL解决了问题。
数据和云
2021/10/13
1.2K0
Oracle DBA的SQL编写技能提升宝典(含SQL资源)
Redis RDB文件离线分析
Redis是一款键值内存数据库,支持丰富的数据类型,在极高的性能下,还支持数据的持久化存储。
用户1082366
2019/02/22
3.7K0
Redis RDB文件离线分析
遇到MDL锁,如何分析和处理?
之前遇到一个DBA,在生产库上加字段,导致数据库连接数打满。原因就是MDL锁引起。下面让我来介绍一下MDL锁及其排查和处理方式。
用户10842762
2023/11/15
6571
Redis 缓存性能实践及总结
在互联网应用中,缓存成为高并发架构的关键组件。这篇博客主要介绍缓存使用的典型场景、实操案例分析、Redis使用规范及常规 Redis 监控。
2020labs小助手
2020/10/12
6450
java应用监控之利用cat接口性能优化
1.用户体验差:接口访问速度慢、如果一个页面打开需要好几秒,用户可能在页面没有完全打开时,就关掉页面离开了,造成用户流失,通过性能优化,减少服务器响应时长,可提高用户体验,较少用户的流失。
用户4361942
2019/05/28
1.6K0
ORACLE常用性能监控SQL【二】
条件为什么block>100,因为一些很小的表,只有几行数据实际大小很小,但是block一次性分配就是5个(11g开始默认一次性分配1M的block大小了,见create table storged的NEXT参数),5个block相对于几行小表数据来说就相差太大了
小小工匠
2021/08/16
4K0
如何优雅的删除一个超过3000多万成员且内存占用超过1.8G的bigkey?
Redis被广泛的应用,得益于它支持高性能访问(微秒级)。作为一个DBA,经常需要去维护bigkey。如果现在业务方需要你去删除一个hash类型的key,且这个key有3000多万个成员,内存占用超过1.8G。如何优雅的删除这个bigkey呢?下面让我来简单的介绍一下。
用户10842762
2023/12/22
4571
如何优雅的删除一个超过3000多万成员且内存占用超过1.8G的bigkey?
MySQL DBA基本知识点梳理和查询优化
本文主要是总结了工作中一些常用的操作,以及不合理的操作,在对慢查询进行优化时收集的一些有用的资料和信息,本文适合有MySQL基础的开发人员。
数据和云
2019/05/14
9100
Redis详解(6)性能监控:问题分析和优化
尤其redis这类敏感的纯内存、高并发和低延时的服务,一套完善的监控告警方案,是精细化运营的前提。
黄规速
2022/04/14
3.5K0
Redis详解(6)性能监控:问题分析和优化
--如何用PYTHON 定时打印 MYSQL FREE 使用率,与自动创建测试数据库表
源数据库汇中,PYTHON 的使用不是一个可选项,主要在很多地方,监控,处理一些DEVOPS的事情,或者与业务有关的处理的工作都是需要PYTHON 来进行的。下面就用PTYHON 来完成一个很小的打印MYSQL 系统的内存占用率的小脚本来开始 PYTHON travel。(由于是初级水平有待提高,部分代码的有待进步)
AustinDatabases
2020/06/11
1.3K0
你知道 DBA 工作中都要做的巡检有哪些吗?
-------------------------------------------------------------------
JiekeXu之路
2020/04/14
7930
你知道 DBA 工作中都要做的巡检有哪些吗?
推荐阅读
相关推荐
一线运维 DBA 五年经验常用 SQL 大全(二)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验