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

做网站都要会些什么电商线上推广渠道

做网站都要会些什么,电商线上推广渠道,南山的网站建设,网站建设过程中需要注意的通用原则目录 一、报错场景二、源码分析三、实际原因(更加复杂)四、解决思路 一、报错场景 今天写了一个历史数据处理程序,在开发环境、测试环境都可以正常执行,但是放到生产环境上就不行,报了一个这样的错误: or…

目录

    • 一、报错场景
    • 二、源码分析
    • 三、实际原因(更加复杂)
    • 四、解决思路

一、报错场景

今天写了一个历史数据处理程序,在开发环境、测试环境都可以正常执行,但是放到生产环境上就不行,报了一个这样的错误:

  • org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.

意思大概是:当把数据发送给后端的时候,出现了一个 I/O 异常。

完整报错截图如下:

顺着日志中异常栈信息往下看,可以看到下面有一处具体的报错原因:

  • Caused by: java.io.IOException: Tried to send an out-of-range integer as a 2-byte value: 51000

意思大概是:出现了一个IO异常,尝试发送一个二进制 int 类型数值时,当前数值超出了大小限制:5100

Caused by: java.io.IOException: Tried to send an out-of-range integer as a 2-byte value: 51000at org.postgresql.core.PGStream.sendInteger2(PGStream.java:359)at org.postgresql.core.v3.QueryExecutorImpl.sendParse(QueryExecutorImpl.java:1604)at org.postgresql.core.v3.QueryExecutorImpl.sendOneQuery(QueryExecutorImpl.java:1929)at org.postgresql.core.v3.QueryExecutorImpl.sendQuery(QueryExecutorImpl.java:1487)at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:347)... 140 common frames omitted

二、源码分析

我们根据报错提示,找到源码对应的位置,该源码位于 postgresql 依赖中,Maven坐标如下:

<!--postgresql 数据库驱动依赖 -->
<dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.6.0</version><scope>runtime</scope>
</dependency>

源码位置如下:

可以看到这里有一个大小限制,Short.MAX_VALUE 对应的就是 Short 类型的最大值,为 32767。也就是说,在 PostgreSQL 中,如果参数的数量超过 32767 之后,就会抛出 Tried to send an out-of-range integer 这个异常。


三、实际原因(更加复杂)

道理都懂,但是细想的话还是有以下两个问题:

  1. 我在代码中明明根据入参按照 1000 分页处理的,没有超出 32767,为什么还会报这个错?
  2. 报错信息中的 51000 又是哪来的?

于是我们继续根据上面的异常栈信息进行排查,针对第2层栈信息在本地打断点调试。

Caused by: java.io.IOException: Tried to send an out-of-range integer as a 2-byte value: 51000at org.postgresql.core.PGStream.sendInteger2(PGStream.java:359)at org.postgresql.core.v3.QueryExecutorImpl.sendParse(QueryExecutorImpl.java:1604)at org.postgresql.core.v3.QueryExecutorImpl.sendOneQuery(QueryExecutorImpl.java:1929)at org.postgresql.core.v3.QueryExecutorImpl.sendQuery(QueryExecutorImpl.java:1487)at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:347)... 140 common frames omitted

首先找到第二层栈信息对应的源码位置,并在本地进行debug:

这里我本地调试的时候,是传了 11 个参数,但是在第二层断点中入参却变成了 352 个,这是为什么呢?

不要慌,其实这里的 queryUtf8 变量中存储的就是我们的 SQL 了,我们直接查看下这个变量的字符串即可:

终于,找到罪魁祸首了,由于项目中集成了 ShrdingJDBC,导致执行 SQL 的时候会自动拼接分表 SQL 并进行 UNION ALL,导致入参个数猛增几十倍。所以:

  • 开发环境中,分表是 202110~202405,32张表 × 11个入参 = 352 个总入参。
  • 生产环境中,分表是 202110~202512,51张表 × 1000个入参 = 51000 个总入参。

51000 远远超出 32767 的限制,所以抛出 IO 异常。


四、解决思路

可以根据以下两种情况,分别进行解决:

  1. 如果没有使用 ShardingJDBC 进行分表:建议分页处理。
  2. 如果已经使用 ShardingJDBC 进行分表:在单个SQL入参不超过 32767 的情况下,一方面可以将分片键加入参数中;另一方面可以再进一步分页,细化分页颗粒度。

整理完毕,完结撒花~🌻

http://www.dinnco.com/news/5780.html

相关文章:

  • 公安局网站不备案吗网络热词有哪些
  • 网站建设公司如何开拓客户太原seo招聘
  • 长春市网站制作公司阿里指数查询官网
  • 林州网站建设哪家专业优化手机流畅度的软件
  • 做网站设计的公司柳州搜索引擎营销概念
  • 网站内链结构是什么意思世界球队最新排名榜
  • 做爰全过程网站免费的视频做销售记住这十句口诀
  • 网站排名怎样做有效seo关键词排行优化教程
  • 自制软件生成器宁波seo深度优化平台
  • 自己做图片上传网站网络推广100种方式
  • 网站水军怎么做郑州网站优化渠道
  • 珠宝网站建设公司英文外链seo兼职
  • 阜阳网站建设简述什么是网络营销
  • 做网站信科网站建设温州网站优化推广方案
  • .net 手机网站开发软文广告投放平台
  • 可以做网络兼职的网站泰州百度seo
  • 百度竞价做网站seo网络科技有限公司
  • 北京高端网站建设重庆seo的薪酬水平
  • 彩票网站建设柏如何点击优化神马关键词排名
  • 唐山市网站建设电商平台如何推广运营
  • 小企业做网站多少钱知名网页设计公司
  • 可靠的广州做网站一台电脑赚钱的门路
  • 网站建设工作总结培训云建站模板
  • 淘宝做的网站可靠吗西安百度网站排名优化
  • 培训机构停课seo主要做哪些工作
  • 男男床做第一次视频网站产品推广渠道有哪些方式
  • 网站制seo整站优化服务教程
  • 学校网站开发图片素材市场营销毕业后找什么工作
  • 员工入职 在哪个网站做招工如何优化搜索引擎的准确性
  • 怎么用java 做网站如何进行线上推广