【 使用环境 】生产环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
【 使用环境 】生产环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
对于提高 INSERT INTO 操作的效率,可以从多个方面着手,包括但不限于参数调整、索引优化、数据模型设计等。下面是几个可能有帮助的参数和方法:
batch_insert_size:
batch_insert_size 的值,但需要注意的是过大的值可能导致内存占用过高或事务过长。memstore_limit_percentage 和 memstore_limit_abs:
freeze_trigger_percentage 和 freeze_trigger_diff_percentage:
enable_minor_freeze:
minor_freeze_times 和 major_freeze_times:
您可以使用 obdiag 工具来收集和分析与性能相关的日志,特别是 SQL 性能问题相关的日志。这将有助于您进一步了解 INSERT INTO 操作的性能瓶颈所在。
日志采集场景: SQL性能问题
日志采集命令: obdiag gather scene run --scene=observer.perf_sql --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, trace_id=‘Yxx’}”
为了更有效地解决问题,我们需要您提供一些额外的信息:
INSERT INTO 操作的具体 SQL 语句是什么?batch_insert_size、memstore_limit_percentage 和 freeze_trigger_percentage 等关键参数的配置情况。请根据上述建议调整参数,并使用 obdiag 工具收集相关日志。如果有任何问题或需要进一步的帮助,请随时联系。
附上敏捷诊断工具 obdiag 使用帮助链接
为了提高 INSERT INTO 的效率,您可以考虑调整以下参数,特别是在生产环境中使用 OceanBase 数据库时:
并行执行线程数量:
# 租户在每个节点上可申请的并行执行线程数量
SET GLOBAL parallel_servers_target = 624;
增加并行执行线程数量可以提升并行处理能力,从而加快数据插入速度。
事务超时时间:
# 设置事务超时时间
SET GLOBAL ob_trx_timeout = 36000000000;
增加事务超时时间可以避免因超时而导致的事务中断,尤其是在大量数据插入时。
SQL 最大执行时间:
# 设置 SQL 最大执行时间
SET GLOBAL ob_query_timeout = 36000000000;
增加 SQL 最大执行时间可以确保长时间运行的插入操作不会被中断。
SQL 工作区内存占整个租户内存百分比:
# 设置 SQL 工作区内存占整个租户内存百分比
SET GLOBAL ob_sql_work_area_percentage = 80;
增加 SQL 工作区的内存占比可以提高查询和插入操作的性能。
关闭 SQL 审计功能:
# 关闭 SQL 审计功能
ALTER system SET enable_sql_audit=false;
关闭 SQL 审计功能可以减少日志记录,从而提高插入效率。
关闭性能事件的信息收集功能:
# 关闭性能事件的信息收集功能
ALTER system SET enable_perf_event=false;
关闭性能事件的信息收集功能可以减少系统开销,提高插入效率。
设置系统日志级别为 ERROR:
# 设置系统日志级别为 ERROR
ALTER system SET syslog_level='ERROR';
减少日志记录可以提高系统性能。
关闭记录追踪日志:
# 关闭记录追踪日志
alter system set enable_record_trace_log=false;
关闭记录追踪日志可以减少系统开销,提高插入效率。
使用旁路导入功能:
如果没有事务要求,可以使用 INSERT INTO SELECT 加上旁落导入功能,一次性将数据插入到新表。这种方式既可以缩短导入时间,也可以避免写入太快导致内存不足的问题。
# 适用于 V4.1 及之后版本
INSERT INTO target_table SELECT * FROM source_table;
调整 clog 盘阈值:
如果 clog 盘空间不足,可以通过调整以下参数来优化 clog 盘的使用:
# 调整 clog 盘阈值
ALTER system SET log_disk_utilization_limit_threshold = 98 server ='[IP 地址]:2882';
磁盘划分:
在资源充足的情况下,推荐分别挂载三块磁盘并使用 SSD 存储,如果机器上没有三块磁盘,或者使用的是 RAID 磁盘阵列,需要对磁盘或者磁盘阵列的逻辑卷进行分区。这可以减少磁盘竞争,提高写入性能。
以上参数的调整需要根据实际业务场景和资源情况进行合理配置,建议在调整前进行充分的测试和评估。
详情请参考:
收集下详细的SQL信息看下
obdiag gather scene run --scene=observer.perf_sql [options]
https://www.oceanbase.com/docs/common-obdiag-cn-1000000004222779
弄不明白这个obdiag这个工具还有其他方法吗
哪里不明白?我找obdiag的研发给你回复解答
权限问题没有授权linux的用户密码
没有OS的账号 好像是不行
这个文件能看出来配置,参数设置,状态等信息,应该还有个plan_monitor文件 也发下吧

生成了只有这一个文件
谢谢
hello 想问下这是在配置正常的情况下执行的么?我看缺失的文件还挺多的,如果是linux的密码配置的话,obdiag也支持免密模式配置节点
应该是没有密码的问题,这个两亿条数据插入用时一小时40分正常吗
有免密怎么配置
从数量级来看问题不大,而且还要解析json数据
免密这一行不要
--config obcluster.servers.global.ssh_password=****** \