更换新创环境之后数据库特别慢

【 使用环境 】生产环境
【 OB or 其他组件 】
【 使用版本 】5.7.25-OceanBase_CE-v4.2.1.10
【问题描述】更换新创环境后入库特别慢、目前使用kylin10+CPU:海光7380,请问如何解决,或者怎么排查是不是数据库的问题 还是机器的问题
【复现路径】
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

根据您提供的信息,更换新环境后数据库性能显著下降,这可能是由多种因素引起的。为了帮助您定位问题,我们可以从以下几个方面入手:

  1. 检查硬件配置

    • 确认新环境的硬件配置是否符合 OceanBase 的推荐配置。虽然您提到 CPU 是海光 7380,但还需要检查内存、磁盘 I/O 和网络带宽等其他硬件资源。
    • 参考文档片段 4 中的硬件配置,确保新环境的配置不低于推荐值:
      | 服务类型 | ECS 类型 | 实例数 | 机器核心数 | 内存 |
      | --- | --- | --- | --- | --- |
      | OceanBase 数据库 | ecs.g7.8xlarge | 3 | 32C | 128G <br>每台机器系统盘 300G,再挂载两块 400G 云盘作为 Clog 盘和 Data 盘,性能级别为 PL1|
      
  2. 检查数据库配置

    • 连接 SYS 租户,查看全局视图,确认服务器状态:
      SELECT * FROM GV$OB_SERVERS;
      
    • 查看网络线程数量(该配置项无法动态修改):
      show parameters where name = 'net_thread_count';
      
    • 查看已部署集群及其配置:
      obd cluster list
      obd cluster edit-config [cluster name]
      
    • 在 OBServer 所在机器上查看 OBServer 启动参数:
      ps -ef | grep observer
      
  3. 性能监控和诊断

  4. 对比旧环境

    • 如果可能,对比新旧环境的硬件配置和数据库配置,找出差异点。
    • 检查旧环境中的性能监控数据,对比新环境中的性能表现,找出性能下降的具体原因。
  5. 优化建议

    • 如果发现硬件配置不足,考虑升级硬件资源。
    • 如果发现数据库配置不当,调整相关参数以优化性能。
    • 如果发现网络或磁盘 I/O 存在瓶颈,优化网络配置或磁盘布局。

通过以上步骤,您可以逐步排查并解决新环境下的性能问题。如果问题仍然无法解决,建议联系 OceanBase 的技术支持团队获取进一步的帮助。

更多信息请查看:

  1. OceanBase 数据库 Sysbench 测试
  2. OceanBase 数据库社区版 V3.1.1
  3. 快速体验 OceanBase 数据库
  4. OceanBase Sysbench 性能测试报告
  5. OceanBase 概述
  6. OceanBase Sysbench 高性能部署和问题分析
  7. OceanBase 数据库社区版 V3.1.3
  8. OceanBase 数据库 V4.1.0
1 个赞

用诊断工具obdiag 拿一份巡检报告发出来看看,https://www.oceanbase.com/docs/common-obdiag-cn-1000000001768218

1 个赞

