• 締切済み

処理速度の見積もり時間について。

処理速度の見積もり時間について。 Oracle 10gを使用し開発を行っています。 処理速度について伺いたいことがあり、投稿致しました。 現在、PL/SQLを使用しCSVファイルよりデータを読み込み、 テーブルをチェックし、条件に合致するようならデータのUPDATEを 行うという処理をしています。 このCSVファイルのデータは何百万件と大量のデータで、 処理速度を懸念しております。 そこで処理速度についてですが、どのようにすれば見積もることが できるのでしょうか? 具体的な方法をご教授頂けるとありがたいです。 そもそもCSVファイルを一行ずつ読み込んで、テーブルに対し UPDATEを掛けるというやり方自体間違っているのでしょうか? 一時テーブル等を使用した方が良いのではないかとも思うのですが・・・。 以上、宜しくお願い致します。

  • Oracle
  • 回答数2
  • ありがとう数1

みんなの回答

  • _yasuo
  • ベストアンサー率41% (16/39)
回答No.2

まず、処理速度の見積もりですが、想定だと危険です(特に、100件でn秒だったから、100万件だと、かけるいつだねとか)。 一番いいのは、実環境(ハードウェア、データ量、トラフィック)と類似の状態で実測するのが、確実です。 CSVファイルを1行ずつという処理自体は、特に問題ないと思います。 ロック単位(トランザクション単位)さえ、注意していれば。 参考になれば幸いです。

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

処理速度をきちんと計算する方法は無いです。 CVSファイルのデータを1,000件とか10,000件とかで実行して速度を計測して、 何百万件の場合にある程度比例するとして想定します。 更新がCSVファイルをテーブルだとしてSQLで更新処理を記述可能なら、 CSVファイルを外部テーブルとして扱えます。 外部表の使用方法の詳細は、『Oracle Database データ・ウェアハウ ス・ガイド』、『Oracle Database 管理者ガイド』および『Oracle Database ユーティリティ』を参照してください。

