【入門編】 アクティブデフラグ設定 – Redis

やあ、よく来てくれました。Redisの世界へようこそ。
世界最速のデータベース、Redisの学習に励んでいる君の姿勢は素晴らしいですね。

今日は、Redisを運用する上で避けては通れない、けれど多くの人が「なんとなく」で済ませてしまっている『アクティブデフラグ』という魔法のような機能についてお話ししましょう。

難しく考える必要はありません。この概念をマスターすれば、君はRedisのメモリ管理において、現場の先輩たちも一目置くような「本質的な視点」を手に入れることができますよ。

—

1. Redisの「メモリの虫食い」問題

まず、Redisがメモリをどう使っているかを「本棚」に例えてみましょう。

Redisは非常に高速ですが、それはデータをすべてメモリ(本棚)に置いているからです。データを書き込むのは「本を並べる」こと、消すのは「本を抜く」ことです。

しかし、ここで困ったことが起きます。
本をあちこちから抜き取っていくと、本棚には「中途半端な隙間(空きスペース)」がたくさんできてしまいますよね?

  • 合計すると10冊分空いているのに、1つ1つの隙間が小さすぎて、新しい大きな図鑑が1冊も入らない。
  • OS(パソコン全体を管理する人)からは「その本棚、スカスカじゃないか!もっと有効に使え」と怒られる。

これが「メモリの断片化(フラグメンテーション)」という現象です。
Redisは、自分では「100MBしか使っていない」つもりでも、OSから見ると「隙間だらけで200MB分も占有している」という状態になってしまうのです。

2. 「アクティブデフラグ」は、凄腕の整理整頓係

昔のRedisは、この隙間を埋めるために一度再起動したり、複雑な操作が必要でした。
しかし、Redis 4.0から登場した「アクティブデフラグ」は、Redisが動きながら、裏側でこっそりと「本の並べ替え」をして隙間を詰めてくれる機能なんです。

これがどれほど画期的なことか。サービスを止めずに、常に本棚をピカピカに保てるわけですからね。

それでは、この整理整頓係にどんな指示を出すべきか、設定項目(redis.conf)を見ていきましょう。

—

3. 整理整頓係への「5つの指示書」

Redisの設定ファイルには、整理整頓のやり方を決める重要な項目があります。これらを理解すれば、君も立派なメモリ・アーキテクトです。

① `activedefrag`:整理整頓を始めるスイッチ

アクティブデフラグを有効にする(デフォルトは no)
activedefrag yes

これがすべての始まりです。デフォルトでは「no」になっていることが多いので、本棚が散らかりやすい環境では「yes」にしてあげましょう。

② `active-defrag-ignore-bytes`:どれくらい散らかったら動くか?

隙間の合計が100MBを超えたら整理を開始する
active-defrag-ignore-bytes 100mb

「少しの隙間くらい気にするな」という指示です。あまりに頻繁に整理させると、Redisが本来の仕事(データの読み書き)に集中できなくなってしまいますからね。

③ `active-defrag-threshold-lower`:重い腰を上げるタイミング

断片化率が10%を超えたら、少しずつ整理を開始
active-defrag-threshold-lower 10

断片化率とは「本棚の無駄遣い度」です。10%くらい無駄が出てきたら、「そろそろ片付けようか」と動き始めます。

④ `active-defrag-cycle-min`:整理整頓に使う「やる気」の最小値

CPUパワーの1%を整理に割り当てる
active-defrag-cycle-min 1

Redisにとっての「やる気」とはCPUの力のことです。これは「最低でもこれくらいは片付けに力を貸してね」という指示です。

⑤ `active-defrag-cycle-max`:整理整頓に使う「やる気」の最大値

CPUパワーの最大25%まで整理に割り当てて良い
active-defrag-cycle-max 25

「あまりに本棚がひどい時は、本気を出していいよ。でも仕事の邪魔になるから25%までにしてね」という制限です。

—

4. 実際にどう動いているか見てみよう

設定を終えたら、Redisが頑張ってくれているか確認してみましょう。
ターミナルで `INFO memory` というコマンドを打ってみてください。

redis-cli INFO memory

— 注目すべき項目 —
mem_fragmentation_ratio: 1.55 <-- 1.0に近いほど綺麗(1.55は55%が無駄) active_defrag_running: 1 <-- 1なら今まさに整理整頓中! 恩着せがましくない程度に、裏でしっかり働いてくれます。 もし `mem_fragmentation_ratio` が 1.5 を超えていて、かつ `active_defrag_running` が 0 なら、設定を見直して整理整頓係を呼び出すチャンスです。 ---

5. 先輩からのアドバイス:やりすぎには注意

最後に、大切な知恵を授けます。

アクティブデフラグは魔法ですが、タダではありません。整理整頓(データの移動)には、わずかですがCPUの力を使います。
非常に高い性能(ミリ秒以下のレスポンス)が求められる現場では、「あえてデフラグを弱めにする」という選択をすることもあります。

「メモリという資源」と「CPUという体力」、この2つのバランスをどう取るか。
それができるようになれば、君はもう初心者卒業です。

—

まとめ

1. 断片化は、メモリに「使い物にならない隙間」ができること。
2. アクティブデフラグは、サービスを止めずに隙間を埋める機能。
3. 設定項目で「いつ」「どれくらい本気で」片付けるかをコントロールする。

「ここをクリアすれば、Redisの基本はバッチリマスターできますよ。」

もし運用中に「なぜかメモリ使用量が増え続けているな?」と首をかしげている同僚がいたら、優しく「アクティブデフラグの設定、見てみた?」と声をかけてあげてください。

その時、君はもう立派なリードエンジニアの顔をしているはずです。頑張ってくださいね!

コメント

タイトルとURLをコピーしました