数仓现网案例丨超大结果集接收异常

案例,超大,结果,接收,异常 · 浏览次数 : 23

小编点评

**问题背景** *内核版本:GaussDB 8.1.3 *问题描述:用户使用数据库客户端工具如navicat、dbeaver等执行查询语句异常中断,中断信息\"Last read message sequence %d is not equal to the max written message sequence %d\" **定位异常中断原因** * 当临时文件超出最大值时,先将其发送至客户端,此时客户端断连(如产生oom),数据发送中断,此时已发送数据量与已写入临时文件的数据量不一致,因此产生报错Last read message sequence %d is not equal to the max written message sequence %d **解决方案** 1. 通过业务语句的改写或客户端环境的改善来解决超大结果集的查询问题。 2. 设置cn_send_buffer_size参数来指定CN端数据发送数据缓存区的大小。 3. 通过分页或游标多次查询来增大客户端支持的运行内存,防止内存不足。

正文

本文分享自华为云社区《GaussDB(DWS)现网案例之超大结果集接收异常》,作者:你是猴子请来的救兵吗 。

问题背景

内核版本 GaussDB 8.1.3

问题描述 用户使用数据库客户端工具如navicat、dbeaver等执行查询语句异常中断,中断信息"Last read message sequence %d is not equal to the max written message sequence %d"

问题定位

客户端异常中断后有些错误信息时不感知的,此时topsql就派上了用场。历史topsql记录了查询作业运行结束时的资源使用情况(包括内存、下盘、CPU时间等)和运行状态信息(包括报错、终止、异常等)以及性能告警信息。而对于由于FATAL、PANIC错误导致查询异常结束时,状态信息列只显示aborted,无法记录详细异常信息。

1,此时我们通过历史topsql查询视图查询语句执行情况

--当前CN

select * from GS_WLM_SESSION_HISTORY;

--所有CN

select * from PGXC_WLM_SESSION_HISTORY;

cke_124.png

根据topsql记录结果发现语句存在abort_info为

Last read message sequence %d is not equal to the max written message sequence %d

可知,查询执行遇到FATAL、PANIC错误导致查询异常结束

2,接着确认日志信息,通过线程ID查看当时语句执行情况,发现客户端存在异常中断

cke_125.png

根因分析

前提:

cn_retry开启+查询语句+max_cn_temp_file_size临时文件开启

发送逻辑:

服务端执行查询之后,会通过发送缓冲区往客户端发送数据;当查询结果集过大,则发送缓冲区满了之后,会往临时文件写数据;当临时文件超出max_cn_temp_file_size指定的最大值时(此时会禁用cn_retry),需要分批发送,此时会先将已写入临时文件的数据发送至客户端;然后继续将剩余数据写入新的临时文件发送,以此循环,直到所有数据发送完成。

cke_126.png

问题场景:

当临时文件超出最大值时,先将其发送至客户端,此时客户端断连(如产生oom),数据发送中断,此时已发送数据量与已写入临时文件的数据量不一致,因此产生报错

Last read message sequence %d is not equal to the max written message sequence %d

此报错代表已写入临时文件的数据与已发送到客户端的数据量不一致,实际场景为客户端异常导致的发送数据中断,因此报错内容符合预期。

cke_127.png

相关知识

相关guc参数:

1,cn_send_buffer_size:指定CN端数据发送数据缓存区的大小。整型,8~128, 单位为KB。默认8KB

2,max_cn_temp_file_size:指定SQL语句出错自动重试功能中CN端使用临时文件的最大值,设定为0表示不使用临时文件。默认5G

相关日志记录:

1,临时文件超出max_cn_temp_file_size,记录" %s temp file exceeded, max temp file size : %d KB, current result size : %ld KB"

2,客户端异常导致数据发送失败,记录"could not send data to client [ Remote IP: %s PORT: %s]. detail:%s"

3,数据发送中断或结束,当已发送数据和已写入临时文件的数据量不一致时,记录"Last read message sequence %d is not equal to the max written message sequence %d"

场景复现

创建普通表即可,导入一定量的数据,执行简单查询使其返回较大的结果集,如

select * from store_sales;

为了方便场景复现,临时将允许的临时文件最大值调整为500M,便于触发分批发送。

1,正常接收场景

此时客户端环境内存足够,可正常接收数据,超大结果集将通过临时文件下盘的方法分批发送,直到所有数据发送完成。

cke_128.png

2,异常中断场景

此时客户端环境允许的数据量优先,超大结果集将分批发送的过程中,客户端触发OOM异常中断,服务端会记录客户端异常发送失败信息以及已发送数据不一致的错误信息。

