首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TimescaleDB慢于普通postgresql 10插入

TimescaleDB慢于普通postgresql 10插入
EN

Stack Overflow用户
提问于 2019-10-03 07:52:34
回答 1查看 1.3K关注 0票数 2

我使用JDBC将100万行插入到带有时间刻度的测试表中,其性能似乎是普通postgresql的一半。时间刻度调优是通过采用时间刻度调优实用工具所建议的所有值来完成的。我做错了什么?

代码语言:javascript
复制
   private static void writeTable(String sql, int count, int commitCount,
   Connection conn) throws Exception
   {
       conn.setAutoCommit(false);
       long start = System.currentTimeMillis();
       long t = start;
       PreparedStatement stmt = conn.prepareStatement(sql);
       for(int i = 0; i < count; i++)
       {
           stmt.setTimestamp(1, new Timestamp(t));
           stmt.setDouble(2, 10.9);
           stmt.addBatch();
           t ++;
           if(commitCount != -1 && ((i + 1) % commitCount) == 0)
           {
               stmt.executeBatch();
               conn.commit();
           }
       }
       stmt.executeBatch();
       stmt.close();
       conn.commit();
       conn.close();
       long diff = System.currentTimeMillis() - start;
       System.out.println("Count      : " + count);
       System.out.println("Total Time : " + diff);
       System.out.println("Writes/Sec : " + ((count * 1000) / diff));
   }
代码语言:javascript
复制
Query: INSERT INTO kt_device_info (di_device_id, di_time, di_value) VALUES (1,?,?)
代码语言:javascript
复制
Table:
CREATE TABLE kt_device (
    id              BIGINT PRIMARY KEY,
    d_name          TEXT
);

insert into kt_device(id, d_name) values (1, 'dev-1');

CREATE TABLE kt_device_info (
    di_device_id    BIGINT REFERENCES  kt_device NOT NULL,
    di_time         TIMESTAMPTZ NOT NULL,
    di_value        DOUBLE PRECISION  NULL
);

SELECT create_hypertable('kt_device_info', 'di_time');

时间刻度:计数: 1000000总时间: 42026 写/Sec: 23794

Postgres 10:计数: 1000000总时间: 22573 写/Sec: 44300

PostgreSQL 10.10 (Ubuntu10.10-1.pgdg16.04+1)在x86_64-pc-linux-gnu上,由gcc (Ubuntu5.4.0-6 ubuntu1~16.04.11) 5.4.0 20160609,64位编译

启用可伸缩插入和对时间序列数据的复杂查询

硬件: Intel(R) Core(TM) i7-4702MQ CPU @ 2.20GHz,16 TM内存

代码语言:javascript
复制
Chunks:
SELECT show_chunks('kt_device_info');
              show_chunks               
----------------------------------------
 _timescaledb_internal._hyper_7_7_chunk
(1 row)
EN

回答 1

Stack Overflow用户

发布于 2019-10-03 22:03:24

查看您的代码,您将创建间隔毫秒的时间戳。这就解释了为什么你只有一大块。默认的块大小是7天。在这种情况下,您可能希望将分区设置得更小一些,比如几秒钟。您可以通过以下方式更改块大小:选择set_chunk_time_interval('kt_device_info',4000);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58214652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档