Версия : 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
, и записывает только это число в журнал, она сохраняет все данные из памяти.Это означает, что каждый раз, когда происходит дамп, размер диска увеличивается, и я уверен, что это приведет к снижению производительности.Но когда я вижу результат теста, я вижу то же падение производительности, несмотря на увеличение размера диска.Интересно, почему это показывает ту же частоту выпадения и то, что происходит внутри.
график
На приведенном выше графике синяя линия указывает пропускную способность, и вы можете увидетьчто он сбрасывается, когда происходит моментальный снимок, и вы также можете заметить, что, хотя вторая фаза удаления сохраняет больший размер диска, чем первая фаза, скорость сброса остается той же.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Мой вопрос был бы: на производительность влияет только сохранение частной памяти?