隨筆-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 閱讀(4012) 評論(0)  編輯  收藏 所屬分類: Oracle
          主站蜘蛛池模板: 翼城县| 安泽县| 当阳市| 德昌县| 宜章县| 阳原县| 光山县| 林周县| 神池县| 泰兴市| 嘉黎县| 敖汉旗| 宝应县| 茌平县| 晋江市| 东安县| 会理县| 隆德县| 靖远县| 鸡东县| 大港区| 金阳县| 宜城市| 鄂伦春自治旗| 孟村| 平江县| 满城县| 砚山县| 丰都县| 教育| 云霄县| 房山区| 卢氏县| 朝阳区| 寻乌县| 仙桃市| 永川市| 哈密市| 博野县| 介休市| 鄂托克前旗|