- ベストアンサー
MySQL インメモリでINSERTの方法について
- MySQL インメモリでINSERTを完結させる方法について教えてください。
- 現在のテスト環境では、10万件の登録に1分半かかっていますが、秒間15000 insert/s超えを達成する方法があると聞きました。
- インメモリでのインサートの方法が分からず、どのように実現すればよいか悩んでいます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>CPU使用率は40%ほどしかなく、メモリも余裕があるのに、IOだけが完全に溢れております。 となるとたんにファイルI/Oのボトルネックでしょうか・・・ 遅延書き込みがうまく機能していないだけならバッファリングの調整で 少しは改善されるかもしれません。 ただ、結局書き込みがおいつかないなら、本質的にはハードウェアで処理するしかなく、 SSDやらでデータ管理しないと解決しないかもしれませんね。 検証については以下サイトなど参考になるとおもいますので、 諸々の変数を調整してみてはいかがでしょうか? http://blog.layer8.sh/ja/2011/12/23/mysql%E3%82%92%E9%AB%98%E9%80%9F%E5%8C%96%E3%81%97%E3%81%9F%E3%81%84%E3%81%A8%E3%81%8D%E3%81%AE%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0/ また、MySQLのレイヤーによる負荷を軽減するためにHandlerSocketというプラグインも あるようなので、場合によってはチャレンジしてみてもよいかもしれません。 (個人的には興味があるのですが未検証なので自己責任でお願いします) http://engineer.dena.jp/2010/08/handlersocket-plugin-for-mysql.html
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
>1.2GBのデータを2GBメモリのマシンで展開している そういう単純計算ではないと思いますが・・・ インサート時のCPUやメモリの負荷をみれば、改善個所も変わってくるでしょう 私見ですが2GBメモリだと1億のデータを扱うには圧倒的にたりないと思います あとはテーブルの構成をよほどうまく調整するしかないですね インサートのスピードについては公式マニュアルを参考に http://dev.mysql.com/doc/refman/5.1/ja/insert-speed.html
補足
早速のご投稿ありがとう御座います。 >そういう単純計算ではないと思いますが・・・ そうですよね。私もそうだとも思ったのですが.. >私見ですが2GBメモリだと1億のデータを扱うには圧倒的にたりないと思います あくまでテスト環境です。本番環境ではxeon5570(quad core 2.93 HT)X2連装(16スレッド)、メモリ16GBで対応予定です。 Quadcore2.4GHz 2GBメモリはあくまでテスト環境ですが、このテスト環境に1000万行の書き込みをしたところ、CPU使用率は40%ほどしかなく、メモリも余裕があるのに、IOだけが完全に溢れております。 種々のテスト結果、現状ではinsertは数千行/秒のイメージのため、raid10で対応しようとは思っていますが、それでも倍速にしかなりません。 そこで、ディーエヌエーの松信氏が言う秒間15000 insert/s超えを達成させる「インメモリでINSERTを完結」させる方法という言葉に期待して質問したところです。 ご記入頂きましたURLを拝見しましたが、残念ながらインメモリでINSERTの方法について触れられておりませんでした。 さらなる情報が御座いましたらご教授願いただきたくお願い申し上げます。 情報頂きましたこと御礼申し上げます。
お礼
ご教授いただきありがとうございます。 >諸々の変数を調整してみてはいかがでしょうか? はい、この部分についてはそれなりに調整していたのですが、どうもこの程度の小細工ではだめなようです。 >また、MySQLのレイヤーによる負荷を軽減するためにHandlerSocketというプラグインもあるようなので、場合によってはチャレンジしてみてもよいかもしれません。 情報ありがとうございます。 調べてみましたところ、まさにHandlerSocketこそが、ディーエヌエーの松信氏の発言にあったインメモリでINSERTを完結するそのもののようです。 HandlerSocket自体を松信氏が開発したようです。 いろいろ調べて、私の手に負えるようであれば使ってみたいと思います。 >SSDやらでデータ管理しないと解決しないかもしれませんね。 アドバイス通り、SSDで行きたいと考えています。 4K以下のランダムな書き込みが千回/秒あるという想定なのですが、4K write が310MB/s(HDの300倍!)も出てるので、これなら使えそうです。 http://review.kakaku.com/review/K0000431722/ReviewCD=566630/ImageID=105982/ また、同じような使用条件でソーシャルゲームを作っている方が、「1時間で28万PV(select)」かつ「柿拾い=350万(insert)」を行うようなゲームをSSDが難なくこなしているという記事も発見しました。 http://www.maido3.com/server/zousan/nikki175.html ヒントを頂きまして大変ありがとうございました。 お陰さまで安心して開発を進められます。 有難うございました。