TiDB学习笔记(八)-数据库故障处理

news2024/11/16 0:27:11

一、数据丢失快速恢复

数据恢复前置条件-GC,tidb_gc_life_time

查询GC已经清理的时间点tikv_gc_safe_point

数据快速恢复操作方式

        DML->tidb_snapshot参数 (在tikv_gc_safe_point范围内)

        DDL->flashback table/recover table  (flashback table适用drop、truncate,recover table适用drop要在tidb_gc_life_time 时间范围内)

        DDL+DML ->dumpling工具

二、TiDB OOM问题

诊断方法

  1. 客户端报错 lost connection to Mysql server during query
  2. dmesg -T |grep tidb-server

    tidb.log  tidb发生重启

    tidb_stderr.log

  3. grafana tidb->server->memory usage   内存迅速升高,又迅速下降

    tidb->server->uptime tidb的启动时间

    OOM产生的原因

OOM产生的原因

  1. SQL语句的执行
  2. golang内存释放机制

定位内存占用大的SQL

  1. TiDB Dashboard 慢查询
  2. TiDB Dashboard SQL语句分析
  3. TiDB Server 日志中的expensive query(可记录正在执行的SQL)

缓解OOM的措施

  1. SQL优化,减少非必要返回的数据量
  2. 减少大事务,将大事务拆分为小事务
  3. 调整相关参数,限制单条SQL的内存使用量(mem-quota-query,达到内存限制后,如果也没有临时磁盘可用,将触发oom-action)  启用临时磁盘 oom-use-tmp-storage,tmp-storage-path,tmp-storage-quota
  4. 其他缓解OOM的方法   go运行时释放内存的两种策略MADV_DONTNEED(不用的内存快速回收),MADV_FREE(内存快耗尽时才开始回收),tidb启动前设置GODEBUG=madvdotneed=1。滚动重启tidb server

三、TiKV OOM问题

对业务影响

  1. TiKV请求失败造成异常退出
  2. region leader重新选举。raft group开始重新选举region leader,新的region leader上报给PD
  3. region cache频繁更新。在访问TiDB的region cache时,出现TiKV rpc相关报错;后台自动进行backoff重试;PD将最新的region leader信息返回给TiDB的region cache

诊断方法

  1. dmesg -T|grep tikv-server;  Tikv.log中查找
  2. grafana监控 tikv->details->cluster->memory

OOM产生的原因

  1. block cache设置不当(grafana tikv-details->rocksdb KV->block cache size,参数设置storage.block-cache.capacity 不超过总内存的60%,可在线调整)
  2. Coprocessor收到大量查询,返回数据量太大,gRPC的发送速度跟不上Coprocessor往外输出数据的速度(grafana tikv-details->coprocessor overview->total response size,node_expoter->network->network in/out traffic,对比两个流量的大小。)解决办法:SQL优化;网卡配置升级
  3. 其他进程占用太多内存。raftstore数据写入环节内存占用高;目标服务器混布其他组件且内存占用高

四、数据库热点问题

(1)形成写热点的原因-数据组织模型

(2)形成读热点的原因

  1. 高频访问小表
  2. SQL执行计划不合理
  3. 具有顺序增长属性的索引扫描

(3)定位热点

1.TiDB Dashborad

  • 流量可视化页面
  • 慢查询页面
  • SQL语句分析

2.grafana

  • TiKV-Trouble-Shooting
  • TiKV-Details
  • PD

(4)写热点打散

  1. 表结构 shard_row_id_bits和pre_split_regions
  2. auto_random 主键非空且唯一,打散主键的顺序
  3. 索引 split table table_name index idx_name between () and () regions n
  4. 系统变量 tidb_scatter_region,作用域global 默认OFF

(5)写热点排查流程

  1. TiDB Dashboard流量可视化页面,观察写流量情况
  2. TiDB Dashboard 慢查询 & SQL语句分析,确认对应数据库对象的DML操作类型
  3. 查看目标对象schema信息
  4. 热点打散

 

 (6)读热点打散

  1. TiDB Dashboard 流量可视化页面观测读流量的情况
  2. TiDB Dashboard 慢查询&SQL语句分析,确认问题时间段数据库中SQL的执行频次、扫描数据的行数

        小表频繁访问引起热点,两种打散方式

  1. set config tikv split.qps-threshold=3000;   set config tikv split.byte-threshold = 30
  2. curl -X POST ........split.qps-threshold、split.byte-threshold

        SQL执行计划不合理

  1. 缺少索引
  2. 多个索引,但优化器选择错误