cke_129.png

cke_130.png

改善办法

1,避免超大结果集的查询,如果无法避免,则通过分页或游标多次查询

2,增大客户端支持的运行内存,防止内存不足

知识小结

1,报错Last read message sequence %d is not equal to the max written message sequence %d为超大结果集返回异常中断时的报错,符合预期,需通过业务语句的改写或客户端环境的改善来解决。

2,TopSQL查询监控的原理和适用方法可参考:GaussDB for DWS 资源监控核心技术解密: TopSQL查询监控解密

点击关注,第一时间了解华为云新鲜技术~

与数仓现网案例丨超大结果集接收异常相似的内容:

数仓现网案例丨超大结果集接收异常

用户使用数据库客户端工具如navicat、dbeaver等执行超大结果集的查询语句导致异常中断,中断信息Last read message sequence %d is not equal to the max written message sequence %d。

教你如何进行数仓字符串、二进制、十六进制互转

现网中遇到很多小伙伴不清楚字符串与进制之间的转换方法,其实在GaussDB(DWS)中,进制转换是非常方便的。

数仓性能调优:如何进行函数下推

摘要:本文主要描述下函数在满足特征的前提下可以把函数属性定义为下推属性。 本文分享自华为云社区《GaussDB(DWS)性能调优:函数下推》,作者:譡里个檔 。 DWS作为MPP架构的数仓产品,其性能优势主要在分布式计算上。默认情况下,DWS为了保证结果的正确性,自定义函数默认属性是不下推的,这会导

数仓在线运维:如何进行在线增删CN?

摘要:集群运行过程中,根据集群的综合负载和业务接入情况进行分析:增加CN可以适当降低CPU消耗,增大接入连接数,分散CN节点业务压力,根据实际情况来识别是否要增加CN,如果是提升集群容量和扩展比能力,建议进行扩容操作。 本文分享自华为云社区《【玩转PB级数仓GaussDB(DWS)】在线运维-在线增

数仓专家面对面 | 为什么我选择GaussDB(DWS)

摘要:你知道数仓是如何应运而生的吗?你了解数仓未来的发展趋势吗?想知道国内数仓专家的看法吗? 导语 数据仓库的发展一直是备受关注的议题,随着近年来技术的不断演进,数仓也在更新迭代。 你知道数仓是如何应运而生的吗?你了解数仓未来的发展趋势吗?想知道国内数仓专家的看法吗? 今天我们邀请到了华为云数据仓库

【数仓运维实践】关于GaussDB(DWS)单SQL磁盘空间管控

摘要:本文主要讲解数仓运维中遇到单SQL磁盘空间管控问题的解析和方案。 本文分享自华为云社区《GaussDB(DWS)运维 -- 单SQL磁盘空间管控》,作者: 譡里个檔。 【问题描述】 执行部分SQL语句时出现如下报错信息(具体数值可能因为配置有差异),本文针对根因和场景触发场景,确定触发此类问题

数仓如何进行表级控制analyze?

摘要: 介绍如何设置采样大小和表级控制analyze。 本文分享自华为云社区《GaussDB(DWS) 如何表级控制analyze》,作者:leapdb。 一、控制采样大小 【设置全局采样大小】 通过参数default_statistics_target设置全局默认采样大小。 a.default_s

数仓安全测试之SSRF漏洞

摘要:SSRF (Server-Side Request Forgery,服务器端请求伪造)是指由攻击者构造请求,然后利用服务器的漏洞以服务端的身份向内网发送请求对内网发起攻击。 本文分享自华为云社区《GaussDB(DWS)安全测试之SSRF漏洞》,作者: ACBD。 1. 什么是SSRF漏洞 S

数仓实践丨主动预防-DWS关键工具安装确认

摘要:gdb确认是否安装,所带来的该工具用户数据库实例触发core问题后集群状态反复异常,对此问题及时分析根因并及时进行规避。 本文分享自华为云社区《主动预防-DWS关键工具安装确认》,作者:上官寒雨。 【关键工具确认】 1、gdb确认是否安装(该工具用户数据库实例触发core问题后集群状态反复异常

数仓性能调优:大宽表关联MERGE性能优化

摘要:本文主要为大家讲解在数仓性能调优过程中,关于大宽表关联MERGE性能优化过程。 本文分享自华为云社区《GaussDB(DWS)性能调优:大宽表关联MERGE性能优化》,作者:譡里个檔。 【业务背景】 如下MERGE语句执行耗时长达2034s MERGE INTO sdifin.hah_ae_l