Почему Redis сохраняет частичные наборы данных? - PullRequest
0 голосов
/ 27 февраля 2019

Версия : Redis 5.0.3

В redis.conf есть опция для установки периода снимка.Я устанавливаю этот период каждые 5 секунд, если изменяется одно значение, чтобы увидеть производительность Redis при сбросе.Я запустил два приложения;один - redis-server, а другой - redis-benchmark.Наблюдая за журналом, я обнаружил кое-что интересное, как показано ниже.

7269:C 27 Feb 2019 14:48:39.463 * RDB: 4535 MB of memory used by copy-on-write
7257:M 27 Feb 2019 14:48:39.939 * Background saving terminated with success
7257:M 27 Feb 2019 14:48:45.085 * 10 changes in 5 seconds. Saving...
7257:M 27 Feb 2019 14:48:45.187 * Background saving started by pid 7270
7270:C 27 Feb 2019 14:49:00.313 * DB saved on disk
7270:C 27 Feb 2019 14:49:00.401 * RDB: 4535 MB of memory used by copy-on-write
7257:M 27 Feb 2019 14:49:00.882 * Background saving terminated with success
7257:M 27 Feb 2019 14:49:06.011 * 10 changes in 5 seconds. Saving...
7257:M 27 Feb 2019 14:49:06.114 * Background saving started by pid 7271
7271:C 27 Feb 2019 14:49:21.086 * DB saved on disk
7271:C 27 Feb 2019 14:49:21.173 * RDB: 4534 MB of memory used by copy-on-write
7257:M 27 Feb 2019 14:49:21.706 * Background saving terminated with success
7257:M 27 Feb 2019 14:49:27.048 * 10 changes in 5 seconds. Saving...
7257:M 27 Feb 2019 14:49:27.155 * Background saving started by pid 7273
7273:C 27 Feb 2019 14:49:42.295 * DB saved on disk
7273:C 27 Feb 2019 14:49:42.382 * RDB: 4529 MB of memory used by copy-on-write
7257:M 27 Feb 2019 14:49:42.846 * Background saving terminated with success
7257:M 27 Feb 2019 14:49:48.023 * 10 changes in 5 seconds. Saving...
7257:M 27 Feb 2019 14:49:48.126 * Background saving started by pid 7274
7274:C 27 Feb 2019 14:50:05.251 * DB saved on disk
7274:C 27 Feb 2019 14:50:05.367 * RDB: 15 MB of memory used by copy-on-write
7257:M 27 Feb 2019 14:50:05.583 * Background saving terminated with success

Как вы можете видеть, сброшенные данные имеют почти такой же размер, как и другие, а последние даже немного.То, что я не понимаю, это то, почему размер одинаков и почему последний имеет маленький размер.(Пока redis выполняет дамп, клиент запрашивает операцию set, а последний дамп, вероятно, означает завершение операции set и начало операции get.)

Чтобы выяснить причину, я смотрюкод, но все еще не знаю, почему число показывалось, как указано выше.

Если вы видите rdb.c в пакете redis, вы можете найти этот тип исходного кода.

int rdbSave(char *filename, rdbSaveInfo *rsi) {
    ...
    snprintf(tmpfile, 256, "temp-%d.rdb", (int) getpid());
    fp = fopen(tmpfile, "w");
    ...
    rdbSaveRio(...);
}

Насколько я понимаю, каждый раз, когда redis сбрасывает данные в памяти, он должен перезаписывать предыдущие сохраненные данные, и эти данные должны быть больше, чем раньше.Однако, исходя из журнала, размер не увеличивается линейно и даже уменьшается на последнем дампе.

Мне не хватает какой-то части функций Redis?

Редактировать

Согласно комментарию, я определенно неверно истолковал логи.Тем не менее, у меня все еще есть вопрос по поводу производительности.Когда происходит моментальный снимок и если имеются личные грязные воспоминания, система сохраняет их на диск.На этом этапе, основываясь на механизме дампа Redis, хотя система видит частную грязную память, вызванную операцией set, и записывает только это число в журнал, она сохраняет все данные из памяти.Это означает, что каждый раз, когда происходит дамп, размер диска увеличивается, и я уверен, что это приведет к снижению производительности.Но когда я вижу результат теста, я вижу то же падение производительности, несмотря на увеличение размера диска.Интересно, почему это показывает ту же частоту выпадения и то, что происходит внутри.

график

На приведенном выше графике синяя линия указывает пропускную способность, и вы можете увидетьчто он сбрасывается, когда происходит моментальный снимок, и вы также можете заметить, что, хотя вторая фаза удаления сохраняет больший размер диска, чем первая фаза, скорость сброса остается той же.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Мой вопрос был бы: на производительность влияет только сохранение частной памяти?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...