【OceanBase诊断调优】—— 临时文件排查手册

本文介绍临时文件常见的问题及排查方法。

临时文件在不同的 OceanBase 数据库版本上存在不同的使用限制,具体如下:

  • 单个 observer 节点同时写入的最大文件数

    • OceanBase 数据库 V2.x 及之前版本,默认最大 4000 个,可以通过 _temporary_file_io_area_size 调整,重启生效。
    • OceanBase 数据库 V3.x、4.x 版本,不存在。
  • 单租户临时文件最大磁盘总空间

    • OceanBase 数据库 V2.2.x 及之前版本,不存在。
    • OceanBase 数据库 V3.x 版本:单个租户,最大可用临时文件总空间为 4TB,不可以调整。
    • OceanBase 数据库 V4.x 版本:单个租户,与租户内存大小相关,tenant_memory * 70% * 500GB 磁盘空间,最大可达 100TB。
  • 单个 observer 节点同一时刻 read IO 最大带宽

    • OceanBase 数据库 V3.x 版本:最大支持 4GB。
    • OceanBase 数据库 V4.x 版本:最大支持 4GB。

常见问题

Q1: 如何判断临时文件空间使用情况?

A:可通过查询虚拟表 _ _all_virtual_macro_block_marker_status 或 __all_space_usage 获取临时文件空间使用情况,详细 SQL 如下。

  • 通过 __all_virtual_macro_block_marker_status 查询。

    • 在 OceanBase 数据库 V3.2.x 及之后版本中,临时文件空间和 mark 不到宏块一起统计在 hold count 字段中。若想要查询具体临时文件空间占用,可以通过 __all_space_usage 表,查看 file type 为 tenant tmp data 的行。

      obclient> select * from __all_virtual_macro_block_marker_status where svr_ip = 'xxx' and svr_port = xx;
      
    • 202306之前的 OceanBase 数据库 V3.2.x 版本,hold count 统计有存在问题,可使用下列公式计算实际的 hold count 值。 hold_count = hold_count - macro_meta_count - partition_meta_count - data_count - second_index_count - lob_data_count - lob_second_index_count - bloomfilter_count

      obclient> select svr_ip, svr_port, total_count, reserved_count, macro_meta_count, partition_meta_count, data_count, second_index_count, lob_data_count,lob_second_index_count, bloomfilter_count, (hold_count - macro_meta_count - partition_meta_count - data_count - second_index_count - lob_data_count - lob_second_index_count - bloomfilter_count) as actual_hold_count, pending_free_count, free_count, mark_cost_time, sweep_cost_time from __all_virtual_macro_block_marker_status where svr_ip = 'xxx' and svr_port = xx;
      
  • 通过 __all_space_usage 查询

    在 OceanBase 数据库 V3.1.x 及之后版本中,具体临时文件空间占用,也可以通过 __all_space_usage 表,看 file type 为 tenant tmp data 的行。

    obclient> select svr_ip, svr_port, file_type, sum(data_size) from __all_space_usage group by svr_ip, svr_port, file_type;
    

Q2: 如何判断是否达到单租户临时文件最大磁盘总空间?

A:查询 __all_space_usage 看临时文件磁盘占用大小,或查看 __all_virtual_memory_info 表中 label 为 TmpBlockManager 的内存是否达到上限(3x: 15GB,4x:租户内存70%)。

  • 通过查询 __all_space_usage 表,查看 file type 为 tenant tmp data 的行。

    obclient> select svr_ip, svr_port, file_type, sum(data_size) from __all_space_usage group by svr_ip, svr_port, file_type;
    
  • 通过查询 __all_virtual_memory_info 表,查看 label 为 TmpBlockManager 的行。

    obclient> select * from __all_virtual_memory_info where label = 'TmpBlockManager' and svr_ip = 'xxx' and svr_port = xx;
    

Q3: 为什么会有单租户临时文件最大磁盘总空间?