[WARN] step_base ResultFalseException:failed_scheduler_tenant_id is exists. Please check the tenant_ids:
[WARN] TaskBase execute StepResultFailException: failed_scheduler_tenant_id is exists. Please check the tenant_ids:
[WARN] step_base ResultFalseException:failed_scheduler_tenant_id is exists. Please check the tenant_ids:
[WARN] TaskBase execute StepResultFailException: failed_scheduler_tenant_id is exists. Please check the tenant_ids:
[WARN] step_base ResultFalseException:failed_scheduler_tenant_id is exists. Please check the tenant_ids:
[WARN] TaskBase execute StepResultFailException: failed_scheduler_tenant_id is exists. Please check the tenant_ids:
[WARN] net.ipv4.tcp_tw_recycle is not exist
[WARN] step_base ResultFalseException:fs.pipe-user-pages-soft : 16384. recommended: 0.
[WARN] TaskBase execute StepResultFalseException: fs.pipe-user-pages-soft : 16384. recommended: 0. .
[WARN] net.ipv4.tcp_tw_recycle is not exist
[WARN] net.ipv4.tcp_tw_recycle is not exist
[WARN] step_base ResultFalseException:fs.pipe-user-pages-soft : 16384. recommended: 0.
[WARN] TaskBase execute StepResultFalseException: fs.pipe-user-pages-soft : 16384. recommended: 0. .
[WARN] step_base ResultFalseException:fs.pipe-user-pages-soft : 16384. recommended: 0.
[WARN] TaskBase execute StepResultFalseException: fs.pipe-user-pages-soft : 16384. recommended: 0. .
[WARN] step_base ResultFalseException:Do not warning. getenforce is exist. We will check SELinux by getenforce
[WARN] TaskBase execute StepResultFalseException: Do not warning. getenforce is exist. We will check SELinux by getenforce .
[WARN] step_base ResultFalseException:Do not warning. getenforce is exist. We will check SELinux by getenforce
[WARN] step_base ResultFalseException:Do not warning. getenforce is exist. We will check SELinux by getenforce
[WARN] TaskBase execute StepResultFalseException: Do not warning. getenforce is exist. We will check SELinux by getenforce .
[WARN] TaskBase execute StepResultFalseException: Do not warning. getenforce is exist. We will check SELinux by getenforce .
[WARN] step_base ResultFalseException:observer need cpu support avx2. If the cpu is not support avx2, observer will be crash.
[WARN] TaskBase execute StepResultFailException: observer need cpu support avx2. If the cpu is not support avx2, observer will be crash.
[WARN] step_base ResultFalseException:On ip : 10.246.37.72, ulimit -s is 20480 . recommended: unlimited.
[WARN] TaskBase execute StepResultFalseException: On ip : 10.246.37.72, ulimit -s is 20480 . recommended: unlimited. .
[WARN] step_base ResultFalseException:On ip : 10.246.37.73, ulimit -s is 20480 . recommended: unlimited.
[WARN] step_base ResultFalseException:On ip : 10.246.37.74, ulimit -s is 20480 . recommended: unlimited.
[WARN] TaskBase execute StepResultFalseException: On ip : 10.246.37.73, ulimit -s is 20480 . recommended: unlimited. .
[WARN] TaskBase execute StepResultFalseException: On ip : 10.246.37.74, ulimit -s is 20480 . recommended: unlimited. .
[WARN] step_base ResultFalseException:Do not warning. swapon is exist. We will check the swap
[WARN] TaskBase execute StepResultFalseException: Do not warning. swapon is exist. We will check the swap .
[WARN] step_base ResultFalseException:Do not warning. swapon is exist. We will check the swap
[WARN] step_base ResultFalseException:Do not warning. swapon is exist. We will check the swap
[WARN] TaskBase execute StepResultFalseException: Do not warning. swapon is exist. We will check the swap .
[WARN] TaskBase execute StepResultFalseException: Do not warning. swapon is exist. We will check the swap .
[WARN] step_base ResultFalseException:not warning ,the DATA_SIZE is not 0 . need check sum(REQUIRED_SIZE)/sum(DATA_SIZE)
[WARN] TaskBase execute StepResultFalseException: not warning ,the DATA_SIZE is not 0 . need check sum(REQUIRED_SIZE)/sum(DATA_SIZE) .
[WARN] step_base ResultFalseException:not warning ,the DATA_SIZE is not 0 . need check sum(REQUIRED_SIZE)/sum(DATA_SIZE)
[WARN] step_base ResultFalseException:not warning ,the DATA_SIZE is not 0 . need check sum(REQUIRED_SIZE)/sum(DATA_SIZE)
[WARN] TaskBase execute StepResultFalseException: not warning ,the DATA_SIZE is not 0 . need check sum(REQUIRED_SIZE)/sum(DATA_SIZE) .
[WARN] TaskBase execute StepResultFalseException: not warning ,the DATA_SIZE is not 0 . need check sum(REQUIRED_SIZE)/sum(DATA_SIZE) .
Check obproxy finished. For more details, please run cmd ’ cat ./check_report//obdiag_check_report_obproxy_2024-12-10-10-20-51.table ’
Check observer finished. For more details, please run cmd’ cat ./check_report//obdiag_check_report_observer_2024-12-10-10-20-51.table ’

可以使用obd进行sysbench压测试试,国产机器当前性能状况
https://www.oceanbase.com/docs/community-obd-cn-1000000001477788#1-title-obd%20test%20sysbench

根据您提供的日志信息,可以看到多个警告和错误信息。这些信息可以帮助我们定位和解决问题。以下是针对每个警告和错误的详细分析和建议:

1. failed_scheduler_tenant_id is exists. Please check the tenant_ids:

这个警告表明在调度器中存在一个已经失败的租户 ID。这可能是由于某个租户的配置或状态不正确导致的。建议您检查租户的配置和状态:

  • 连接到 SYS 租户,查看租户列表:
    SELECT * FROM GV$OB_TENANTS;
    
  • 检查特定租户的状态:
    SELECT * FROM GV$OB_TENANTS WHERE TENANT_ID = <failed_scheduler_tenant_id>;
    

2. net.ipv4.tcp_tw_recycle is not exist

