2016-12-19 53 views
0

我對vertica很新。我已經寫了一個簡單的插入聲明,但它需要數小時才能執行100萬條記錄。插入Vertica性能調優

喜歡:

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

反正是有提高性能? 目標表有適當的排序。

在此先感謝!

+0

Oracle不是Vertica,所以我刪除了標籤。 –

+0

您可以通過在'xyz'表上使用投影來加速操作。 –

回答

1

基於有限的信息,我給你兩個領域尋找到(1和2是相同的區域,這取決於只是不同的選擇關於你在做什麼)。

  1. 如果使用JDBC或ODBC,一定要使用一批SQL。只要您使用Vertica的JDBC或ODBC驅動程序,它就會將批處理SQL轉換爲幕後更高效的COPY語句。數百萬的聲明並不是Vertica擅長的,但它的體積非常好。

  2. 如果您不使用JDBC或ODBC(vsql,vertica_python模塊或其他),那麼您將需要流式傳輸到COPY FROM STDINCOPY LOCAL語句。這樣做的方法取決於你實際使用什麼方法來連接。

  3. 如果您使用的是序列,緩存設置爲高位非常重要。每個未緩存的序列拉是一個目錄鎖。這肯定會大大減慢你的插入速度。如果您使用了標識列或auto_number,則可以查看sequences視圖中的幕後相關序列。做一些像ALTER SEQUENCEsequence_name CACHE 100000;

預計序列中存在空位。無論您是否使用緩存,這都可能發生,但您幾乎可以保證獲得緩存。

我會增加一個:

  • 如果可能的話,儘量使其所以源和目標的分割是爲了避免通過專用數據的廣播相同的網絡。