本文參考老唐的使用sysbench和sqlldr并行裝載oracle測試資料而成。
<a href="http://blog.osdba.net/538.html">http://blog.osdba.net/538.html</a>
sysbench原來自帶的lua資料裝載腳本是使用以下方式串行裝載的,速度比較慢(比單條insert快,但是比copy慢)。
使用prepare導入資料的用法舉例
prepare 表示裝載資料,但是它串行的。
sysbench0.5中可以在指令行中指定測試時啟動的并行線程數,這個測試過程是使用run指令,而且是多線程并發的,是以我們可以使用sysbench的run指令來造資料,而不再使用其提供的prepare指令的方法來造資料。run指令會根據指令行參數--num-threads來指定并發線程數的多少。
在sysbench中自定義的lua腳本中要求實作以下幾個函數:
由上可以知道,本次造資料的腳本我們隻需要實作thread_init()函數就可以了。
生成測試資料的腳本沿用老唐提供的代碼:
編譯此c語言程式的方法如下:
建立一個copy.lua的腳本,内容如下
調用 common.lua中的 set_vars() 繼承來自 common.lua 的全局變量。
函數 copydata(table_id) : 建立表,建立管道,将管道資料傳輸到psql -c "copy ..."用戶端的方式導入資料。
函數 create_index(table_id) : 建立索引,調整sequence next val。
注意咯, oltp_tables_count 必須是 num_threads 的倍數,在 thread_init 中, 以num_threads 為步調,以thread_id+1為起始值,設定i的值,并調用copydata(table_id)和create_index(table_id)。
用法,必須把psql放到路徑中,因為lua中需要用到psql指令
生成資料,速度比以前快多了
清除資料, drop table
lua全局變量代碼:
傳入參數,可以把sysbench_pg的參數-替換成_在lua腳本中使用這些變量,例子