PostgreSQL 10.1 手册_部分 III. 服务器管理_第 32 章 回归测试_32.2. 测试评估

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
简介: 32.2. 测试评估 32.2.1. 错误消息差异 32.2.2. 区域差异 32.2.3. 日期和时间差异 32.2.4. 浮点差异 32.2.5. 行序差异 32.2.6. 栈深度不足 32.2.7. “失败”测试 32.2.8. 配置参数 一些正确安装的并且全功能的PostgreSQL安装可能会在这些回归测试中的某些上“失败”,其原因是平台相关的因素,例如可变浮点表示和 message wording。

32.2. 测试评估

一些正确安装的并且全功能的PostgreSQL安装可能会在这些回归测试中的某些上失败,其原因是平台相关的因素,例如可变浮点表示和 message wording。这些测试目前采用diff命令来比较测试输出和在参考系统上产生的输出,这样测试的结果对小的系统差异也很敏感。当一个测试被报告为失败时,请总是检查实际结果和期望结果之间的差异,你可能会发现该差异其实并不明显。不管怎样,我们将努力维护在所有被支持平台上的准确的参考文件,以期待所有的测试都能通过。

回归测试的实际输出在src/test/regress/results目录中的文件内。测试脚本会使用diff来把每一个输出文件与存储在src/test/regress/expected目录中的参考输出进行比较。任何差异都被保存在src/test/regress/regression.diffs中便于你的观察(当运行一个除核心测试之外的测试套件时,这些文件当然会出现在相关子目录中,而不是src/test/regress)。

如果你不喜欢被默认使用的diff选项,请设置环境变量PG_REGRESS_DIFF_OPTS,例如PG_REGRESS_DIFF_OPTS='-u'(或者如果你愿意,你可以自己运行diff)。

如果由于某种原因一个特定的平台对一个给定测试产生了失败,而对输出的检查却说明该结果是合法的,你可以增加一个新的比较文件来让失败报告在未来的测试运行中保持沉默。详见第 32.3 节

32.2.1. 错误消息差异

某些回归测试涉及到故意的非法输入值。错误消息可能来自PostgreSQL代码或主机平台系统例程。在后一种情况中,消息会随着平台而变化,但是会反映相似的信息。这些消息中的差异将导致一次失败的回归测试,这可以通过检查来确认。

32.2.2. 区域差异

如果你在一台使用除 C 之外的排序规则顺序区域初始化的服务器上运行测试,那么可能会出现由于排序顺序和后续失败产生的差异。回归测试套件被设置为可以处理这种问题,方法是提供替代的结果文件来处理大量的区域。

要在使用临时安装方法时在一种不同的区域中运行测试,可在make命令行上传递适当的区域相关的环境变量,例如:

make check LANG=de_DE.utf8

(回归测试驱动器会取消LC_ALL设置,因此使用这个变量选择区域是不起作用的)。要不使用区域,要么取消所有区域相关的环境变量设置(或把它们设置为C),要么使用下列特殊调用:

make check NO_LOCALE=1

当对一个现有安装运行测试时,区域设置由现有安装决定。要改变它,通过向initdb传递合适的选项来使用不同的区域初始化数据库集簇。

通常,我们建议对将要在生产环境中使用的区域设置运行回归测试,因为这样可以测试即将真正被用在生产环境中的与区域和编码相关的代码。根据 操作系统环境,你可能会得到失败,但是那样你将至少知道在真实应用运行时会得到什么样的与区域相关的行为。

32.2.3. 日期和时间差异

大部分的日期和时间结果依赖于时区环境。参考文件是用时区PST8PDT(伯克利,加利福利亚)生成的,并且如果测试不是运行在该时区设置中显然会出现失败。回归测试驱动器会设置环境变量PGTZ为 PST8PDT,这通常能保证正确的结果。

32.2.4. 浮点差异

某些测试涉及到从表列中计算 64 位浮点数(双精度)。我们已经发现了涉及到双精度列的数学函数的结果中的差异。float8geometry测试容易在不同平台之间产生小的差异,甚至对不同的编译器优化设置也可能产生差异。这些差异通常位于小数点右边的 10 个位置,决定这些差异的实际意义需要人类眼球比较。

某些系统显示负零为-0,而其他的只显示0

某些系统标志来自pow()exp()的错误的机制不同于当前PostgreSQL代码所期望的机制。

32.2.5. 行序差异

你可能看到这样一些差异:一组相同的行在输出中的顺序与参考文件中的顺序不同。严格来说,在大部分情况下这不是缺陷。大部分回归测试脚本没有为每一个单独的SELECT使用一个ORDER BY,并且因此它们的结果行顺序根据 SQL 规范是非良定义的。实际上,因为我们考虑的是由相同的软件在相同的数据上执行相同的查询,我们通常会在所有平台上得到相同的结果顺序,所以缺少ORDER BY不是一个问题。但是,某些查询确实会在不同平台上产生不同的顺序。当对一个已经安装的服务器运行测试时,顺序差异可能由非 C 区域设置或非默认参数设置导致,例如work_mem的自定义值或规划器代价参数。

因此,如果你看到一个顺序差异,没有什么可担心的,除非结果被未被的查询确实有一个ORDER BY。但是,不管怎样请报告它,这样我们可以为特定的查询加上一个ORDER BY来在未来的发布中消除虚假的失败

你可能好奇为什么我们不对所有回归测试查询进行显式排序来一次性解决这个问题。其原因是那可能会降低回归测试的有用性,因为它们已经倾向于测试产生有序结果的查询计划类型而排除了那些无法产生有序结果的计划类型。

