[groonga-dev,01724] Re: 仮想メモリサイズを超えるmroongaのインデックス構築について

Back to archive index

Kouhei Sutou kou****@clear*****
2013年 8月 29日 (木) 14:31:38 JST


須藤です。

In <CANM+HhfteP6Xz_GYCJQ****@mail*****>
  "[groonga-dev,01723] Re: 仮想メモリサイズを超えるmroongaのインデックス構築について" on Thu, 29 Aug 2013 12:56:58 +0900,
  Naoya Murakami <visio****@gmail*****> wrote:

> パッチ+さらなるスワップ追加が必要ということでしょうか?

いえ、パッチあるなしに関わらずスワップの追加が必要ということ
です。(予測ですが。。。)

> それとも、今回の落ち方であればパッチだけでも解消できる
> 可能性がありますか?

いえ、ありません。落ちなくなるかもしれませんが、インデックス
の構築は失敗します。理由は必要なメモリを確保できていないから
です。

(あれ、メモリを確保できていないとしたらmalloc failというロ
グがでていそうだけどでていないなぁ。。。mallocが失敗している
という予想が間違っているのかしら。。。)

> 次のアクションとして、(1)パッチだけ試した方がいいのか、
> (2)パッチ+さらなるスワップを追加して試した方がいいのか、
> を知りたいです。1アクションに時間がかかるので。。

もし余裕があるのなら(1)+「mallocが本当に失敗しているかを調べ
る」(手順は後述)をしてもらいたいのですが、今のgroongaで
90GiBのデータのオフラインインデックス構築は難しそうなのでお
願いしづらいなぁというのが正直なところです。

また、スワップの追加は大変だと思うので、(3)データの持ち方を変
えるのが現実的だと思います。せっかくいろいろ試してもらったの
にすみません。。。

今は、ftextの

  title,abstract,claims,description_19xx,description_20xx,property

のマルチカラムインデックスを作るところで落ちています。もし、
↑の中のうち、特定のカラムだけがサイズが大きいのではなく、全
体的にサイズが大きいのであれば1つのインデックスに入れるカラ
ムの数を減らせば今のスワップでもいけるかもしれません。

例えば、

  * title:            10GiB
  * abstract:         10GiB
  * claims:           10GiB
  * description_19xx: 20GiB
  * description_20xx: 20GiB
  * property:         20GiB

↑というような感じで全部で90GiBになっているなら

  title,description_19xx
  abstract,description_20xx
  claims,property

なインデックス3つにわけると今のスワップでもいけるかもしれま
せん。

検索するときにMATCH AGAINSTを複数指定しないといけなくなりま
すが。。。


後述するといった「mallocが本当に失敗しているかを調べる」手順
は以下のとおりです。余裕があれば試してもらえればうれしいです。

gdb経由でmysqldを起動します。runを実行する前にmallocが失敗し
たところにブレークポイントをしかけます。そうすると、ctx.cな
んてファイル知らないけどそれでもブレークポイントしかけるの?
と聞かれるのでyと答えます。

  (gdb) break ctx.c:2563
  No source file named ctx.c.
  Make breakpoint pending on future shared library load? (y or [n]) y <- yと入力

このあとmysqldを実行します。

  (gdb) run

これでmallocが失敗したらgdbのプロンプトがでてきます。このと
き、バックトレースのバックトレースをとってほしいです。

  (gdb) thread apply all backtrace full


> 前に追加スワップ230Gぐらいまでは試したのですが、さらにあげないとだめですかね。

そんな気がしています。ただ、それが確実というわけではなく予想
というのがアレなんですが。。。

> 別に2TのSSDのサーバもありますので、最悪、こちらのデータを一時退避させれば、
> スワップ1Tぐらいにして試すことは可能といえば可能です。
> が、移動が大変ですし、SSDのスワップ1Tはもったいなすぎるので、あまり
> やりたくない感じです。

ですよねぇ。
わかります。

-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)

groongaサポート:
  http://groonga.org/ja/support/
パッチ採用はじめました:
  http://www.clear-code.com/recruitment/
コミットへのコメントサービスはじめました:
  http://www.clear-code.com/services/commit-comment.html




groonga-dev メーリングリストの案内
Back to archive index