2017-01-04 7 views
1

私はmemcacheサーバの鍵の数を数えたいので、libmemcachedに付属していると思われるmemdumpユーティリティを使いました。それが言うコマンドの説明ではmemdumpでキーをダンプすると、「1スラブクラスごとの1ページ」の制限は何を意味しますか?

からフェッチするように言われているすべてのサーバーから「鍵」のリストをダンプmemdump

。 memcachedはすべてのキーを提供する必要はないので、完全な "ダンプ"を取得することはできません。別のウェブサイト上でまた

Memcached Cheat Sheet)Iが読み込ま:

[...] memcacheのプロトコルは、スラブによって編成されたデータに覗くためのコマンドを提供する(所定の大きさの範囲のデータの分類) 。いくつかの重要な制限ががあります

  1. あなたが唯一のスラブクラスごとにキーをダンプすることができます(ほぼ同じ内容の大きさの鍵)

  2. は、あなただけのスラブクラスごとに1ページ(データの1メガバイト)をダンプすることができます

  3. これはいつでも削除できる非公式な機能です。

[...]

のでYou can only dump one page per slab class (1MB of data)は実際に何を意味するのでしょうか? 1メガバイトのデータは何ですか?スラブに1 MB以上のデータ(キーを含む)が含まれている場合、残りのデータは取得されず、いくつかのキーが欠落する可能性があります。

例として、3つのキーAには500KBのデータがあり、Bには600KBのデータがあり、Cには300KBのデータがあり、それらはすべて同じスラブに移動します。キーをダンプするときに、AとBのみを(その後も遮断されるかもしれない!)データをダンプする

答えて

0

memdumpユーティリティは、スラブIDによってキーのリストを取得するためにmemcacheのプロトコル文書化されていないコマンドstats cachedumpを採用しています。あなたは、memcachedのソースコードitems.cstats cachedump <slabs_id> <limit>実装で見ることができます:

char *item_cachedump(const unsigned int slabs_clsid, const unsigned int limit, unsigned int *bytes) { 
     unsigned int memlimit = 2 * 1024 * 1024; /* 2MB max response size */ 

    while (it != NULL && (limit == 0 || shown < limit)) { 
    // ... key copying occurs here 
    if (bufcurr + len + 6 > memlimit) /* 6 is END\r\n\0 */ 
       break; 
    // ... 
    } 

は、だから、与えられたスラブあたりのキー以上の2メガビットを取得するためにmemcachedを再コンパイルせずには不可能です。値は応答バッファにコピーされません。応答サイズの制限はキーにのみ適用されます。

+0

ああ、基本的に1 MBの鍵を得ることができますか? – Max

+0

@Max memcachedソースコードからわかるように、 'cachedump'コマンドのレスポンスバッファサイズには2MBの制限があります。だから、はい、あなたは1MBの鍵を得ることができます。 –

関連する問題