我有一个这样的表(Postgresql 9.6
CREATE TABLE m_trade (
"alias" Character Varying( 32 ),
"ts" Bigint NOT NULL,
"side" Character( 1 ),
"price" Double Precision,
"qty" Bigint );有50000 000行。
创建timescaledb扩展后-
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;我从空表创建hyper_table -
CREATE TABLE d_trade (
"alias" Character Varying( 32 ),
"ts" Bigint NOT NULL,
"side" Character( 1 ),
"price" Double Precision,
"qty" Bigint );
SELECT create_hypertable('d_trade', 'ts', chunk_time_interval => 86400 , number_partitions =>31);在此之后,在d_trade表上,我得到
INDEX "d_trade_ts_idx" and
TRIGGER ts_insert_blocker BEFORE INSERT
INSERT INTO
"public"."d_trade"( "alias", "price", "qty", "side", "ts" )
select "alias", "price", "qty", "side", "ts" from m_trade现在,如果我尝试通过以下方式向m_trade表插入行
INSERT INTO
"public"."m_trade"( "alias", "price", "qty", "side", "ts" )
VALUES
('TESTALS', 16000, 5, 2, 1545307519)它需要1-1.5毫秒,但这一次会延迟4-5毫秒
INSERT INTO
"public"."d_trade"( "alias", "price", "qty", "side", "ts" )
VALUES
('TESTALS', 16000, 5, 2, 1545307519)如何优化d_trade表的插入速度?
发布于 2019-01-20 01:55:22
您是如何衡量这种插入性能的?如果您使用的是EXPLAIN之类的东西,那么timescaledb需要额外的开销,这可能会使这种比较无效。请尝试启用\timing。而且,timescaledb在规模上比postgresql更好,所以我会尝试运行批处理语句,看看您是否仍然可以得到与上面相同的结果。
https://stackoverflow.com/questions/53914233
复制相似问题