- - PR -
ハードディスクによる処理時間の違い
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2006-06-27 15:13
初めて投稿させて頂きます。
現在、短時間に大量のデータを書き込む処理(Insert)を行っているのですが、ハードディスク(HDD)?によって書き込みにかかる時間が変わるため困っています。 出来るだけ多くのデータを処理できるようにマシンスペックを変更したのですが、 スペックの低いHDD(A)への書き込みの方が早く、スペックの高いHDD(B)の方が遅いのです!! SQL Server2000 Std オラクルでも同様の現象が、 HDDのスペックは下記の通りです。 A 回転数: 7,200 シークタイム: 12ms 接続: IDE(Ultra ATA133) B 回転数: 10,000 シークタイム: 5ms 接続: SCSI(Ultra 320) 何が違うのかというとスペックは同然違うのですが、気になるのは SCSI-HDDとIDE-HDDという点でして、SCSIの方がコマンドの処理にかかる オーバーヘッドは大きくなるとはよく聞く話なのですが、 ハードディスクなのか、それとも他のファクターなのか 原因は全くの不明です。 ☆☆どなたか御存知の方アドバイスのほう宜しくお願いします。☆☆ ちなみに、 データのSELECT,DELETEはHDDのA,Bとも変わらず、 UPDATEはHDDのBが処理時間は掛かりませんでした。 また、USB-HDDとSCSI-HDDとの比較も同様の結果となりました。 [ メッセージ編集済み 編集者: カルガモ 編集日時 2006-06-27 15:31 ] | ||||
|
投稿日時: 2006-06-27 16:24
チップセットは何ですか?
IDEはサウスブリッジ上、Ultra320 SCSIは32bit PCI上って事なら、IDEの方が早いって事もあるでしょうね。 | ||||
|
投稿日時: 2006-06-27 16:46
そんな詳しくないのでざっくり回答します。
参照と更新では物理データの扱い方が大きく違います。 Oracleを例にすると、参照では主にデータ表領域のみを扱い、 更新ではデータ表領域以外にUNDO表領域、REDOログの更新があります。 上記のように、更新では参照よりも多くのファイルへのアクセスが発生し、 特にREDOログはCOMMIT時に確実にディスクに書き込まれる必要があります。 こういった理由で、更新は参照よりもランダムアクセスが増えます。 このランダムアクセスにはシークタイムと回転数が大きく影響します。 高価なドライブほど短時間でランダムアクセスできるはずです。 #というより、速くするのに金が掛かかるわけですが。 ランダムアクセスの影響がどれだけ大きいかと言うと、 ヘッドやディスクの回転にかかる時間はミリ秒単位、 SCSIコマンドの処理は(おそらく)マイクロ秒単位、 ざっと1000倍の開きがあり、シークタイムのたった1msの差で SCSIコマンドのオーバーヘッドなんてかき消されてしまいます。 | ||||
|
投稿日時: 2006-06-27 18:45
甕星さん、あしゅさん、返答ありがとうございます。
まず、甕星さんからご指摘がありました、、、 チップセット詳細はわかりませんでしたが、SCSIインターフェースはオンボードのようでした。 PCIを経由する場合、確かに可能性としてはあるようです。 (ちょっと調べてみました) そこまでは思いつきませんでした。ハードに関しては無知なもので、。 @@@@ あしゅさん、ナルホドです。 データベースの操作でおまけでついてくるログが悪さをしていたんですね。 「INSERT,UPDATEで発生するランダムアクセスの頻度がSELECT,DELETEの操作よりも 多い」よって、当然、処理速度が変わってくるという事ですね。 ありがとうございます。 @@@ 御二方のお力添え本当に感謝です。 実際どのくらいの違いあったかというと感覚的に解るレベルです。 10,000件のデータを操作する(INSERTを10,000回繰り返す) (SQL Server 2000 Std) A(IDE) INSERT: 1.02(s) SELECT: 0.03(s) DELETE: 0.31(s) UPDATE: 0.19(s) B(SCSI) INSERT: 7.22(s) SELECT: 0.02(s) DELETE: 0.22(s) UPDATE: 1.12(s) しかし、こんなにも違うものなのでしょうか? 疑問です。 | ||||
|
投稿日時: 2006-06-27 19:01
ディスクのスピードを気にしているのであれば、DB 等のアプリケーションを
使用した数値じゃなくて、 OS側でファイル書き込み/読み込み などを計測し判断すべきじゃないですか? | ||||
|
投稿日時: 2006-06-27 19:13
問題を切り分けるためにRDBMSではなくて、
通常ファイルのI/Oで性能比較してみたらどうでしょう? このときにファイルのサイズを因子として サンプリングしてみてください。 #書いてないけど、2台ともフォーマットは同じ(NTFS?)で #セクタ長(クラスタ長)も同じなのかな? | ||||
|
投稿日時: 2006-06-28 09:39
せんサン、Java僧さん返答ありがとうございます。
提示した情報が少なかったようです。 この問題が発生した時に、ハードディスクのベンチマークを 行いました。 その結果はSCSI-HDDがファイルの読み込み/書き込み、シークタイム等、 全てにおいて性能が良い結果となりました。 Java僧さんからご指摘があった、ディスクのフォーマット(NTFS)、セクタ長は 二台とも同じです。 そこで、以下の2つのことをやってみました。 (IDE-HDD,SCSI-HDDそれぞれ) 1.1GBのファイルを書き込み 2.0byteのファイル50,000件を書き込み 結果は、 1.はSCSI-HDDが桁違いに早い 2.は2台ともさほど変わらず(若干SCSI-HDDが早い) となりました。 (2.は0byteより大きい値にしたほうが良かったかもしれませんが、、) このことから、 ・データのRead/WriteはIDE-HDD(A)よりSCSI-HDD(B)が性能が良い。 ・(Read/Write)命令を出してから実際にデータのRead/Writeまでにかかる時間 (シークタイム,回転数等の物理的な性能の違いを除く)は IDE-HDD(A)よりSCSI-HDD(B)が時間がかかる。 (SCSIは複数台のハードを接続することをベースに設計されているためそのために実行するコマンドが複雑なため時間がかかる?) ってことでしょうか? そうなると、あしゅサンの「更新は参照よりもランダムアクセスが増える」 ことを考えると納得です。 皆さん、ありがとうございます! 皆さんの意見を元に検討してみます。 | ||||
|
投稿日時: 2006-06-28 10:30
いわゆるバーストの性能は SCSI が良いけど、他は IDE と SCSI で大差なし、という感じでしょうか。 DBMS で使っているときに、SCSI と IDE の比較条件が異なっているのではないでしょうか?たとえば、もし DBMS 用のファイルを置いてあるドライブと、デバッグ用のログファイルのドライブが同じでログファイルが毎回フラッシュしているなどだっら、シークが競合しますので遅くなることもありえます。 あるいは、もし、Windows のシステムファイルが IDE の C: にあって、SCSI が D: にあったりしても、やっぱり、対等な比較ではないと思います。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||
