插入到vertica性能调整中

时间:2016-12-19 14:58:48

标签: sql vertica

我对vertica很新。我已经写了一个简单的Insert into语句,但是花了好几个小时来执行100万条记录。

像:

insert into abc(a,b,c)
select x,y,z from xyz
where x > 20;

无论如何都要提高性能? 目标表有适当的排序。

提前致谢!!

2 个答案:

答案 0 :(得分:1)

根据有限的信息,我将给你两个方面来研究(1和2是相同的区域,根据你正在做的事情,只是不同的选择)。

  1. 如果您使用的是JDBC或ODBC,请务必使用 batch sql 。只要您使用Vertica的JDBC或ODBC驱动程序,它就会将批处理SQL转换为幕后更高效的COPY语句。数百万的陈述并不是Vertica擅长的东西,但它的批量非常好。

  2. 如果您不使用JDBC或ODBC(vsql,vertica_python模块或其他),则需要流式传输到COPY FROM STDINCOPY LOCAL语句。执行此操作的方法取决于您实际使用的连接方法。

  3. 如果您正在使用序列,则将缓存设置为高是非常重要的。每个未缓存的序列pull都是目录锁。这肯定会极大地减慢插件的速度。如果您使用了标识列或自动编号,则可以在sequences视图中查找幕后关联的序列。做ALTER SEQUENCE sequence_name CACHE 100000;之类的事情。

  4. 预计序列中存在差距。无论你是否使用缓存,这都可能发生,但你几乎可以保证使用缓存。

    我还要再添加一个:

    1. 如果可能,请尝试进行此操作,以便源和目标的分段相同,以避免跨专用网络广播数据。

答案 1 :(得分:-1)