当前位置: 首页 > news >正文

BenchmarkSQL 测试 PostgreSQL 时遇到 numeric field overflow 报错的原因与解决方案

现象描述

在使用 BenchmarkSQL 对 PostgreSQL 进行长时间 TPC-C 性能测试时,部分用户会遇到如下报错:

ERROR: numeric field overflow

该错误通常出现在测试运行一段时间后,导致部分事务失败,影响测试的连续性和准确性。

原因分析

  1. 表字段类型与TPC-C规范不符

    • BenchmarkSQL 的 TPC-C 测试涉及大量订单、支付等表的金额字段(如 OL_AMOUNTC_BALANCEW_YTD 等),这些字段在 schema.sql 中通常被定义为 NUMERIC(6,2)NUMERIC(12,2) 等。
    • 长时间高并发测试下,金额字段(如累计销售额、客户余额等)会不断累加,最终超出字段定义的最大值(如 NUMERIC(6,2) 最大值为 9999.99),导致溢出报错。
  2. BenchmarkSQL 版本或自定义 schema 问题

    • 部分 BenchmarkSQL 版本或用户自定义的 schema.sql 文件,金额相关字段精度设置过小,未考虑长时间测试下的累加效应。
  3. PostgreSQL 对 NUMERIC 类型的严格校验

    • PostgreSQL 对 NUMERIC 类型的溢出校验非常严格,任何超出定义范围的写入都会直接报错并回滚事务。

解决方案

1. 修改 schema.sql,增大金额字段精度
  • 推荐将所有涉及金额累计的字段(如 W_YTDD_YTDC_BALANCEOL_AMOUNT 等)精度统一调整为 NUMERIC(15,2) 或更大。

  • 具体操作:

    -- 以 warehouse 表为例
    CREATE TABLE warehouse (...w_ytd NUMERIC(15,2) NOT NULL,...
    );
    -- 其他表类似,找到所有金额相关字段,统一放大精度
    
  • 修改后,建议重新初始化数据库(重新建表、装载数据)。

2. 已有数据在线修改精度

对于不想重新灌数的场景,可以尝试在线修改,示例

alter  table bmsql_warehouse alter clumn w_ytd  type numeric(15,2);
3. 关注测试期间的字段增长
  • 长时间高并发测试下,部分字段增长极快。可定期监控相关字段的最大值,提前预警。
  • 也可通过 SQL 查询当前最大金额:
    SELECT MAX(w_ytd) FROM warehouse;
    SELECT MAX(c_balance) FROM customer;
    
http://www.dtcms.com/a/265690.html

相关文章:

  • 请求未达服务端?iOS端HTTPS链路异常的多工具抓包排查记录
  • 区块链真的会是未来吗?
  • TCP粘包、拆包、解决
  • 什么是协同归因和贡献归因
  • WhoDB:一款基于Web的免费AI数据库管理工具
  • 刷卡登入数据获取
  • 【ArcGISPro】基于Pro的Python环境进行Django简单开发Web
  • 两个PHY芯片之间,是如何连接进行通信的?
  • 并行科技MaaS平台支持文心4.5系列开源模型调用
  • MySQL主从延迟深度解析:现象、原因与实战解决方案
  • KMP(Kotlin Multiplatform)改造(Android/iOS)老项目
  • 舵轮时钟-STM32-28路PWM--ESP8266-NTP时间
  • Babylon.js 材质克隆与纹理共享:你可能遇到的问题及解决方案
  • 从UI设计到数字孪生实战演练:构建智慧城市的智慧停车系统
  • 大势智慧亮相第十八届中国智慧城市大会
  • 暑期出游,解锁“智慧”新玩法!
  • 浏览器原生控件上传PDF导致hash值不同
  • 使用HAProxy搭建Web群集:原理、步骤与实战总结
  • AlpineLinux安装RabbitMQ及其管理界面
  • 攻防世界0-MISC-隐藏的信息
  • VS Code 的 Copilot Chat 扩展程序
  • AI学习笔记三十:基于yolov8的web显示
  • 在 VSCode 中高效配置自定义注释模板 (无需插件)
  • 在小程序中实现实时聊天:WebSocket最佳实践
  • Tarjan 算法的两种用法
  • 支持向量机(SVM)分类
  • JavaScript的现代进阶:从ES6到ES15
  • 机器学习-03(机器学习任务攻略)
  • npm 命令入门指南(前端小白版)
  • 使用numpy的快速傅里叶变换的一些问题