这个警告表明 tcp_tw_recycle 参数不存在。tcp_tw_recycle 参数在某些内核版本中已经被移除,因此这个警告可以忽略。

3. fs.pipe-user-pages-soft : 16384. recommended: 0.

这个警告表明 fs.pipe-user-pages-soft 参数的值为 16384,而推荐值为 0。建议您将该参数设置为 0:

  • 编辑 /etc/sysctl.conf 文件,添加或修改以下行:
    fs.pipe-user-pages-soft = 0
    
  • 应用更改:
    sysctl -p
    

4. getenforce is exist. We will check SELinux by getenforce

这个警告表明 SELinux 已经启用。建议您检查 SELinux 的状态:

  • 查看 SELinux 的当前状态:
    getenforce
    
  • 如果 SELinux 是 enforcing 状态,可以临时将其设置为 permissive 状态:
    setenforce 0
    
  • 如果需要永久禁用 SELinux,编辑 /etc/selinux/config 文件,将 SELINUX=enforcing 修改为 SELINUX=permissiveSELINUX=disabled

5. observer need cpu support avx2. If the cpu is not support avx2, observer will be crash.

这个警告表明 OceanBase 需要 CPU 支持 AVX2 指令集。如果您的 CPU 不支持 AVX2,可能会导致 Observer 崩溃。建议您检查 CPU 是否支持 AVX2:

  • 查看 CPU 信息:
    lscpu
    
  • 确认 CPU 是否支持 AVX2 指令集。如果不支持,建议更换支持 AVX2 的 CPU。

6. ulimit -s is 20480 . recommended: unlimited.

这个警告表明 ulimit -s 的值为 20480,而推荐值为 unlimited。建议您将该参数设置为 unlimited:

  • 编辑 /etc/security/limits.conf 文件,添加或修改以下行:
    * soft stack unlimited
    * hard stack unlimited
    
  • 重启系统或重新登录以应用更改。

7. swapon is exist. We will check the swap

这个警告表明交换分区已经存在。建议您检查交换分区的配置:

  • 查看交换分区的使用情况:
    swapon --show
    
  • 如果交换分区的大小不合适,可以调整其大小或禁用交换分区:
    swapoff /dev/sdX
    

8. not warning ,the DATA_SIZE is not 0 . need check sum(REQUIRED_SIZE)/sum(DATA_SIZE)

这个警告表明 DATA_SIZE 不为 0,需要检查 REQUIRED_SIZEDATA_SIZE 的比例。建议您检查相关表的存储情况:

  • 连接到 SYS 租户,查看表的存储情况:
    SELECT SUM(REQUIRED_SIZE), SUM(DATA_SIZE) FROM GV$OB_TABLES;
    

9. Check obproxy finished. For more details, please run cmd ' cat ./check_report//obdiag_check_report_obproxy_2024-12-10-10-20-51.table '

10. Check observer finished. For more details, please run cmd' cat ./check_report//obdiag_check_report_observer_2024-12-10-10-20-51.table '

这两个信息表明 obdiag 工具已经完成了对 OBProxy 和 Observer 的检查,并生成了详细的报告。建议您查看这些报告以获取更多详细信息:

  • 查看 OBProxy 的检查报告:
    cat ./check_report//obdiag_check_report_obproxy_2024-12-10-10-20-51.table
    
  • 查看 Observer 的检查报告:
    cat ./check_report//obdiag_check_report_observer_2024-12-10-10-20-51.table
    

通过以上步骤,您可以逐步排查并解决这些问题。如果问题仍然无法解决,建议联系 OceanBase 的技术支持团队获取进一步的帮助。

检索到的文档如下:

  1. 客户端连接
  2. 连接诊断
  3. 使用示例

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

obdiag巡检后有一个结果文件,你把结果文件发出来

./check_report//obdiag_check_report_obproxy_2024-12-10-10-20-51.table ./check_report//obdiag_check_report_observer_2024-12-10-10-20-51.table ’

我服务器已经安装obclient,但是还是会报[ERROR] No such package: obclient,如何跳过

obdiag巡检结果文件发出来,执行什么命令报错[ERROR] No such package: obclient

不需要-obclient参数,如果是生产环境建议不要进行sysbench压测。obdiag巡检结果文件发出来

https://www.alipan.com/t/hQKYbKnCg0KXSCAwpXwF

可以附件发出来么,这边访问不了

文件太大上传不上
能加你个钉钉吗

obdiag 巡检文件太大?不应该啊,就是一个文本文件,应该是KB级别

建议还是从慢SQL入手,确定没有慢SQL再从基础环境或者参数、架构侧来判断