• ベストアンサー

SATA転送量とSSD書き込み量の関係

SATA300(転送量限界300MBPS)マザーボードサーバーにSSD(4Kランダムwrite限界値350MBPS)を組み合わせてMySQLでデータベースを構築をしています。 crystalDisskMarkで計算すると、SSDの能力350MBPSに対し、SATA300の転送量は300MBPSとなりますので、転送限界値はSATA300がボトルネックとなります。 質問 このマサーボードとSSDの組み合わせで行うことは下記です。 データベース内部の計算を1分毎に行います。設定はクーロンです。 この計算は、「MySQL内部で最新時間をベースに計算してその計算結果を10万件のデータにアップデートするもの」です。外部からのインプットは一切ありません。 質問です。 質問1 この場合、MySQLの書き込み能力はSATA300の転送量300MBPSがボトルネックになるのか、SSDの限界値 350MBPSが引き出せるのかご存知の方お教え願います。 私の考えでは、SATA300の転送量限界値は、あくまで、インターネットなどの外部からのGET要求などに対する回答時の転送限界値であり、SSD内部での計算書き込み値に災いしないと考えております。 すなわち、この場合の計算書き込み限界値はSSDの限界値=350MBPSだと考えていますがこの考えは正しいでしょうか? 質問2 上記に高速性を持たせるためにSSDをRaid0化した場合、計算量が700MBPSに向上します。 Raid0化した場合、今回のクーロンによる書き込み量の限界値はどういう計算になりますでしょうか?私は700MBPS書き込みできると考えていますが正しいでしょうか? 質問3 上記に冗長性を持たせるためにRaid1化した場合はどうなりますでしょうか? Raid1化することにより、SATAの回線を使って同期化するのでそこの限界値が来るのか、私の考えは、「Raid1は独立した計算をそれぞれのSSDで行うため、限界は350BPS」と考えていますが正しいでしょうか? 質問4 上記に高速性と冗長性を持たせるためにRaid10化した場合はどうなりますでしょうか? 私は700BPSと考えていますが正しいでしょうか? 尚、CPU、メモリは十分なものを積んでいるとします。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

質問1 SATAの転送速度が300MBPSなら、300MBPSが限界。 「書きっぱなし」は有り得ないので、実質的な最高書込速度は140MBPS程度になる筈。 基本、ファイルを書き換える際は「メモリに読んで、メモリの一部を変更して、ファイルに書き戻し」と言う処理になる。 なので「レコードの更新」を1回行うと「1回読んで」と「1回書いて」の、2回の転送が起こる。 「1回書いて」には、ほぼ確実に「ベリファイ」が入るので、「1回書いて」には「書いて読んで」の時間がかかる。 従って、どう足掻いても「ボトルネックのの転送速度÷2以下」の速度しか出ない。 質問2 Raid化した場合、SATAの転送速度は無関係になる。 Raidコントローラーが受け付ける転送速度の限界が、限界値となる。 例えば、PCIスロットに挿すRAIDコントローラーなら、PCIバスの最高速度133MBPSを超えた転送は不可能。 もし、RAIDコントローラーがPCIバスの帯域の133MBPSをすべて使い切ったら、画面表示も何も出来なくなるから、パソコンは動作しなくなる。 PCIバスをやめ、SATAポートの先にRaidコントローラーを繋げば、今度は、SATAの転送速度がボトルネックになる。 質問3 質問4 Raid1、10化しても、実質的な最高書込速度はRaidコントローラーの最高速度に左右される。 と言うか、raid1、raid10化すると、冗長化した分、確実に速度は落ちる。 >尚、CPU、メモリは十分なものを積んでいるとします。 CPU、メモリがどうあれ、結果はほぼ同じ。CPUとメモリがよっぽど低性能じゃない限り、CPUとメモリは無視してよい。 >この計算は、「MySQL内部で最新時間をベースに計算してその計算結果を10万件のデータにアップデートするもの」です。外部からのインプットは一切ありません。 「1レコードの物理サイズ」が判らないと、記録媒体のデータ転送速度を計算しても無意味。 例えば「1レコード100バイトのテーブル」と「1レコード10000バイトのテーブル」では「10万レコード分の転送量」は100倍違う。 それに、論理レコード長が物理レコード長の整数倍じゃない場合、セクタの読み書きのオーバーヘッドが大きくなるので、そこも重要。 その辺を明確にしないと「すべての計算が無意味」になる。 残念だけど、プログラマとSEとデータベース設計をやって20年になる人間から言わせてもらうと「お話にならないから、一昨日おいで」って感じです。

tajix14
質問者

お礼

有難うございます。今回は沢山の方にお答えいただき、大変勉強になりました。恥ずかしい間違いを犯すところでした。 今回のサーバーのRaidコントローラーは300MBPSでした。SATA2と同様の数値です。能力が同じであれば設定がしやすいソフトウエアRaidで行こうと思っていたのですが、下記の記事でハードウエアRAIDの方がやや高速との記事もあり悩むところです。 http://sourceforge.jp/magazine/08/07/17/0156249/5 この部分については、もう少し自分なりに調べてみます。もしかすると再度こちらで質問をすることになるかもしれませんがその節は宜しくお願い致します。 皆さんから暖かいお答えを頂いたため、皆さん全員をベストアンサーとしたかったのですが、1名しか選べません。 私の質問は転送量のボトルネックという単純な質問だったのですが、当方がやりたいことをご勘案いただき、単なる転送量のボトルネックではなく、「UPDATEの場合には、読み込みと書き込みの2回の出し入れがあるためボトルネックの1/2の数値で計算することが肝要」であり、さらに「もろもろのことも考える必要がある」ということまでご教示頂きましたchie65535さんをベストアンサーとさせていただきました。 本当にありがとうございました。

