磯部 和広
k-iso****@rozet*****
2013年 6月 28日 (金) 16:13:03 JST
いつもお世話になっております。 [groonga-dev,01506] Re: FULLTEXT initializationについて に関する 別のDBを作成し、同じ構造のデータを持たせる 実験の際に、知見を得ましたので報告します。 須藤さんの下記に関連すると思うので、MLのスレッドをここに繋げました。 >須藤: > * mroongaはメモリーを開放していると考えている。 > * 「mroongaがメモリーを開放している」とはmroongaがOSにメ > モリーを返していることだけを表現している。 > * もしかしたらFLUSH TABLES;で開放していない可能性はある > かもしれないが、mysqldを終了したら確実に開放していると考え > ている。 ■やった事■ DBを作成し、mroongaをストレージエンジンとしたテーブルを作成します。 次いで、MySQLを停止せずに、該当DBのmroongaのデータファイルを 別ドライブに移動させ、元の場所にシンボリックリンクを張ります。 該当DBに対し、FLUSH TABLES; を実行します。 この時点で、ファイルの実体は別ドライブに移っているのですが、 duコマンドで見ると使用量は減っているのに、 dfコマンドで見ると、使用量は変わっていません。 mroongaが掴んだままになっているようです。 mysqldをシャットダウンして、再度dfコマンドで確認すると 使用量は実体と合ったものになります。 ■自分の考え■ mroongaがFLUSH TABLES; を実行したタイミングで mmapしたメモリをOSに返却しているなら、 その時点でdfコマンドの結果が正常(実態通り)になると想像しているのですが。 どうも、mroongaはOSではなくMySQLに返却し、 MySQLが終了したタイミングで解放されているように見えます。 もしくは、何らかの情報がMySQLからmroongaに引き継がれ、 その情報が邪魔をして OSはまだMySQLが使用している と判断しているのか・・・ そのへんは詳しくないので判りませんが、どうもそんな感じです。