A:之所以会有临时文件总空间限制,是因为临时文件的元数据不持久化,仅存储在内存中,避免打爆租户内存,影响系统稳定,该部分内存设置了上限。

Q4: 如何判断是否达到单个 observer 节点同一时刻 read IO 最大带宽?

A:查看__all_virtual_memory_info 表中 label 为 TmpPageCache 的内存是否达到 4GB 上限。

通过查询 __all_virtual_memory_info 表,查看 label 为 TmpBlockManager 的行。

obclient> select * from __all_virtual_memory_info where label = 'TmpPageCache' and svr_ip = 'xxx' and svr_port = xx;

在 OceanBase 数据库 V3.x 版本内,该模块存在已知的内存泄露,具体可参考临时文件 READ IO 内存发生泄露导致内存容量超出了4GB 的最大限制

Q5: 什么是临时文件空间放大?如何判断临时文件是否已发生了空间放大?如果避免空间放大?

A:对于临时文件,空间放大是指实际磁盘占用大于写入数据的数据量。简单地说,写入的 buffer 的大小是固定的,当写入并发度(dir_id)大于写入 buffer 中可以容纳的宏块个数时,就有可能会产生写入放大问题。可以使用下面的方法,确认临时文件宏块是否发生了空间放大。

  • OceanBase 数据库 V4.1.x 及之前版本。

    grep 'ob_tmp_file*' observer.log.2023031022* | grep 'succeed to wash a block' | grep -o 'free_page_nums:[0-9]*' | awk -F ':' '{ sum += $2; } END { print "total_free_page_num = " sum; print "avg_free_page_nums = " sum/NR; print "enlargement_factor = " (252*NR)/(252*NR - sum); print "macro_block_count = " NR }'
    
  • OceanBase 数据库 V4.2.x 及之后版本。

    grep 'ob_tmp_file*' observer.log.2023031022* | grep 'succeed to wash a block' | grep -o 'free_page_nums=[0-9]*' | awk -F '=' '{ sum += $2; } END { print "total_free_page_num = " sum; print "avg_free_page_nums = " sum/NR; print "enlargement_factor = " (252*NR)/(252*NR - sum); print "macro_block_count = " NR }'
    

如果发生空间放大,通常可以采用下面两种调整方法,降低放大,

  • 降低并发度,确保写入buffer的宏块个数少于文件写入并发数。
  • 增大buffer大小,可以通过调整租户级 _temporary_file_io_area_size 配置项。

Q6: 什么是临时文件泄露?如何判断临时文件是否发生了泄露?一旦发生文件泄露,如果规避?

A:如果一个任务开始时打开了一个临时文件,但在该任务结束时却没有删除该文件,即临时文件泄露。一旦发生了临时文件泄露,会导致磁盘空间长期被占用,无法回收。

发生临时文件泄漏可以通过如下方法找出文件泄漏点属于模块。

  • 大查询超时设置不合理,导致残留临时文件,可以查询 __all_virtual_dtl_interm_result_monitor

  • 如果没有可以,则按照如下方法找出泄漏点属于模块。

    1. 找出所有临时文件日志。

      grep 'ob_tmp_file' observer.log* > ~/tmp_file.log
      
    2. 找出打开临时文件日志。

      grep 'succeed to open a tmp file' tmp_file.log | grep -o 'fd=[0-9]*' | awk -F '=' '{print $2}' | sort -h > open.fd
      
    3. 找出删除临时文件日志。

      grep 'succeed to remove a tmp file' tmp_file.log | grep -o 'fd=[0-9]*' | awk -F '=' '{print $2}' | sort -h > remove.fd
      
    4. 找出只打开没有删除的临时文件 fd。

      grep -f remove.fd -F -v -x open.fd
      
    5. 找出只打开没有删除的临时文件日志。

      grep 'succeed to open a tmp file' tmp_file.log | grep 'fd=11'
      
    6. 找出只打开没有删除的临时文件函数调用堆栈。

      addr2line -pCfe bin/observer 0x1aae97c7 0x14ac6511 0x14ac5363 0xf530a2b 0xf52fa9b 0xf53a0bd 0xf52c62c 0xf480d43 0xf47ee17 0xf4448c5 0xe6cb79c 0x5e7e4ac 0x5e7e0e2 0x60c5dd6 0x5e37331 0xf0b4f3f 0x5e37331 0xe1cfc40 0xe287349 0xe1d23c7 0x604c94a 0x601848c 0x79262e5 0x5cd8eae 0x792486c 0x5cd7014 0x7925594 0x1b230a66 0x1b220c25 0x7f03699a8e25 0x7f0369467f1d
      

