暂无图片
jdbc批量提交openGauss异常
我来答
分享
胡工
2021-03-10
jdbc批量提交openGauss异常

jdbc批量提交时,每次提次100条,每条数据大约550个字符,openGauss主节点会立即挂,客户端异常信息如下QQ图片20210310172937.png

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
李宏达

image.png

暂无图片 评论
暂无图片 有用 1
打赏 0
暂无图片
胡工
  1. 代码没有问题 ,同样的代码postgresql12.6上已经验证过了的
  2. 启10个线程,每次提次1条数据,能正常入库
  3. 启10个线程,每次提次2条数据,也有上述问题
暂无图片 评论
暂无图片 有用 0
打赏 0
彭冲

可以提供一下java测试代码及表结构,可以复现下看看

暂无图片 评论
暂无图片 有用 0
打赏 0
胡工
@Component
public class MultipleThreadInsertTable implements InitializingBean {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void afterPropertiesSet() throws Exception {
        final int BATCH_SIZE = 10000000;
        long start = System.currentTimeMillis();
        ExecutorService executorService = Executors.newFixedThreadPool(10);

        List<String[]> list = new ArrayList<>();

        for (int i = 0; i < BATCH_SIZE; i++) {
            String id = UUID.randomUUID().toString();
            String content1 = RandomStringUtils.randomAlphanumeric(128);
            String content2 = RandomStringUtils.randomAlphanumeric(128);

            list.add(new String[]{id, content1, content2});

            if (list.size() >= 100) {
                List<Object[]> copyList = new ArrayList<>(list);
                list.clear();

                BathcInsertTask task = new BathcInsertTask();
                task.setData(copyList);
                task.setJdbcTemplate(jdbcTemplate);

                executorService.execute(task);
            }


        }

        if (!CollectionUtils.isEmpty(list)) {
            List<Object[]> copyList = new ArrayList<>(list);
            list.clear();

            BathcInsertTask task = new BathcInsertTask();
            task.setData(copyList);
            task.setJdbcTemplate(jdbcTemplate);

            executorService.execute(task);
        }

        executorService.shutdown();
        if (!executorService.awaitTermination(1, TimeUnit.HOURS)) {
            executorService.shutdownNow();
        } else {
            long end = System.currentTimeMillis();
            System.out.println("generate data cost [" + (end - start) + "]ms");
        }

        while (executorService.awaitTermination(1, TimeUnit.HOURS)) {
            executorService.shutdown();
        }
        long end = System.currentTimeMillis();

        System.out.println("generate data cost [" + (end - start) + "]ms");
    }

    class BathcInsertTask implements Runnable {
        private List<Object[]> data;
        private JdbcTemplate jdbcTemplate;

        public List<Object[]> getData() {
            return data;
        }

        public void setData(List<Object[]> data) {
            this.data = data;
        }

        public JdbcTemplate getJdbcTemplate() {
            return jdbcTemplate;
        }

        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }

        /**
         * When an object implementing interface <code>Runnable</code> is used
         * to create a thread, starting the thread causes the object's
         * <code>run</code> method to be called in that separately executing
         * thread.
         * <p>
         * The general contract of the method <code>run</code> is that it may
         * take any action whatsoever.
         *
         * @see Thread#run()
         */
        @Override
        public void run() {
            jdbcTemplate.batchUpdate("insert into multiple_thread_insert_table (id, context1, context2) values (?, ?, ?)", data);
        }
    }
}
复制
spring:
  datasource:
    password: Root123$
    username: bes
    url: jdbc:postgresql://192.168.1.180:15400/opslinkaiops
    driver-class-name: org.postgresql.Driver
    hikari:
      auto-commit: true
      minimum-idle: 10
      maximum-pool-size: 50
      max-lifetime: 1800000
      connection-test-query: select 1
复制

目前是这样的,url后面不加?batchMode=true这个会出现master节点挂掉的情况,但后面我在查文档后发现在url后面加上?batchMode=true之后可以解决这个问题 ,但这是一个不稳定的因素,是否能给出比较权危的解答

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
opengauss逻辑复制支持DDL吗?
回答 2
OpenGauss的逻辑复制不支持DDL语句解码。此外,OpenGauss也不支持列存、数据页复制的解码,且不支持备机与级联备机进行逻辑解码。当执行DDL语句(如altertable)后,该DDL语句
data studio
回答 1
有什么问题?
opengauss单机可以搭建主备吗?怎么搭建? 有没有相关的资料?
回答 6
@南方芝麻糊从您的FATAL错误可以看出来,您的这个环境之前应该是已经安装过openGauss,原先数据目录可能存在手工rm删除的操作,没有使用脚本干净卸载,残留了部分env环境配置信息。请使用一个干
麒麟操作系统(arm)安装openGauss
回答 3
根据提示判断你的操作系统不在支持名单内
OpenGauss数据库创建表报错
回答 2
暂无文字回复
集群启动
回答 1
gsom的日志上传上来我们分析一下。
opengauss选择版本是选最新版(3.0.0)还是选择次新版本(2.1.0)更稳?
回答 3
“X.1.0&quot;版本定位为预览版(预览版支持时间只有半年),对应的正式版版本号为”(X1).1.0&quot;所以2.1.0版本是3.0.0版本的预览版,3.0.0修复了2.1中的很多问题。尝
openGauss 不支持NVL2函数吗?
回答 1
已采纳
openGauss当前版本只支持NVL函数,NVL2的功能可用DECODE进行替代。
openGauss社区签署的CLA 协议是什么?
回答 3
操作步骤可参考链接中的:提交issue?https://www.bilibili.com/video/BV1mU4y1z7xi/提交PR?https://www.bilibili.com/video/
openGauss查看表结构属性的命令或者系统表?
回答 1
以下请参考(补充):1.查看表的详细信息&nbsp;&nbsp;openGauss\dtablename&nbsp;2.查看索引的详细信息&nbsp;&nbsp;openGauss\dindexnam