选择瓶颈并插入选择对蟑螂数据库无效

时间:2018-09-19 05:46:37

标签: bulkinsert cockroachdb

我必须合并2个表,如下所示。 “ table2”具有15GB的数据。但是它显示错误。我设置了max-sql-memory = .80,但我不知道该如何解决。 当我执行此查询限制为50000选项时,它起作用了! 即使“从表2中选择*”也显示相同的错误。 我认为某种程度上存在选择瓶颈。 同样,通过此查询,通常只有3个节点的延迟中的1个上升。 (AWS EC2 i3.xlarge类型)

▶查询
插入表1(   InvoiceID,PayerAccountId,LinkedAccountId,RecordType,RecordId,ProductName   ) 选择   InvoiceID,PayerAccountId,LinkedAccountId,RecordType,RecordId,ProductName 来自table2;

▶错误: 驱动程序:连接不良 警告:连接丢失! 打开新连接:所有会话设置都将丢失

▶日志:  W180919 04:59:20.452985 186 storage / raft_transport.go:465 [n3]到节点2的筏传输流失败:rpc错误:代码=无法使用desc =传输正在关闭 W180919 04:59:20.452996 190 vendor / google.golang.org / grpc / clientconn.go:1158 grpc:addrConn.createTransport无法连接到{10.240.98.xxx:26257 0}。错误:连接错误:desc =“传输:拨号时无法重用客户端连接时出错”。重新连接...

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,则说明您正在使用一条语句从table2中读取约15GB的数据并将其插入table1中。不幸的是,您发现这行不通。请参阅limits for a single statement,其中涵盖了这种情况。设置--max-sql-memory=.80将无济于事,并且很可能会造成伤害,因为CockroachDB需要一些喘息的空间,因为我们的内存跟踪不精确。 “连接错误警告”和您在日志中发现的错误都是Cockroach进程崩溃(可能是由于内存不足)而发生的症状。

如果您需要以事务方式将数据从table2复制到table1,那么此时您有点不走运。尽管您可以尝试使用显式事务并将单个INSERT语句拆分为多个语句,但是您很可能会遇到事务大小限制。如果您可以非事务方式执行复制,则建议将INSERT分成几部分。类似于:

INSERT INTO table1 (...) SELECT ... FROM table2 WHERE InvoiceID > $1 LIMIT 10000 RETURNING InvoiceID

这里的想法是您要分批复制1万行。您可以使用RETURNING InvoiceID子句来跟踪最后复制的InvoiceID,并从那里开始下一个插入。