• [技术干货] 持续学习的目标与特性
    持续学习,又称终身学习,是个体与组织在动态发展环境中,通过持续获取知识、提升技能、更新思维,实现自我迭代与价值提升的学习模式。其核心并非单纯积累知识,而是培养适应变化、解决复杂问题的能力,既是个人成长的核心路径,也是组织保持竞争力的关键支撑,适配当下快速迭代的社会与行业需求,全文围绕其核心目标与鲜明特性展开,精准控制篇幅。持续学习的核心目标可分为三个层面,层层递进、相辅相成。其一,个人层面,实现自我完善与能力升级,打破知识与技能的局限,适配职业发展需求,应对岗位迭代带来的挑战,同时丰富精神世界,提升综合素养。其二,组织层面,汇聚个体学习成果,形成团队学习氛围,推动技术创新、管理优化,增强组织的灵活性与竞争力,实现可持续发展。其三,社会层面,推动个体与社会协同进步,助力知识传播与文明传承,形成良性的学习生态。相较于传统阶段性学习,持续学习具备鲜明的固有特性,这也是其适配时代发展的核心优势。首先是终身性,它打破了“学校学习为终点”的认知,将学习贯穿个体一生,涵盖少年、青年、中年至老年的各个阶段,适配不同人生阶段的需求。其次是自主性,持续学习以个体主动需求为驱动,而非被动接受灌输,个体可根据自身目标、兴趣选择学习内容与方式,体现主体性价值。再者是实用性与针对性,持续学习紧密贴合实际需求,聚焦解决现实问题、提升实用技能,摒弃冗余的理论堆砌,无论是个人职业提升还是组织发展需求,都能实现“学用结合”。最后是动态适应性,它能紧跟时代发展与行业变革,及时更新学习内容与方式,应对技术革新、观念迭代带来的变化,确保学习成果的时效性与价值性。持续学习的目标与特性相互支撑,目标指引学习方向,特性保障学习效果。在当下快速发展的时代,唯有坚守持续学习的理念,把握其核心目标、顺应其固有特性,才能实现个人与组织的长效发展,在变化中保持核心竞争力。
  • [技术干货] 混合并行
    混合并行是分布式深度学习领域的高阶协同技术,核心是融合两种及以上基础并行策略(如数据并行、模型并行、优化器并行),根据计算任务特征、模型规模与硬件资源,对任务、数据、模型、优化器进行分层拆分与协同调度,实现算力、内存资源的最大化利用。它解决了单一并行技术适配超大模型训练时的局限,是千亿级、万亿级参数大模型高效训练的核心方案。单一并行技术的局限性的是混合并行诞生的核心原因:数据并行虽能提升计算效率,但无法解决超大模型内存不足的问题;模型并行可突破内存瓶颈,但通信开销大、算力利用率易偏低;优化器并行仅聚焦参数更新,需配合其他并行技术才能发挥作用。混合并行通过“优势互补”,将不同并行策略结合,兼顾效率与内存,适配复杂的大模型训练场景。混合并行的核心实现逻辑是“分层拆分、协同调度”,最常见的组合是数据并行与模型并行的融合。例如,在大语言模型训练中,先通过模型并行将庞大的模型按层拆分到多个节点,解决单节点内存不足的问题;再对每个模型节点分配数据分片,采用数据并行提升计算效率,同时搭配优化器并行拆分参数更新任务,降低通信与计算开销,形成“模型+数据+优化器”的三维协同并行体系。混合并行的优势在于灵活性与高效性兼具,可根据实际需求灵活组合不同并行策略,适配从中小模型到超大模型、从普通服务器到大规模集群的各类场景。其关键在于合理规划拆分粒度与通信策略,避免不同并行策略之间的冲突,平衡算力利用、内存消耗与通信延迟,确保整体并行效率最大化。目前,混合并行已成为大模型训练的标配技术,广泛应用于大语言模型、图像生成模型、自动驾驶模型等领域。它不仅突破了单一并行技术的瓶颈,还降低了超大模型训练的硬件门槛,通过多策略协同,让有限的硬件资源发挥最大价值。作为并行技术的高阶形态,混合并行正不断优化拆分与调度算法,推动人工智能向更复杂、更智能的方向迭代。
  • [技术干货] 自动并行
    自动并行是分布式深度学习与大数据处理中的智能化并行技术,核心是通过专用框架自动分析计算任务、数据特征与硬件资源,无需用户手动干预,即可自动完成任务拆分、资源分配与并行执行,实现计算效率的提升。它是并行技术的智能化升级,打破了手动并行、半自动并行的操作门槛,让非专业开发者也能高效利用多设备算力,广泛应用于各类分布式计算场景。自动并行的核心逻辑是“全流程自动化决策”,其核心依赖于并行框架的智能分析能力。框架会先解析整个计算任务的逻辑(如深度学习中的计算图、大数据中的处理流程),识别可并行的模块——包括数据层面的可拆分部分、模型层面的可分层部分,以及优化器的可并行任务;再结合硬件资源(节点数量、内存、算力),自动选择最优并行策略,无需用户手动指定分片规则、并行粒度或通信方式。与手动并行、半自动并行相比,自动并行的最大优势是易用性极强,无需用户具备深厚的分布式计算知识,仅需编写串行任务代码,框架即可自动完成并行化转换。同时,它能快速适配不同硬件环境与任务规模,自动调整并行策略,减少用户的调试成本。例如,在简单模型训练中,框架可自动采用数据并行;在超大模型训练中,可自动融合数据并行与模型并行,实现算力高效利用。自动并行也存在一定局限性:由于完全依赖框架自动决策,面对复杂、特殊的计算任务时,难以实现精细化优化,可能出现算力浪费、通信延迟过高的问题,优化效果通常略逊于手动并行与半自动并行。因此,它更适配中小规模计算任务、快速迭代场景,而非对性能要求极致的超大模型训练。目前,自动并行已成为主流深度学习框架的核心功能,极大推动了并行技术的普及。它既降低了分布式计算的入门门槛,又能满足多数场景的效率需求,与手动并行、半自动并行形成互补,根据不同任务需求灵活选用。作为并行技术的智能化方向,自动并行正不断优化决策算法,缩小与手动优化的差距,助力分布式计算更广泛地落地应用。
  • [技术干货] 半自动并行
    半自动并行是分布式深度学习与大数据处理中的折中优化技术,介于手动并行与全自动并行之间,核心是通过框架自动分析计算任务特征,结合用户少量手动干预,实现计算任务、数据或模型的高效并行拆分与执行。它既解决了手动并行门槛高、操作复杂的问题,又弥补了全自动并行难以精准适配复杂任务、优化效果有限的短板,是兼顾易用性与高效性的主流并行方案。与手动并行、全自动并行相比,半自动并行的核心优势在于“协同优化”。手动并行需用户手动拆分任务、分配资源,对技术能力要求极高,且适配性差;全自动并行完全依赖框架自动决策,虽操作简便,但难以根据具体任务的计算特点、硬件资源精准优化,易出现算力浪费或通信瓶颈。而半自动并行仅需用户指定核心优化目标(如优先节省内存、提升速度),框架即可自动完成任务拆分、资源分配,同时支持用户手动调整关键参数,灵活适配不同场景。半自动并行的实现逻辑主要分为两步:首先,框架自动分析计算图、数据规模、硬件资源,识别可并行的任务模块(如数据分片、模型分层),初步完成并行策略规划;其次,用户根据自身需求,手动调整并行粒度、分片规则或通信策略,优化框架的自动决策,确保并行执行效率最大化。例如,在模型训练中,框架可自动识别可并行的网络层,用户只需手动指定数据分片比例,即可实现数据与模型的协同并行。在实际应用中,半自动并行适配场景广泛,尤其适用于中等规模模型训练、复杂大数据分析等场景——这类场景既不需要手动并行的精细化控制,又无法通过全自动并行实现最优效果。无论是科研场景中的快速模型迭代,还是工业场景中的批量数据处理,半自动并行都能在降低操作门槛的同时,充分利用硬件资源,平衡效率与易用性。半自动并行的核心挑战在于框架自动决策与用户手动干预的平衡,过度干预会增加操作成本,过度依赖自动决策则会影响优化效果。目前,主流深度学习框架均支持半自动并行功能,它以其易用性与高效性的平衡,成为普通开发者、科研人员实现分布式计算的首选方案,助力并行技术的普及与落地。
  • [技术干货] 优化器并行
    优化器并行是分布式深度学习训练中的关键协同技术,核心是将模型优化器的计算与更新任务拆分到多个计算单元,与模型并行、数据并行协同工作,减少优化器计算与通信开销,提升超大模型训练的效率与稳定性。它聚焦于训练过程中的参数更新环节,解决了单设备处理海量模型参数优化时,算力不足、通信延迟过高的痛点,是千亿级以上参数大模型落地的重要支撑。在深度学习训练中,优化器的核心作用是根据模型计算的梯度,更新模型参数以降低训练误差,而超大模型的参数规模可达千亿甚至万亿级别,单设备执行优化器更新任务会面临严重瓶颈。优化器并行通过“参数分片、协同更新”的逻辑,将模型参数按一定规则拆分到多个节点,每个节点仅负责自身分片参数的梯度计算、优化更新,再通过高效通信同步参数更新结果,实现全局模型参数的一致性更新。与模型并行、数据并行不同,优化器并行不拆分模型结构或数据集,而是聚焦于优化器的核心任务,三者可灵活融合。例如,在大模型训练中,可结合模型并行拆分模型结构,结合数据并行拆分训练数据,再通过优化器并行拆分参数更新任务,让各节点各司其职——模型节点负责前向、反向计算,数据节点负责数据分片处理,优化器节点负责参数更新,大幅提升整体训练效率。优化器并行的核心优势的是降低单节点算力与通信压力,提升参数更新效率。一方面,每个节点仅处理部分参数的优化更新,减少单节点的计算负载;另一方面,节点间仅需同步参数更新结果,而非海量梯度数据,大幅降低通信开销,缓解分布式训练中的通信瓶颈。同时,它具备良好的扩展性,可根据节点数量灵活调整参数分片策略,适配不同规模的模型训练需求。实际应用中,优化器并行需注意参数分片的合理性与节点间的同步效率,避免分片不均导致的算力浪费,或同步延迟影响训练稳定性。目前,它已广泛应用于大语言模型、复杂图像生成模型的训练中,与其他并行技术协同,实现了“算力高效利用、内存压力缓解、训练速度提升”的目标,成为分布式深度学习领域不可或缺的核心优化技术。
  • [技术干货] 重计算
    重计算(也称为重新计算)是分布式计算、深度学习训练中的核心内存优化技术,核心逻辑是通过“牺牲部分算力”,换取内存资源的释放与高效利用——即在计算过程中不存储所有中间结果,仅保留核心输入与参数,当后续步骤需要某一中间结果时,通过重新执行前置计算过程,再次生成该结果,以此减少内存占用,突破硬件内存瓶颈。重计算的诞生,源于内存资源与计算任务的核心矛盾。在超大模型训练、海量数据处理等场景中,模型的中间计算结果(如神经网络的特征图、梯度中间值)会占用大量内存,甚至超出单设备内存上限,导致训练中断。此时,若单纯增加硬件内存,会大幅提升成本,而重计算通过“舍算力、保内存”的权衡,无需额外硬件投入,就能实现任务正常推进。重计算的应用重点的是“精准选择重计算对象”,避免盲目重计算导致算力浪费。通常会选择计算开销小、但存储开销大的中间结果放弃存储,仅保留计算链路短、重算成本低的关键节点。例如在深度学习训练中,神经网络的浅层特征图计算简单,但存储量大,可采用重计算策略;而深层核心参数计算复杂,需优先存储,避免反复重算消耗过多算力。与其他内存优化技术相比,重计算的核心优势是灵活性高、适配性强,无需修改模型结构,仅通过调整中间结果的存储策略,就能适配不同硬件内存规格。其局限性在于会增加一定的算力开销与计算时间,因此实际应用中需平衡内存节省与算力消耗,根据任务优先级动态调整重计算策略。目前,重计算已广泛应用于大语言模型训练、计算机视觉、科学计算等领域,常与数据并行、模型并行技术结合使用,形成“内存+算力”的协同优化方案。它不仅解决了超大模型训练中的内存瓶颈问题,还能降低硬件投入成本,成为兼顾性能与经济性的关键技术,助力复杂计算任务的高效落地。
  • [技术干货] 内存优化
    内存优化是通过合理管理、分配与回收内存资源,减少内存占用、避免内存泄漏,从而提升设备运行效率、保障程序稳定运行的关键技术。无论是终端设备(手机、电脑),还是服务器、嵌入式设备,内存资源均有限,尤其在大数据处理、人工智能训练、高频并发服务等场景中,内存优化直接决定程序的响应速度与稳定性,是系统与应用性能优化的核心环节。内存优化的核心目标的是“物尽其用”,既要避免内存闲置浪费,也要防止内存过度占用导致程序卡顿、崩溃或系统死机。其核心逻辑是减少无效内存消耗、提升内存复用率,通过科学的管理策略,让有限的内存资源优先分配给核心任务,同时及时回收不再使用的内存,释放资源占用。实际应用中,内存优化有多种常用方法,适配不同场景需求。基础层面,通过内存分配优化,避免频繁分配小内存块,减少内存碎片——内存碎片过多会导致明明有剩余内存,却无法分配给需要连续内存的任务,造成资源浪费。其次,采用内存复用机制,对常用数据、对象进行缓存,避免重复创建与销毁,降低内存分配与回收的开销。针对程序运行中的内存泄漏问题,通过代码检测与优化,及时释放不再使用的内存资源,这是长期运行程序(如服务器、后台服务)内存优化的重点——内存泄漏会导致内存占用持续升高,最终引发程序崩溃。此外,根据设备与场景需求,压缩内存数据、精简不必要的内存占用,也是常用的优化手段。内存优化的价值体现在各个领域:手机端优化可减少卡顿、延长续航;服务器端优化可提升并发能力、降低硬件成本;人工智能训练中,内存优化可突破内存限制,支撑超大模型训练与海量数据处理。合理的内存优化,无需增加硬件投入,就能显著提升设备与程序的运行效能,是兼顾性能与成本的核心技术,也是各类程序开发与系统运维的必备能力。
  • [技术干货] 模型并行
    模型并行是分布式计算与深度学习领域的关键技术,核心是将庞大的模型结构拆分为多个独立模块,分配到不同计算单元(GPU、CPU或服务器节点)并行执行,通过模块间的协同通信,完成整体模型的计算任务。它与数据并行相辅相成,专门解决单设备因内存、算力不足,无法承载超大模型训练与推理的痛点,是大语言模型、复杂图像模型落地的核心支撑。与数据并行“同模型、多数据”的思路不同,模型并行遵循“同数据、多模型模块”的逻辑。在超大模型(如千亿、万亿参数模型)训练中,单张GPU的内存无法容纳整个模型的参数,此时模型并行会按层或按功能拆分模型——例如将神经网络的卷积层、池化层分配到节点A,全连接层、输出层分配到节点B,输入相同的数据集后,各节点同步执行对应模块的计算,再通过通信链路传递中间结果,最终输出完整计算结果。模型并行的拆分方式主要分为两种:按层拆分(纵向拆分)和按特征图拆分(横向拆分)。按层拆分简单易实现,适用于层级清晰的模型;按特征图拆分则将同一层的特征图分成多份,分配给不同节点并行计算,能进一步提升单一层级的计算效率,但对节点间的通信延迟要求更高。无论哪种方式,核心都是通过拆分模型,让各计算单元专注于自身负责的模块,充分利用多设备的算力资源。在实际应用中,模型并行已成为大模型落地的必备技术。例如ChatGPT等大语言模型,其参数规模达千亿级别,单设备无法承载,需通过数百甚至数千张GPU组成集群,采用模型并行与数据并行结合的方式,才能完成训练与推理。此外,在自动驾驶、医疗影像分析等领域,复杂模型的参数与计算量巨大,模型并行能有效降低单设备压力,提升计算速度与模型性能。模型并行的核心挑战的是节点间的通信延迟,中间结果的传递会影响整体效率,因此常需搭配高效通信协议与硬件加速。但随着技术发展,模型并行的拆分策略不断优化,与数据并行的融合应用日益成熟,已成为突破单设备算力瓶颈、推动超大模型技术迭代的关键力量,助力人工智能向更复杂、更智能的方向发展。
  • [技术干货] 数据并行
    数据并行是分布式计算领域的核心范式,本质是将大规模数据集拆分成若干独立的小数据块,分配给多个计算单元(如 CPU 核心、GPU 卡、服务器节点)同时处理,最终将各单元的计算结果汇总,完成整体任务。这种 “分而治之” 的思路,解决了单台设备处理海量数据时效率低下、耗时过长的问题,是人工智能训练、大数据分析、科学计算等场景的关键技术支撑。 从实现逻辑来看,数据并行的核心是 “同算法、多数据”。以深度学习训练为例,假设要训练一个图像识别模型,若用单卡 GPU 处理 10000 张图片,需逐一输入模型迭代优化;而数据并行模式下,会将 10000 张图片平均拆成 10 份,分配给 10 张 GPU 卡,每张卡运行相同的模型参数,独立计算 1000 张图片的梯度,再通过梯度同步(如 AllReduce 算法)将所有卡的梯度汇总,更新全局模型参数。这个过程中,所有计算单元执行的是完全相同的算法逻辑,仅处理的数据分片不同,既避免了单节点的性能瓶颈,又保证了计算结果的一致性。 数据并行的优势在数据量和计算量呈指数增长的当下尤为突出:一方面,它能线性提升计算效率 —— 理论上,N 个计算单元并行处理,效率可提升至单单元的 N 倍(排除通信开销);另一方面,它降低了单设备的资源压力,普通服务器集群也能通过数据并行处理 TB 级甚至 PB 级数据。在实际应用中,数据并行已渗透到多个领域:电商平台用它并行分析亿级用户的消费行为,气象机构用它拆分全球气象数据进行气候模拟,自动驾驶企业用它在数百张 GPU 上并行训练路测数据模型。 当然,数据并行也并非无懈可击,节点间的数据传输、梯度同步会产生通信开销,这也是分布式计算优化的核心方向。但不可否认,数据并行以其简单易实现、扩展性强的特点,成为处理海量数据的 “标配方案”,它让原本需要数天完成的计算任务缩短至几小时,是算力突破数据规模限制的关键桥梁。
  • [数据库使用] sql报错 memory is temporarily unavailable
    执行sql报错:memory is temporarily unavailable内存不足报错,在已知报错语句,查看topsql,看到max_peak_memory和min_peak_memory相差较大,一般是有计算倾斜导致,即中间某一结果集,在重重分布时,都落在了一个实例上,导致出现内存不足报错。执行失败,aborted内存有倾斜:倾斜导致下盘也出现倾斜:查看语句执行计划,可以看topsql,可以打印verbose计划。看计划中的streaming做了重分布,大概率是重分布是出现倾斜Streaming(type: SPLIT REDISTRIBUTE dop: 4/5)根据分布键,查表看是否有分布倾斜,                    | 41 |                ->Hash Right Join (42, 45)  (cost=220710.04..290386.88 rows=31168264 width=104)                    |    |                  Hash Cond: ((ods_s4_znadin_main_t.ifavin)::text = (d.body_nr)::text)                    | 42 |                 ->Streaming(type: SPLIT REDISTRIBUTE dop: 6/4)  (cost=0.00..66082.62 rows=4642961 distinct=119407.00 width=75)                    |    |                   Distribute Key: ods_s4_znadin_main_t.ifavin                    | 43 |                  ->Row Adapter  (cost=42337.46..42337.46 rows=4642956 width=75)                    | 44 |                   ->CStore Scan on ods.ods_s4_znadin_main_t  (cost=0.00..42337.46 rows=4642961 width=75)                    |    |                     Distribute Key: ods_s4_znadin_main_t.mandt, ods_s4_znadin_main_t.com_num, ods_s4_znadin_main_t.com_year                    |    |                     Filter: (ods_s4_znadin_main_t.ifavin IS NOT NULL)                    | 45 |                 ->Hash  (cost=204476.57..204476.57 rows=31168260 distinct=2597355.00 width=45)                    | 46 |                  ->Streaming(type: SPLIT REDISTRIBUTE dop: 6/8)  (cost=0.00..204476.57 rows=31168264 width=45)                    |    |                    Distribute Key: d.body_nr                    | 47 |                   ->Row Adapter  (cost=97335.68..97335.68 rows=31168260 width=45)                    | 48 |                    ->CStore Scan on ods.ods_faw_erp_zsdcar_t d  (cost=0.00..97335.68 rows=31168264 width=45)                    |    |                      Distribute Key: d.mandt, d.matnrcar, d.chargcarselect ods_s4_znadin_main_t.ifavin,count(1) from ods.ods_s4_znadin_main_t where (ods_s4_znadin_main_t.ifavin IS NOT NULL) group by 1 order by 2 desc limit 100;过滤了条件:ods_s4_znadin_main_t.ifavin IS NOT NULLselect d.body_nr,count(1) from ods.ods_faw_erp_zsdcar_t d group by 1 order by 2 desc limit 100;但是在重分布过程中,有倾斜。ods_s4_znadin_main_t在ifavin有大量空格,查询时通过(ods_s4_znadin_main_t.ifavin IS NOT NULL)过滤,没有过滤掉空格值;ods.ods_faw_erp_zsdcar_t在body_nr上也有大量空格,查询时也未过滤掉空格;二者join时会在空格上产生大量笛卡尔积,导致计算倾斜,出现内存不足报错。
  • [问题求助] 请问guassdb集群如何跨节点执行命令?
    如题,版本pgsql 9.2.4 gaussdb 8.1.3 分布式集群中经常会遇到杀进程需求,即 SELECT PG_TERMINATE_BACKEND(139834762094352);  但是该命令不能跨节点执行,开发环境只允许为data studio ,比如我开了一个终端窗口,对应的cn为cn_001,要杀死的进程在cn_002,传统方法只能不停的新建终端窗口,直到所在cn为cn_002,才可以执行SELECT PG_TERMINATE_BACKEND(139834762094352); 命令成功。有没有一种办法,让我在cn_001的终端窗口中,也可以杀掉cn_002的进程?  
  • [运维管理] PG_AUTH_HISTORY需要开启那个参数才会记录用户创建密码时间?
    PG_AUTH_HISTORY需要开启那个参数才会记录用户创建密码时间?
  • dws数据库插入数据时如果字段名反引号大写会报错
    表字段名为  locn我们使用工具进行数据插入会给每个字段名都加上``有什么配置可以修改 让 字段名为大写且加了反引号时也插入成功吗
  • [运维管理] DWS jdbc 代码执行sql,连接中断,但是在业务端任务没有停,这种有没有客户端参数能控制超时停止?在连接串中加SocketTimeout参数测了没效果应该是不支持
    DWS jdbc 代码执行sql,连接中断,但是在业务端任务没有停,这种有没有客户端参数能控制超时停止?在连接串中加SocketTimeout参数测了没效果应该是不支持  
  • [SQL] GaussDB(DWS) 手动analyze性能问题小结
    analyze莫名其妙变慢了咋办?将军莫虑,且看此贴~ 直接上干货,常见的analyze慢有这几种情况:    1 . 锁冲突有现场的情况,锁冲突可以用如下语句排查,若对端语句不重要,则可以将对端语句查杀。SELECT * FROM pgxc_lock_conflicts order by xactstart;查杀语句方法,按实际填写实例名和pid:execute direct on (cn_5001) 'select pg_terminate_backend(140026797549312)';通常,手动analyze会持有4级锁,若持锁对端为非8级锁,821.2版本以上,则可以用light模式进行analyze,light的analyze只会持1级锁,这样就不会锁冲突了。analyze (light) 模式名.表名;    2 . 修改过analyze采样率默认情况下,analyze只会采样3万行,但因为对于大表而言,3w行的采样可能不够,导致存在计划跳变的风险,我们可能会调大其采样率,此种情况analyze变慢是预期内的。查询当前默认采样率,正数为default_statistics_target * 300,负数为百分比采样。show default_statistics_target;查询表级设置的采样率,表级采样率会依托于表的某一列上,但会全表生效。SELECT c.oid::regclass::TEXT AS table_name, a.attname, CASE WHEN a.attstattarget > 0 THEN (a.attstattarget * 300)::TEXT WHEN a.attstattarget IS NULL THEN NULL ELSE ((a.attstattarget + 1) * (-1))::TEXT || '%' END AS STATISTICS FROM pg_class c LEFT JOIN pg_attribute a ON c.oid = a.attrelid AND a.attstattarget NOT IN (0, -1) WHERE c.relname IN ('表名') ORDER BY 1, 2;表级还原默认采样率方法:ALTER TABLE 模式名.表名 ALTER 列名 SET STATISTICS 200;    3 . 使用临时表模式采样analyze执行时会分为内存模式和临时表模式,临时表模式会将表的每一列的采样数据插入临时表,并且通过内部生成的sql计算统计信息,临时表模式会比内存模式慢。临时表模式采样日志中会打印:Delete object , calc stats in sample table 关键字通常有三种情况会导致使用临时表模式:① 参数analyze_stats_mode强制指定了sample_table模式show analyze_stats_mode;② 采样率高,且表较大,导致预估内存超过maintenance_work_mem,则会采用临时表模式。如果表大小和采样率都是预期内的,则慢也是预期内的。③ 使用了多列统计信息,对于表中多个列有相关性且查询中有同时基于这些列的条件或分组操作的情况,可尝试收集多列统计信息。但如果收集多列统计信息,analyze会强制走临时表模式。如果业务上没有收集多列统计信息的需求,可以考虑删除。查询多列统计信息:select * from PG_EXT_STATS where schemaname = '模式名' and tablename = '表名';根据查询到的结果删除多列统计信息:ALTER TABLE tablename DELETE STATISTICS ((column_1, column_2));    4 . 环境因素影响集群的cpu和io状况等环境因素,也会影响analyze性能,可以排查当时的性能监控。 参考文献:一文读懂analyze使用【这次高斯不是数学家】更新统计信息 
总条数:2552 到第
上滑加载中