関連するQ&A

  • 処理速度について(UPDATE)

    下記の2つのSQL句があります。 どのSQLが処理速度が速いのでしょうか。 また、一般的なのはどのSQLなのでしょうか。 処理1 UPDATE テーブルA SET 項目A = '0' WHERE NVL(項目A,'0') = '0'; 処理2 UPDATE テーブルA SET 項目A = '0' WHERE 項目A IS NULL; 私としては、処理2の方が早いような気がするのですが・・・ 教えてください。お願いします。

  • pl/sqlでcsvファイルダウンロード

    Oracleアプリケーションサーバーを利用しています。 Oracle8i。 PL/SQLから特定のテーブルのデータをCSVダウンロードさせるようにしたいのですが、ファイル名の特定ができません。 処理順序  declare    略  begin    owa_util.mime_header('text/csv', FALSE);    owa_util.http_header_close;    動的SQLを利用して一行ずつhtp出力    end 実行するとダウンロードを促すダイアログが表示されますが、そのとき表示されるファイル名がパッケージ名になっています。ソース中で任意にファイル名をつけたいのですがどうしたらよいでしょうか? または、ブラウザにデータを表示させたEXCELを表示させるといった方法でもよいです。(一行にカンマ区切りのデータが収まってしまうのはNG)   よろしくお願いいたします。

  • PL/SQLでmdb(Access)ファイルへの書き込みは可能?

    あまりPL/SQLに関して知識がないので 可能なのかを教えていただきたいのですが、 例えば、 Oracleのテーブルデータ(例:メッセージテーブル) をローカルの空のMDBファイルへ丸ごとコピー といった処理をVBで行っているのですが、 毎回Insertを発行しているために とても処理に時間がかかっています。 (もともとこれ自体無謀なんですが・・・) そこでPL/SQLではバルク処理?といった 高速処理もあるようで、 このVBのかわりにPL/SQLで出来ないものだろうか・・・ と単純に思ったのですが、 PL/SQLでこういったコピー処理っていうのは 可能なんでしょうか?? ご存知の方、教えていただきたいです。 よろしくおねがいします。

  • 処理時間について

    今、仕事で既存の処理のレスポンス調査をしているのですが、 行き詰ってしまったので質問させていただきます。 本番環境とテスト環境で全く同じ処理を実行した所、テスト環境では 1分程度で処理が正常終了するのに本番環境だと 2時間経過しても処理が終わらず、なぜ同じ処理なのに本番環境と テスト環境で処理時間に違いがありすぎるのか分からず困っています。 処理としては25万件程あるデータ(テキストベース)を PL/SQLで読み込みTable_AにInsert または キーが同じデータが 存在しているならUpdateをし、 それと同時にトリガーで更新前と更新後の値を Log_TableにInsertします。 検証したときの手順としては、 (1)Table_AとLog_TableをCreate (2)トリガーのコンパイル (3)Table_Aのインデックスの作成 (4)PL/SQLのコンパイル (5)Table_AとLog_Tableの統計情報の取得 となっております。 ちなみに、テスト環境と本番環境の両方について、 実行されたSQLの実行計画を取得し比較したのですが、 同じ実行計画になっていました。 また、統計情報を取らずに処理を実行した場合は、テスト環境でも 2時間経過しても処理が終わりませんでした。

  • 処理速度の改善について

    PL/SQLにて大量のデータを処理しているのですが、処理に時間が掛かりすぎる為、SQLのチューニングを考えています。 まずどういう所から見ていけば良いでしょうか? また、INDEXを指定すると良いのかな、と思うのですが、PL/SQL内でINDEXの指定は出来ますか? /*~*/でコメント文と見なされているように思うのですが。

  • テーブル名を指定してCsv出力

    こんにちは。 Oracle 9iで開発をしているのですが、 PL/SQLで引数にテーブル名(物理名)を渡せば そのテーブルのデータを全件ファイルに出力するような 処理は書けるでしょうか? お力を貸してください。 よろしくおねがいします。

  • Oracleストアドプロシージャについて

    現在、夜間バッチで海外FTPサーバーからCSVファイルをDWHサーバーに格納後、 同DWHサーバー内のOracleテーブルにInsertするという処理の開発をしているのですが、 CSVの取得はDOSバッチとTeratermのマクロで取得しようと思っています。 しかし、CSVファイルのInsert処理はPL/SQLで開発を行おうと考えています。 それは、Insert後にそのテーブルと別サーバーのOracleテーブルを使用してデータの加工を行い、 その結果をDWHテーブルにロードしなければいけないからです。 ちなみに、今まではVBしか触ったことしかなくPL/SQLやバッチの作成はは初めてです。 そこで質問なのですが、PL/SQLで他のサーバーのテーブルとリレーションは出来るのでしょうか? (VBAでは1つのサーバーにしか同時接続できなかったため) またその場合のフローチャートのイメージが出来ないのですが、箇条書き程度で結構ですので教えていただけないでしょうか?(どこでストアドプロシージャに処理が移行するのかなど....) 長い文章でわかりにくいと思いますが、識者の方がいれば教えていただければ幸いです。

  • oracleのデータディクショナリからCSV出力のPGM生成

    oracleのテーブルからデータをCSV形式でエクスポートしたいのですが、 expコマンドではCSV形式をサポートしていないようです。  ↓ 仕方なくPL/SQLで順次読みしながらCSV出力するプログラムを書こうと思いました。  ↓ テーブルひとつひとつ手作りするのは面倒なので、 「CSV出力するプログラム」を書くのではなく、 USER_TABLESやUSER_TAB_COLUMNSの情報を参照しながら、 「CSV出力するプログラムを生成するプログラム」を書こうと思いました。  ↓ こんな誰でも思いつく事は誰かが既にやってそうなので、 ネットに落ちているのではないかと思いました。  ↓ という経緯です。 PL/SQLでoracleのデータディクショナリを参照しながら 「CSV出力するプログラムを生成するプログラム」 の雛形がどこかネットに無料で落ちていたら紹介して下さい。 よろしくお願い致します。

  • テーブルの行を動的なキーをもとに削除したい

    基本的な質問でしたら恐縮です。 Oracle 11gデータベースを使用しています。あるテーブルから、特定のキーを削除するSQL文は書けます。例えば、USER_IDが0020、0019の二行を削除したい場合以下のようにすると思います。 DELETE FROM USER_MASTER WHERE USER_ID IN ('0020', '0019'); 今やりたいのは、このキーを他のCSVファイルなどに記述させ、(例. 0020, 0019, 0037, ...)この値をバッチファイルから読み込んで削除するようにしたいです。そうすれば、日次でCSVを更新すれば毎日別の行を削除でき汎用的にできるからです。CSVに記述する値の数は可変としたいのですが、このように動的に処理することは可能でしょうか? 普通のSQLではなく何等かのプログラムが必要かと思いますが、これがPL/SQLというものでしょうか? もし、簡単にPL/SQLで作成できるようなものであれば、どなたかご提示頂けないでしょうか。あと、バッチファイル(WindowsでもUNIX版でも)からそれを呼び出すところまでご教示頂けるのなら大変助かります。 以上、宜しくお願いします。

  • Selectの処理速度改善について

    先日、PL/SQLの開発について、こんな質問を受けました。 「SQLを組むさい、処理速度を速めるためにやっていることは?」 と。 で、ちょっと考えて 「Selectなら、Indexを考慮してSelect文を作成し、実行します。 処理時間がかかる場合は、実行計画などをみて、 Select文にヒント句をつけて、処理速度を改善します。」 と答えました。 答えたあと、質問者された方は、なんだかがっかりした感じでしたが、 私の回答は不適切だったのでしょうか? それとも、どういう回答が良かったのでしょうか? よろしくお願いします。