隨筆-314  評論-209  文章-0  trackbacks-0
          文章分類:數據庫

          要測試sql loader 以及快速產生大量測試數據

          生成大量測試數據思路。

            一,用plsql developer 生成csv 文件

            二,用>>輸出重定向,追加到一個cvs 文件里。

            三,再用sql loader 快速載入。

           

          在plsql developer 執行

          Sql代碼 復制代碼
          1. SELECT object_id,object_name FROM dba_objects;  

           

          右鍵plsql developer 導出csv 格式 1.csv。在linux 上執行下面的腳本

          C代碼 復制代碼
          1. #!/bin/bash   
          2.   
          3. for((i=1;i<200;i=i+1))   
          4. do  
          5.         cat 1.csv >> 2.csv;   
          6.         echo $i;   
          7. done  

           這樣 50000  *  200 差不到就有一千萬的數據了。我測試的  11047500  392M

           可以用:

          Linux代碼 復制代碼
          1. wc -l 2.csv  

           

          查看csv 里有多少條數據。現在測試數據有了。我們來試一下sql loader 的載入效果吧。

          創建sqlloader 控制文件如下,保存為1.ctl

          Sqlldr ctl代碼 復制代碼
          1. load data   
          2. infile '2.csv'  
          3. into table my_objects   
          4. fields terminated by ','optionally enclosed by '"'  
          5. (object_id,   
          6. object_name   
          7. );  

           

          控制文件簡要說明:

          -- INFILE 'n.csv'   導入多個文件 
          -- INFILE *  要導入的內容就在control文件里 下面的BEGINDATA后面就是導入的內容

          --BADFILE '1.bad'   指定壞文件地址 

          --apend into table my_objects 追加
          -- INSERT  裝載空表 如果原先的表有數據 sqlloader會停止 默認值 
          -- REPLACE   原先的表有數據 原先的數據會全部刪除 
          -- TRUNCATE  指定的內容和replace的相同 會用truncate語句刪除現存數據 

          --可以指定位置加載
          --(object_id position(1:3) char,object_name position(5:7) char)
          --分別指定分隔符
          --(object_id char terminated by ",", object_name char terminated by ",")
          --執行sqlldr userid=scott/a123 control=1.ctl log=1.out direct=true
          --30秒可以載入200萬的測試數據 79MB


          --sqlldr userid=/ control=result1.ctl direct=true parallel=true
          --sqlldr userid=/ control=result2.ctl direct=true parallel=true
          --sqlldr userid=/ control=result2.ctl direct=true parallel=true
          --當加載大量數據時(大約超過10GB),最好抑制日志的產生:
          --SQLALTER TABLE RESULTXT nologging;
          --這樣不產生REDO LOG,可以提高效率。然后在CONTROL文件中load data上面加一行:unrecoverable
          --此選項必須要與DIRECT共同應用。
          --在并發操作時,ORACLE聲稱可以達到每小時處理100GB數據的能力!其實,估計能到1-10G就算不錯了,開始可用結構
          --相同的文件,但只有少量數據,成功后開始加載大量數據,這樣可以避免時間的浪費

           

          下面就是執行了

          Shell代碼 復制代碼
          1. sqlldr userid=scott/a123 control=1.ctl log=1.out direct=true  

           結果:30秒可以載入200萬的測試數據 79MB
                    226秒載入1100萬的測試數據 392Mb

           

          我的環境是在虛擬機,測得的結果

          MemTotal:       949948 kB

          model name      : Intel(R) Pentium(R) D CPU 2.80GHz
          stepping        : 8
          cpu MHz         : 2799.560
          cache size      : 1024 KB

           

          還是挺快的:)

          posted on 2011-03-08 16:47 xzc 閱讀(4006) 評論(0)  編輯  收藏 所屬分類: Oracle
          主站蜘蛛池模板: 神木县| 海林市| 河池市| 海口市| 阿坝| 云和县| 五台县| 巴林右旗| 衢州市| 上思县| 陇西县| 丰原市| 宽甸| 阳泉市| 呼图壁县| 彭阳县| 稷山县| 宽城| 祁连县| 梧州市| 临沭县| 长海县| 麻江县| 漳平市| 古浪县| 乐业县| 门源| 南江县| 襄垣县| 邹平县| 新疆| 麦盖提县| 旺苍县| 寻甸| 静海县| 周口市| 安多县| 清徐县| 三明市| 神农架林区| 华阴市|