如果真的发生了临时文件泄露,可以通过重启发生泄露的 observer 进程即可。

适用版本

OceanBase 数据库所有版本。

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

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

相关文章

胶原蛋白三肽能否深入皮肤?一场关于美丽的科学之旅

在追求美丽的道路上,我们总是对各种护肤成分充满好奇。今天,就让我们一起探讨一个热门话题——胶原蛋白三肽,它究竟能否深入我们的皮肤,为我们带来期待中的美丽改变呢? 首先,我们需要了解胶原蛋白肽是什么…

Cross-Episodic Curriculum for Transformer Agents

我们采用以下六个标准来提供一个全面的框架,用于对机器学习研究,特别是在序列决策和具身智能体背景下的研究进行分类和理解: 学习范式:这个标准区分了算法获取知识的方式。 强化学习 (RL) 是一种试错法,智能体通过与环…

开发心电疾病分类的深度学习模型并部署运行于ARM虚拟硬件平台(AVH)

目录 一、ARM虚拟硬件平台介绍 二、心电疾病分类模型介绍 三、部署流程 3.1 基于百度云平台订阅虚拟硬件镜像 3.2 安装编译相关组件 3.1 数据加载 3.2 模型转换 方式一: tensorflow模型转换为onnx模型,onnx模型转换为TVM模型 方式二&#xff1…

注册表Windows兼容性设置(AppCompatFlags)

属性 - 兼容性 EXE文件属性中有兼容性标签,当有些老版本软件不能正常运行时经常会调整这里的设置。 image.png 上面的所有选项都写在注册表中,其中“更改所有用户的设置”保存在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppC…

html5各行各业官网模板源码下载(2)

文章目录 1.来源2.源码模板2.1 HTML5好看的旅行网站模板源码2.2 HTML5自适应医院叫号大屏模板源码2.3 HTML5好看的高科技登录页面模板源码2.4 HTML5宠物美容服务公司网站模板源码2.5 HTML5创意品牌广告设计公司网站模板源码2.6 HTML5实现室内设计模板源码2.7 HTML5黄金首饰网站…

踏青而行、奔赴山海 | 2024中创算力户外徒步团建

春意藏,夏初长。风暧人间草木香,为了丰富中创员工的业余生活,增加全体员工亲近大自然的机会。回归自然、愉悦身心,5月15日,中创算力组织开展了户外徒步团建。 一群志同道合的人,一起奔跑在理想的路上。彼此…

前端JS怎么更换颜色:探索JavaScript中的色彩变换魔法

前端JS怎么更换颜色:探索JavaScript中的色彩变换魔法 在前端开发中,JavaScript(JS)扮演着至关重要的角色,其中一项常见的任务便是动态地更改网页元素的颜色。这个过程看似简单,实则蕴含着丰富的技巧和深度…

metersphere相关笔记

1. 修改密码: password字段为密码得到md5值,假设更新为123456,则password为e10adc3949ba59abbe56e057f20f883e docker exec -it mysql bash #进入mysql容器 mysql -uroot -pPassword123mysql use metersphere #切换到meterspheres数据库…

Activiti7_使用

Activiti7_使用 一、Activiti7二、绘制工作流三、通过代码部署流程,再对流程进行实例化,完整运行一遍流程即可四、在springbooot中使用 一、Activiti7 为了实现后端的咨询流转功能,学习Activiti7,记录下使用的过程及遇到的问题 二…

