[前][次][番号順一覧][スレッド一覧]

mysql:11005

From: "KAWAI,Takanori" <"KAWAI,Takanori" <GCD00051@xxxxxxxxxx>>
Date: Wed, 16 Feb 2005 08:19:02 +0900
Subject: [mysql 11005] Re: 大量にinsertするとブルースクリーンになる

川合孝典です。

----- Original Message ----- 
From: "naya" <SNA02388@xxxxxxxxxx>
To: <ml@xxxxxxxxxx>
Sent: Tuesday, February 15, 2005 11:42 PM
Subject: [mysql 11001] Re: 大量にinsertするとブルースクリーンになる

(中略)
> 明日ご教示のもの試してみます。
> insertしたいレコード=1行でつらつら書けばいいんですよね??
まぁそうなんですが...
あれは元のデータがおかしいというよりコマンドラインユーティリティーである
mysqlのバッファ長の問題じゃないかというだけで、その確認のために
DBIを使っただけです。テーブルを丸ごと置き換えるのであれば
一度ファイルを出力しているわけですし、LOAD DATA INFILEを使ったほうが
効率的でしょう。(おそらくPerlを使って置き換える必要もないはず)
下のex1なら1秒足らずだけどex2だと20秒はたっぷりかかります。

PerlでFile::Find,DBIを使って簡単に書くとex3のようにもかけるでしょうけど
あらためて見直してみたら

DIR /s /b c:\ > c:\file.txt
mysql -uhogehoge -e
"LOAD DATA INFILE 'c:/file.txt' REPLACE INTO TABLE t_url" url

といった2行のバッチでよいのでは?
#長いので-eの後ろで改行を入れました。あと-uのユーザ名とかは適当に

[ex.1]
use strict;
print 'START:' . scalar(localtime), "\n";
use constant LOADFILE => 'c:/temp/t1load.txt';
my $sRec = 'SOMEDATA';
open OUT, '>', LOADFILE;
for(my $i=0;$i<30_000;$i++) {
  print OUT "$i\\$sRec\n";
}
close OUT;
my $sCmd = q{TRUNCATE TABLE t_url;LOAD DATA INFILE '} .
           LOADFILE . q{' REPLACE INTO TABLE t_url};
system(qq{mysql -uroot -e "$sCmd" test});
print 'END  :' . scalar(localtime), "\n";

[ex.2]
use strict;
print 'START:' . scalar(localtime), "\n";
use DBI;
my $hDb = DBI->connect('dbi:mysql:test', 'root', '',
              {AutoCommit=>1, RaiseError=>1}) or die;
$hDb->do('TRUNCATE TABLE t_url');
$hDb->do('LOCK TABLE t_url WRITE');
my $hSt = $hDb->prepare(
     'INSERT INTO t_url(fullpath) VALUES(?)');
my $sRec = 'SOMEDATA';
for(my $i=0;$i<30_000;$i++) {
  $hSt->execute("$i\\$sRec");
}
$hDb->do('UNLOCK TABLES');
$hDb->disconnect;
print 'END  :' . scalar(localtime), "\n";

[ex3]
#!/home/bin/perl
use strict;
use File::Find;
use DBI;
die "Usage: $0 <対象ディレクトリ>" unless(defined($ARGV[0]));
my $hDb = DBI->connect('dbi:mysql:test', 'root', '',
              {AutoCommit=>1, RaiseError=>1}) or die;
$hDb->do('truncate table t_url');
my $hSt = $hDb->prepare(
     'INSERT INTO t_url(fullpath) VALUES(?)');

sub prnFile {
    #ディレクトリは読み飛ばし
    return if(-d $_);  #$File::Find::name);
    #$_はファイル名
    #$File::Find::dirはディレクトリ名
    #$File::Find::nameはフルパス
    my $sPath = $File::Find::name;
    # $sPath =~ s|/|\\|g; #まぁ好みの問題?
    $hSt->execute($sPath);
}
find(\&prnFile, $ARGV[0]);

===================================================
川合 孝典 (Hippo2000)
   DBI日本語メーリングリスト管理人、Kansai.pm所属
   kwitknr@xxxxxxxxxx GCD00051@xxxxxxxxxx
   http://homepage3.nifty.com/hippo2000/http://www.hippo2000.info/
perldocの日本語情報ならperldocjp:翻訳してみませんか?
  http://perldocjp.sourceforge.jp/
===================================================


[前][次][番号順一覧][スレッド一覧]

     10992 2005-02-15 13:58 [naya <SNA02388@xxxxx] 大量にinsertするとブルースクリーンになる
     10995 2005-02-15 15:30 ┣[とみたまさひろ <tomm]                                       
     10997 2005-02-15 17:34 ┃┗[naya <SNA02388@xxxxx]                                     
     10998 2005-02-15 19:09 ┃ ┗[川合孝典 <gcd00051@x]                                   
     10999 2005-02-15 22:00 ┃  ┣[Kikuo Taniguchi <ki-]                                 
     11000 2005-02-15 22:16 ┃  ┃┣[Kikuo Taniguchi <ki-]                               
     11002 2005-02-15 23:46 ┃  ┃┗[naya <SNA02388@xxxxx]                               
     11003 2005-02-16 05:47 ┃  ┃ ┗[Daiju <d.is.here@xxx]                             
     11001 2005-02-15 23:42 ┃  ┗[naya <SNA02388@xxxxx]                                 
->   11005 2005-02-16 08:19 ┃   ┗["KAWAI,Takanori" <GC]                               
     11007 2005-02-16 13:06 ┃    ┗[naya <SNA02388@xxxxx]                             
     11008 2005-02-16 13:20 ┃     ┗[Daiju <d.is.here@xxx]                           
     10996 2005-02-15 16:34 ┣[Daiju <d.is.here@xxx]                                       
     11006 2005-02-16 12:38 ┣[bon <bon@xxxxxxxxxx>]                                       
     11025 2005-02-21 13:04 ┗[naya <SNA02388@xxxxx] 【御礼】 Re: 大量にinsertするとブルースクリーンになる
     11027 2005-02-21 14:13  ┗[sheep <sheep@xxxxxxx] Re: Windowsのタスクによる任意間隔の実行
     11028 2005-02-21 14:59   ┗[naya <SNA02388@xxxxx] (御礼)Re: Windowsのタスクによる任意間隔の実行