五、PD调度常见问题

(1)常见调度类型

  1. Balance
    1. leader
    2. region
  2. Hot region
    1. 写热点
    2. 读热点
  3. 集群拓扑
  4. Region merge

(2)调度的控制-产生速度控制

 (3)PD调度场景

  1. Leader/Region分布不均衡
  2. TiKV节点下线速度慢  grafana PD ->statistics-balance->Store leader count&Store region count
  3. TiKV节点上线速度慢 grafana PD ->statistics-balance->Store leader count&Store region count  (参考Leader/Region分布不均衡的解决方案)
  4. 热点region分布不均衡 grafana PD->statistics->hot write
  5. region merge速度慢 grafana PD->region health

Leader/Region分布不均衡-解决方案

TiKV节点下线速度慢-解决方案

热点region分布不均衡-解决方案

region merge速度慢-解决方案

六、TiDB写入慢常见处理方式

TiDB写入流程

 (1)排查思路

        1.典型问题

  • 物理环境导致写入慢
  • 业务变更
  • 慢查询语句
  • 写入热点问题

        2.复杂问题

  • 对照TiDB写入流程进行排查

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/150971.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AIGC与搜索深度融合,百度定义“生成式搜索”

设想一下,当你搜索“公司活动通知怎么写”时,搜索引擎直接“写”了一篇送到眼前是什么体验?百度的“生成式搜索”正在让这样的场景成为现实。日前,百度宣布,百度搜索将升级“生成式搜索”能力,基于百度自研…

项目管理工具dhtmlxGantt甘特图入门教程(七):在服务器上使用甘特图

dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足项目管理控件应用程序的所有需求,是最完善的甘特图图表库。 这篇文章给大家讲解如何在服务器上使用DHTMLX Gantt 。 DhtmlxGantt正版试用下载(qun:764…

Cadence PCB仿真使用Allegro PCB SI元器件类别设置为IO,IC和Discrete的方法图文教程

⏪《上一篇》   🏡《总目录》   ⏩《下一篇》 目录 1,概述2,配置方法3,总结1,概述 本文简单介绍使用Allegro PCB SI软件配置电压地网络电压的方法。 2,配置方法 第1步:打开待仿真的PCB文件,并确认软件为Allegro PCB SI 如果,打开软件不是Allegro PCB SI则可这样…

ElementUI源码系列一-完整引入和按需引入

前言 本篇将介绍,ElementUI 是如何实现完整引入和按需引入的。 完整引入 官网使用 源码步骤 src/index.js 通过对外暴露 install(),让主项目通过 Vue.use(ElementUI) 引入,还需单独引入样式 import element-ui/lib/theme-chalk/index.c…

Selenium用法详解【Options选项】【JAVA爬虫】

简介本文主要讲解如何使用java代码利用selenium控制浏览器的启动选项Options的代码操作教程。Options选项这是一个Chrome的参数对象,在此对象中使用addArgument()方法可以添加启动参数,添加完毕后可以在初始化Webdriver对象时将此Options对象传入&#x…

minio分布式存储的go语言开发衔接

minio是分布式存储,可集群部署,阵列磁盘,纠错码等大数据存储必备的技术。由于它是go语言开发的,我们用go来与它衔接:上传文件,比如图片,然后预览。这里涉及几个重要的知识点。一是minio永久路径…

Vue学习笔记(二)

Vue学习笔记二脚手架利用脚手架软件生成项目包脚手架 随着时代的发展, WEB开发逐渐出现了 工程化 特征: 流水线作业! 脚本方式: 到饭店 自选点餐… 脚手架方式: 点 套餐, 一套完善的配置,扩展, 各种易用功能… 脚手架: 就是一款软件, 可以按照用户需求自动生成 开发环境: 包含…

[博士论文]基于图数据的可信赖机器学习

密歇根大学Towards Trustworthy Machine Learning on Graph Datahttps://deepblue.lib.umich.edu/handle/2027.42/174201摘要机器学习已经被应用于越来越多影响我们日常生活的与社会相关的场景,从社交媒体和电子商务到自动驾驶汽车和刑事司法。因此,为了…

7-2 洛希极限

科幻电影《流浪地球》中一个重要的情节是地球距离木星太近时,大气开始被木星吸走,而随着不断接近地木“刚体洛希极限”,地球面临被彻底撕碎的危险。但实际上,这个计算是错误的。 洛希极限(Roche limit)是一…

用Python实现十大经典排序算法(附动图)

排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排…

69、CLIP-NeRF: Text-and-Image Driven Manipulation of Neural Radiance Fields

简介 官网:https://cassiepython.github.io/clipnerf/ 利用对比语言-图像预训练(CLIP)模型的联合语言-图像嵌入空间,提出了一个统一的框架,可以用短文本提示或示例图像以用户友好的方式操纵NeRF。改论文结合NeRF的新视图合成能力和生成模型潜…

【自学Python】Python缩进规则

Python缩进规则 Python缩进规则教程 Python 和其它程序设计语言采用大括号 {} 分隔代码块不同,Python 采用代码缩进和冒号来区分代码块之间的层次。 在 Python 中,对于 类定义、函数定义、流程控制语句、异常处理语句 等,行尾的冒号和下一…

【Linux篇】之TFTP服务配置

tftp是基于UDP协议的简单文本文件传输协议; 用途:使用网络的方式将文件传输(下载)到开发板中。 具体的tftp服务的安装步骤: 1> 安装tftp服务 (ubuntu必须可以上网) sudo apt-get update ----> 更新源 sudo apt-get install tftpd-hpa…

【MyBatis】如何使用“动态SQL”(不用找了,这一篇足矣)

目录 一、if标签 二、where标签 三、trim标签 四、choose、when、otherwise 五、foreach标签 六、sql标签 一、if标签 if,通过test属性中的表达式判断标签中的内容是否有效(有效才将if里面的内容拼接到sql中);一般用于用户在…

Authing 通过中国信通院「身份治理系统和工具能力」全面级评估

Authing 通过中国信通院「身份治理系统和工具能力」全面级评估 近期,Authing 荣获由中国信通院颁发的「身份治理系统和工具能力」全面级评估。在统一身份管理、统一认证管理、开发集成管理以及统一安全管理四个模块满足身份治理系统和工具支撑能力全面级要求。 评估…

Java--main()方法

文章目录一、main()方法使用二、mian()方法调用一、main()方法使用 1、访问控制权限是公有的(public) 2、main() 方法是静态的。如果要在 main() 方法中调用本类中的其他方法,则该方法也必须是静态的,否则需要先创建本类的实例对…

进程间通信【共享内存】

共享内存共享内存共享内存原理创建共享内存关联共享内存去关联共享内存控制共享内存使用共享内存代码共享内存 进程间通信的前提是:先让不同的进程,看到同一份资源 之前,管道进程通信是采用看到同一个文件,那么共享内存就是看到同…

审查 Git 仓库的绝佳工具Tig

简介 Tig 是一个 基于 ncurses 的 Git 文本模式界面,它允许你浏览 Git 仓库中的更改。它还可以充当各种 Git 命令输出的分页器。使用这个工具可以让我很好地了解在哪个提交中发生了哪些更改,最新的提交合并是什么等等。 git工作原理:https:…

黑马学ElasticSearch(三)

目录: (1)RestClient-操作索引库-导入demo (2)RestClient操作索引-hotel数据结构分析 (3)RestClient操作索引库-初始化RestClient (4)RestClient操作索引库-创建索引库…

如何掌握TikTok广告投放技巧,玩转“TikTok+独立站”新模式?

导读:TikTok已经发展成为全球第六大社交媒体网络,这使其成为一个非常富饶的广告目的地。 跨境卖家如何在 TikTok 上投放广告?在“TikTok独立站”模式中,卖家在 TikTok ads 上投放电商广告,用户点击后将跳转到独立站落地…