32.2.6. 栈深度不足

如果错误测试导致了在select infinite_recurse()命令上的一次服务器崩溃,它意味着平台对进程栈尺寸的限制低于max_stack_depth参数所指定的值。这可以通过在一个更高的栈尺寸限制(对max_stack_depth的默认值,我们推荐 4 MB)下运行该服务器来修复。如果你不能这样做,一种可替代的方案是减小max_stack_depth的值。

在支持getrlimit()的平台上,服务器应该自动选择一个max_stack_depth的安全值。所以除非你已经手工覆盖了该设置,这类失败就是一个可报告的缺陷。

32.2.7. 失败测试

失败测试脚本用来产生随机结果。在非常少见的情况下,这会导致回归测试失败。输入:

diff results/random.out expected/random.out

应当产生一行或少数几行差异。你不需要担心,除非随机测试重复地失败。

32.2.8. 配置参数

当对一个现有安装运行测试时,某些非默认参数设置可能导致测试失败。例如,改变enable_seqscanenable_indexscan等参数可能导致计划改变,然后影响使用EXPLAIN的测试的结果。

本文转自PostgreSQL中文社区,原文链接:32.2. 测试评估

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
12月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的服务器日志文件
本文介绍了PostgreSQL数据库的物理存储结构,重点讨论了服务器日志文件。通过`pg_ctl`命令启动PostgreSQL实例时,使用`-l`参数指定日志文件位置,记录数据库启动、运行及关闭过程中的关键信息。附有相关视频讲解和日志文件示例。
306 0
|
7月前
|
人工智能 自然语言处理 测试技术
UGMathBench:评估语言模型数学推理能力的动态基准测试数据集
近年来,人工智能蓬勃发展,自然语言模型(LLM)进展显著。语言模型被广泛应用于自动翻译、智能客服、甚至医疗、金融、天气等领域。而研究者们仍在不断努力,致力于提高语言模型的规模和性能。随着语言模型的蓬勃发展,评估一个语言模型的性能变得越来越重要。其中一个重要的评估指标,就是衡量语言模型的推理能力和解决数学问题的能力。
346 38
|
8月前
|
JavaScript 数据可视化 Docker
简易制作MCP服务器并测试
本文介绍了如何简易制作并测试MCP服务器,包括环境搭建、代码实现及Docker部署。首先通过uv包创建项目,在main.py中定义MCP服务器及其工具和资源函数。接着详细说明了在Windows上安装uv、配置Docker镜像加速、生成requirements.txt文件以及编写Dockerfile的过程。最后,通过构建和运行Docker容器部署MCP服务器,并使用Node.js工具测试其功能,确保服务器正常工作。此教程适合初学者快速上手MCP服务器的开发与部署。
2978 63
|
6月前
|
存储 关系型数据库 测试技术
拯救海量数据:PostgreSQL分区表性能优化实战手册(附压测对比)
本文深入解析PostgreSQL分区表的核心原理与优化策略,涵盖性能痛点、实战案例及压测对比。首先阐述分区表作为继承表+路由规则的逻辑封装,分析分区裁剪失效、全局索引膨胀和VACUUM堆积三大性能杀手,并通过电商订单表崩溃事件说明旧分区维护的重要性。接着提出四维设计法优化分区策略,包括时间范围分区黄金法则与自动化维护体系。同时对比局部索引与全局索引性能,展示后者在特定场景下的优势。进一步探讨并行查询优化、冷热数据分层存储及故障复盘,解决分区锁竞争问题。
725 2
|
运维 Prometheus 监控
如何在测试环境中保持操作系统、浏览器版本和服务器配置的稳定性和一致性?
如何在测试环境中保持操作系统、浏览器版本和服务器配置的稳定性和一致性?
|
10月前
|
人工智能 自然语言处理 测试技术
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
AxBench 是由斯坦福大学推出,用于评估语言模型可解释性方法的基准测试框架,支持概念检测和模型转向任务,帮助研究者系统地比较不同控制技术的有效性。
249 5
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
|
12月前
|
数据采集 人工智能 自动驾驶
VSI-Bench:李飞飞谢赛宁团队推出视觉空间智能基准测试集,旨在评估多模态大语言模型在空间认知和理解方面的能力
VSI-Bench是由李飞飞和谢赛宁团队推出的视觉空间智能基准测试集,旨在评估多模态大型语言模型(MLLMs)在空间认知和理解方面的能力。该基准测试集包含超过5000个问题-答案对,覆盖近290个真实室内场景视频,涉及多种环境,能够系统地测试和提高MLLMs在视觉空间智能方面的表现。
424 16
VSI-Bench:李飞飞谢赛宁团队推出视觉空间智能基准测试集,旨在评估多模态大语言模型在空间认知和理解方面的能力
|
测试技术 API 微服务
性能测试并发量评估新思考
性能测试并发量评估新思考
511 20
性能测试并发量评估新思考
|
机器学习/深度学习 人工智能 算法
BALROG:基准测试工具,用于评估 LLMs 和 VLMs 在复杂动态环境中的推理能力
BALROG 是一款用于评估大型语言模型(LLMs)和视觉语言模型(VLMs)在复杂动态环境中推理能力的基准测试工具。它通过一系列挑战性的游戏环境,如 NetHack,测试模型的规划、空间推理和探索能力。BALROG 提供了一个开放且细粒度的评估框架,推动了自主代理研究的进展。
360 3
BALROG:基准测试工具,用于评估 LLMs 和 VLMs 在复杂动态环境中的推理能力
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
424 6

推荐镜像

更多