最終的に1億行になるであろうテーブルを含むデータベースを作っています。
テスト環境はCentOS6.3 MySQL5.5 CPU QuadCore 2.4GHz 2GBメモリです。
テスト環境を作るために10万件づつのCSVファイルをインサートしていったところ最初の10万件は数秒でインサートできたのですが、だんだん重くなり、1000万件近くになると「10万件の登録に1分半」もの時間が掛かっています。
(1000万件のデータはinnoDB上で1.2GB)
サーバーを公開した場合、最大で1分間に数万件のインサートが見込まれていますので、今の環境だとテーブル内データ1千万件が限界の感じであり、現在予想している1億行では使い物にならないと危惧しています。
そのような中、調査していくとディーエヌエーの松信氏の発言で
http://www.slideshare.net/kaminashi/db-6636154
18. インメモリでINSERTを完結する
インメモリでのINSERT性能 InnoDBの場合秒間15000 insert/s超え
という記載を発見しました。
しかし、インメモリでのインサートの方法というのが分かりません。
話の筋やInnoDBという単語から言って、松信氏の言う「インメモリでINSERTを完結する」と「インメモリー・データベース」とは違うと考えております。
実メモリの範囲内という考えなら、現在のテスト環境でも1.2GBのデータを2GBメモリのマシンで展開しているわけなので、「10万件の登録に1分半」かかる理由が分かりません。
秒間15000 insert/s超えを達成させる「インメモリでINSERTを完結」させる方法について具体的にご教授いただけませんでしょうか?
宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
>CPU使用率は40%ほどしかなく、メモリも余裕があるのに、IOだけが完全に溢れております。
となるとたんにファイルI/Oのボトルネックでしょうか・・・
遅延書き込みがうまく機能していないだけならバッファリングの調整で
少しは改善されるかもしれません。
ただ、結局書き込みがおいつかないなら、本質的にはハードウェアで処理するしかなく、
SSDやらでデータ管理しないと解決しないかもしれませんね。
検証については以下サイトなど参考になるとおもいますので、
諸々の変数を調整してみてはいかがでしょうか?
http://blog.layer8.sh/ja/2011/12/23/mysql%E3%82% …
また、MySQLのレイヤーによる負荷を軽減するためにHandlerSocketというプラグインも
あるようなので、場合によってはチャレンジしてみてもよいかもしれません。
(個人的には興味があるのですが未検証なので自己責任でお願いします)
http://engineer.dena.jp/2010/08/handlersocket-pl …
ご教授いただきありがとうございます。
>諸々の変数を調整してみてはいかがでしょうか?
はい、この部分についてはそれなりに調整していたのですが、どうもこの程度の小細工ではだめなようです。
>また、MySQLのレイヤーによる負荷を軽減するためにHandlerSocketというプラグインもあるようなので、場合によってはチャレンジしてみてもよいかもしれません。
情報ありがとうございます。
調べてみましたところ、まさにHandlerSocketこそが、ディーエヌエーの松信氏の発言にあったインメモリでINSERTを完結するそのもののようです。
HandlerSocket自体を松信氏が開発したようです。
いろいろ調べて、私の手に負えるようであれば使ってみたいと思います。
>SSDやらでデータ管理しないと解決しないかもしれませんね。
アドバイス通り、SSDで行きたいと考えています。
4K以下のランダムな書き込みが千回/秒あるという想定なのですが、4K write が310MB/s(HDの300倍!)も出てるので、これなら使えそうです。
http://review.kakaku.com/review/K0000431722/Revi …
また、同じような使用条件でソーシャルゲームを作っている方が、「1時間で28万PV(select)」かつ「柿拾い=350万(insert)」を行うようなゲームをSSDが難なくこなしているという記事も発見しました。
http://www.maido3.com/server/zousan/nikki175.html
ヒントを頂きまして大変ありがとうございました。
お陰さまで安心して開発を進められます。
有難うございました。
No.1
- 回答日時:
>1.2GBのデータを2GBメモリのマシンで展開している
そういう単純計算ではないと思いますが・・・
インサート時のCPUやメモリの負荷をみれば、改善個所も変わってくるでしょう
私見ですが2GBメモリだと1億のデータを扱うには圧倒的にたりないと思います
あとはテーブルの構成をよほどうまく調整するしかないですね
インサートのスピードについては公式マニュアルを参考に
http://dev.mysql.com/doc/refman/5.1/ja/insert-sp …
この回答への補足
早速のご投稿ありがとう御座います。
>そういう単純計算ではないと思いますが・・・
そうですよね。私もそうだとも思ったのですが..
>私見ですが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の方法について触れられておりませんでした。
さらなる情報が御座いましたらご教授願いただきたくお願い申し上げます。
情報頂きましたこと御礼申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
テーブルで一番古いレコードだ...
-
このISAMでは、リンクテーブル・・
-
mysqlへの書き込みがリロードす...
-
ビューのソートについて
-
マテリアライズドビューとスナ...
-
Accessのテーブルデータを一気...
-
access2000 オートナンバーで...
-
ACCESSで容量が50MBになった...
-
ORA-01401が表示され、データが...
-
Oracleで上書きImportはできま...
-
処理の途中で停止させ、再開さ...
-
アクセス レコードセットを更...
-
SQL文の結合(一対多)がわから...
-
テーブル名をカラムとして取得...
-
SELECT 文の NULL列は?
-
テーブルに存在しない列をselec...
-
update文で改行を入れる
-
まるいテーブル 円い 丸い 漢字...
-
会社の飲み会の幹事になり、座...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
テーブルで一番古いレコードだ...
-
Oracleで上書きImportはできま...
-
このISAMでは、リンクテーブル・・
-
アクセス レコードセットを更...
-
ビューのソートについて
-
マテリアライズドビューとスナ...
-
処理の途中で停止させ、再開さ...
-
MS Accessを共有した際にファイ...
-
構文エラー : 演算子がありませ...
-
ORA-01401が表示され、データが...
-
accessでレコード更新直後の反...
-
重複クエリを使ったデータ削除
-
Accessでの稼働日数計算の方法
-
住所のDBテーブル、マスターの...
-
同一テーブルのデータを参照し...
-
ERROR1062:Duplicate entry.......
-
ACCESSで容量が50MBになった...
-
複数のテーブルを参照するselec...
おすすめ情報