openwrt 官方版 安装配置 AdGuard Home + smartdns 告别广告烦扰 教程 软路由实测 系列五

1 安装 adguard home opkg update opkg install adguardhome #启动 /etc/init.d/adguardhome start /etc/init.d/adguardhome enable #查看 rootOpenWrt:~# ps| grep AdGuardHome5101 root 1233m S /usr/bin/AdGuardHome -c /etc/adguardhome.yaml -w /var/adguardhom…

云界洞见——基于移动云云数据库MySQL应用实践

目录 简介1 新手入门1.1 创建MySQL实例1.2 公网连接MySQL实例 2 操作指南2.1 创建数据库2.2 数据备份设置2.3 日志管理2.4 监控告警2.5 代码审计 3 应用场景4 总结 如今,大型企业如金融企业和银行等,在下一代的微服务架构转型要求下,需要基础…

渗透测试的测试流程与注意事项

软件测试流程 渗透测试是一种重要的软件测试技术,通过对系统进行模拟攻击和漏洞评估,帮助组织发现和修复潜在的安全风险,提高系统的安全性和稳定性。在进行渗透测试时,需要注意合法授权、技术能力、安全意识和报告质量等方面的问…

科学提效|AI融入零售业,未来零售的创新之旅

零售业正经历着由人工智能(AI)引领的转型浪潮。AI在零售和消费品(CPG)行业的应用前景广阔,它正以多种创新方式重塑行业的运作模式。且随着技术的不断进步,AI在零售业的应用将变得更加广泛和深入。AI不仅能够…

即刻起飞——基于Amazon Bedrock快速构建生成式AI应用

即刻起飞 —— 基于 Amazon Bedrock 快速构建生成式 AI 应用 1. 前言 在百模大战中,AI行业的发展正在经历前所未有的变革。这场竞争不仅推动了AI技术的快速发展,也揭示了AI行业的新趋势。这些趋势不仅影响着我们如何看待和使用AI,也预示着AI…

高频交易的回测算法

https://www.reddit.com/r/highfreqtrading/comments/1corjiw/opensourcing_highfrequency_trading_and/ 这个是关于高频交易的数据读取和回测文档,这个项目中数据的收集, https://hftbacktest.readthedocs.io/en/latest/tutorials/Data%20Preparation…

免费且非常火的日程管理软件:飞项

一、简介 1、在日常繁忙的工签中,是否事情一大堆却记不住?系统自带的日历用着却是不方便,不顺手,提醒不及时?待办、打卡、记事乱七八糟的混在一起,关键时候找不到?市面上的日程管理软件那么多&a…

springboot+jwt+shiro+vue+elementUI+axios+redis+mysql完成一个前后端分离的博客项目

目录 简易博客项目(springbootjwtshirovueelementUIaxiosredismysql)第一章 整合新建springboot,整合mybatisplus第一步 创建项目(第八步骤就行)数据库:1、 修改pom.xml2、修改配置文件3、创建数据库vueblog然后执行下面命令生成表 第二步 配置分页MybatisPlusConfig生成代码(d…

数据结构中的KMP算法及其改进算法

数据结构中的KMP算法及其改进算法 在计算机科学中,字符串匹配是一个基本且重要的问题。经典的暴力匹配算法虽然简单,但在最坏情况下的时间复杂度为O(mn),其中m是模式串的长度,n是文本串的长度。为了提高匹配效率,Knut…

最全的Redis常用命令

Redis是一个开源的内存数据结构存储系统,用作数据库、缓存和消息代理。它支持多种类型的数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets&#xff09…

Spring Boot 系统学习第三天:Spring依赖注入原理分析

1.概述 Spring中关于依赖注入的代码实现非常丰富,涉及大量类和组件之间的协作与交互。从原理上讲,任何一个框架都存在一条核心执行流程,只要抓住这条主流程,就能把握框架的整体代码结构,Spring也不例外。无论采用何种依…