その他の回答 (4)

回答No.5

本題に直接関係しないと思いますが、間違いが多いので。 SATA2の転送速度は3Gbps≒300MB/s PCIバスの転送速度は33MHz*4byte(32bit)≒133MB/s 大昔のマシンでないかぎり、PCIバスと画面用バス(AGP、PCI Express)は分離されてるので、帯域を使い切っても画面表示ができないってことはまずない。PCIオンリーのマシンで帯域を使い切ると、マウスカーソルの動きにもついていけなくなるが、分離されていればマウスカーソルくらいは普通に動かせる。ディスクアクセス待ちとかで画面が更新されないのはどちらも同じだけど、それは帯域の問題とは別の話。 (そもそも、SATA2が使えるマシンの話でPCIにRAIDコントローラー挿すという話もどうかと)

tajix14
質問者

お礼

有難うございます。今回は沢山の方にお答えいただき、大変勉強になりました。恥ずかしい間違いを犯すところでした。 今回のサーバーはRaidカードは入っていますが、これがボトルネックになることも新たに分かりましたのでLinuxのソフトウエアRaidを使用することにしました。本当にありがとうございました。

  • ariseru
  • ベストアンサー率56% (928/1657)
回答No.3

>質問1 速度の上限はSATA2.0の規格上の速度である300MB/s、実際の速度は270~290MB/sあたりで頭打ちかな。 >SSD内部での計算書き込み値に災いしないと考えております。 SSD内部での計算なんてことは出来ません。 HDDやSSDというのは単なる記憶媒体ですので、計算処理を行うような機能はありません。 何らかの計算を行って、その結果を保存する場合は、HDD/SSD内のデータをメモリ上に読み出す→CPUがメモリ上のデータを読み込んで計算をする→計算結果をHDD/SSDに書き込む、って感じの流れになります。 つまり、必ずHDD/SSD外部を経由しないと計算処理は行えませんので、データ転送速度の上限は接続インターフェイスの仕様によって制限されます。 >質問2 RAID 0を組んだ場合ですと、理論値300MB/s×2台なので理論値で600MB/sですね。 オンボードのRAID機能だとロスもあるから、実測だと550~570MB/sあたりになるんじゃないかな? >質問3 書き込み速度の上限は1台の時と同じく、理論値で300MB/s、実測値で270~290MB/sくらいかと。 >質問4 RAID 10を組んだ場合は、速度的にはRAID 0とほぼ同じになります。

tajix14
質問者

お礼

有難うございます。今回は沢山の方にお答えいただき、大変勉強になりました。恥ずかしい間違いを犯すところでした。 今回のサーバーはRaidカードは入っていますが、これがボトルネックになることも新たに分かりましたのでLinuxのソフトウエアRaidでRaid1として使用することにしました。本当にありがとうございました。

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.2

1.SSDの内部で計算するのでは無くCPUで計算を行うので、CPUとSSDの間の通信速度がボトルネックになるので、マザーボードの300MBPSというSATAのスピードが理論上の限界値です。 また、CPUで計算するためにSSDからデータを読み出し、結果を書き込むのでCPUでの計算時間やファイルシステム自体の処理時間が必要になるので、SATAのI/O速度以外の要素も考慮しなければいけません。 2.2つのSATAに同時アクセスできるので理論上の限界値は600MBPSですね。 3.2つのSATAに同じ物を同時に書き込むので理論上の限界値は300MBPSですね。 4.理論上の限界値は600MBPSですね。

tajix14
質問者

お礼

有難うございます。今回は沢山の方にお答えいただき、大変勉強になりました。恥ずかしい間違いを犯すところでした。 今回のサーバーはRaidカードは入っていますが、これがボトルネックになることも新たに分かりましたのでLinuxのソフトウエアRaidでRaid1として使用することにしました。本当にありがとうございました。

回答No.1

> 私の考えでは、SATA300の転送量限界値は、あくまで、インターネットなどの外部からのGET要求などに対する回答時の転送限界値であり、SSD内部での計算書き込み値に災いしないと考えております。 SSD内部で計算などできないでしょ。 計算はあくまでCPUが行っているので、SSDとCPU(に接続されているメモリ)の間のデータ転送にはSATAが使用されるので、そこがボトルネックになります。 RAID0については、ハードウェア・ソフトウェアの違いとかもあるし、どうがんばっても倍にはならないのですが、限界値が上がる可能性があるという認識は正しいです。 RAID1は同じデータを複数のドライブに書き込んでいるので、チャンネルが異なれば転送速度には影響しないと考えられますが、実際は少し遅くなる場合もあるようです。同じチャンネルに接続されたドライブでRAID1を組むと、データ転送量が倍になるので、遅くなります。

tajix14
質問者

お礼

有難うございます。今回は沢山の方にお答えいただき、大変勉強になりました。恥ずかしい間違いを犯すところでした。 今回のサーバーはRaidカードは入っていますが、これがボトルネックになることも新たに分かりましたのでLinuxのソフトウエアRaidでRaid1として使用することにしました。本当にありがとうございました。

関連するQ&A