丹凤千字科普:电脑开机句柄无效怎么处理(详细资料介绍)

一、背景
随着云计算技术的普及和数据分析需求的日益增长,数据湖与数据仓库的融合,即湖仓一体技术,已成为下一代数据分析系统的核心能力。数据湖在成本、灵活性以及多源数据分析等方面具有显著优势。随着IDC发布的趋势预测,数据湖分析技术将涉及跨系统集成能力、数据控制能力和全面的数据驱动能力等多个重要领域。
AnalyticDB PostgreSQL版(简称ADB PG)是阿里云数据库团队基于PostgreSQL内核打造的一款云原生数据仓库产品。它在PB级数据实时交互式分析、HTAP、ETL、BI报表生成等业务场景拥有独特的技术优势。本文将介绍ADB PG如何基于PostgreSQL的外表(Foreign Table)功能实现湖仓一体分析能力,并以OSS外表分析为例,探讨其面临的技术挑战及解决方案。
二、问题与需求分析
ADB PG通过继承PostgreSQL的外表功能,实现了对多种数据源的分析和写入能力。基于外表,ADB PG可以查询和写入其他数据分析系统的数据,同时兼容多种数据源,复用ADB PG原有的优化器和执行引擎优势。外表数据的分析依赖于外部SDK和网络IO,因此需要在技术层面进行不同于本地存储的性能优化。
本文主要以OSS外表数据读写为例,探讨ADB PG在构建湖仓一体分析能力时遇到的重要问题和解决方案。OSS是一种阿里云提供的低成本分布式存储系统,存储了大量冷热数据并具有大规模数据分析需求。为了方便开发者扩展,OSS提供了多种主流开发语言的SDK。ADB PG选择了OSS C SDK进行开发,并已支持OSS外表分析的各项功能。
三、外表分析技术优化
在开发OSS外表分析过程中,ADB PG解决了一些核心技术问题。
3.1 网络碎片请求问题
在分析型数据库场景中,列式存储在IO性能上通常优于行式存储。但在某些场景下,如处理大宽表时,扫描性能较高的列存格式可能不如扫描CSV行存文本格式。这主要是因为频繁的网络交互和单次请求数据量过小导致的性能问题。
为了解决这个问题,ADB PG通过缓存机制减少碎片化的网络请求。在每次扫描OSS数据时,它会“预加载”足够的数据并缓存。当需要数据时,首先判断数据是否命中缓存,如果命中则直接返回;否则继续下一轮次的“预加载”。通过这种方式,网络请求次数减少,单次请求效率提高。缓存大小可配置,默认大小为1MB。
3.2 列过滤与谓词下推
为了减少网络IO的带宽资源消耗,ADB PG在处理ORC、Parquet格式文件时采用了列过滤和谓词下推技术。
列过滤是指只请求SQL查询所需的数据列,忽略不需要的列。由于ORC、Parquet是列式存储格式,因此在发起网络请求时只需请求所需列的数据范围。ORC和Parquet会对数据进行压缩处理,进一步减小IO。
谓词下推是将上层过滤条件移动到下层的外表扫描节点,使外表扫描在进行网络请求时能够过滤掉不符合查询条件的数据块。在ORC/Parquet格式中,每个block头部会保存该block的统计数据,如每列数据的min/max/sum等。当进行外表扫描时,会先读取block头部的统计信息,与下推的查询条件进行比较,从而决定是否跳过该数据块。这大大减少了网络IO。
3.3 “996”问题
在处理OSS数据时,可能会遇到一种常见的错误码“996”,这通常是由于网络异常导致的OSS外表导入导出失败。为了解决这一问题,ADB PG对CURL句柄的回收接口进行了改进,增加了对CURL句柄状态的检查。对于异常的CURL句柄进行销毁而不是放回连接池中。这样避免了连接池中无效CURL句柄的积累。当客户端接口重试时,会选择有效的CURL连接或创建新的连接进行通信。
3.4 内存管理方案的兼容问题
ADB PG基于PostgreSQL内核打造,也继承了其内存管理机制。而OSS C SDK使用的是线程安全的内存上下文APR Pool。为了解决这个问题,我们对OSS C SDK接口所持有的内存的生命周期进行了明确的管理。通过两种方式申请APR Pool的内存,确保内存管理的安全性。
3.5 数据格式的兼容和优化
OSS上的数据大多采用CSV、ORC、Parquet等格式。在进行外表扫描时,数据类型转换是不可避免的步骤。为了减少类型转换带来的CPU消耗,进一步优化外表查询性能,ADB PG在导出外表数据时跳过了类型转换步骤。例如,在导出ORC外表时,可以将任意数据类型直接写入为ORC的Binary类型。查询时无需进行数据类型转换,减少了CPU消耗。根据TPCH查询测试结果,整体查询性能可以提升15%-20%左右。
四、性能测试
关于ADB PG中如何使用外表分析功能,请参考阿里云产品手册。除了建表语句不同外,对外表的操作和对本地表的操作几乎相同,学习难度低。我们在这里对比了OSS外表分析场景与本地表分析场景的性能问题。测试结果显示,OSS外表的查询性能略慢于本地表,
