Skip to content

Commit ca1c424

Browse files
authored
zstd -1 no nice
1 parent 50b2dde commit ca1c424

File tree

1 file changed

+15
-14
lines changed

1 file changed

+15
-14
lines changed

pg_backup/archive_command.sh

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
11
#!/bin/bash
2-
2+
33
# заглушка, т.к. при изменении значения параметра archive_mode требуется перезагрузка СУБД
44
# exit 0
5-
5+
66
function log() {
77
# echo $(date --rfc-3339=ns) $(hostname -s) $(basename "$SRC_FILE") "$1" &>> "$WAL_DIR/archive_wal.log"
88
return 0
99
}
10-
10+
1111
WAL_DIR="/mnt/backup_db/archive_wal/cluster"
1212
SRC_FILE="$2" # откуда будем читать WAL файл
1313
DST_FILE="$WAL_DIR/$1.zst" # куда будем сохранять WAL файл
1414
LOCK_FILE="$WAL_DIR/$1.lock" # этот файл создаётся перед архиваций WAL файла и удаляется после
15-
15+
1616
log "check"
17-
17+
1818
# скрипт должен запускаться с двумя параметрами
1919
test "$#" -ne 2 && echo "Error: 2 number of parameters expected, $# given" >&2 && exit 2
2020
test ! -f "$SRC_FILE" && echo "Error: WAL file '$SRC_FILE' does not exist!" >&2 && exit 1
2121
test -f "$DST_FILE" && test ! -f "$LOCK_FILE" && log "exists" && exit 0
22-
22+
2323
log "does not exist"
24-
24+
2525
: <<'COMMENT'
2626
Для надёжности архивирование WAL файлов могут настроить на мастере и репликах через параметр archive_mode=always.
2727
Запрещаем от разных экземпляров СУБД конкурентную запись WAL файлов в общие сетевые папки.
@@ -32,7 +32,7 @@ COMMENT
3232

3333
SRV_FILE="$WAL_DIR/archive_server.$(hostname -s)" # сервер, на котором планируется архивирование WAL файла
3434
touch -m "$SRV_FILE" || exit # создаём файл или обновляем дату модификации файла, если файл существует
35-
35+
3636
# разрешаем архивацию WAL файла только при наличии жёстких связанных ссылок (единый inode) между файлами $SRV_FILE и $LOCK_FILE
3737
# для отладки и просмотра кол-ва жёстких ссылок на файл используйте утилиту stat (не используйте ls, она кеширует информацию)
3838
if ln -T "$SRV_FILE" "$LOCK_FILE" &> /dev/null; then
@@ -56,21 +56,22 @@ else
5656
echo "Error: WAL file '$DST_FILE' $MESSAGE" >&2
5757
exit 1
5858
fi
59-
59+
6060
# кол-во потоков сжатия
6161
ZSTD_THREADS=$(echo "$(nproc) / 4 + 1" | bc)
62-
62+
6363
# подсчитываем кол-во WAL файлов в очереди на архивирование
6464
ARCHIVE_STATUS_DIR=$(dirname "$SRC_FILE")/archive_status
6565
WAL_FILES_QUEUE=$(find "$ARCHIVE_STATUS_DIR" -maxdepth 1 -type f -name "*.ready" -printf "." | wc --bytes)
66-
66+
6767
STEP=2
6868
# чем больше WAL файлов в очереди, тем меньше степень сжатия (но больше скорость сжатия и размер сжатого файла)
6969
# не ставьте большой уровень компрессии, это приводит к большому потреблению CPU, а экономия на размере файла несущественная
7070
ZSTD_LEVEL=$(echo "(9 * ${STEP} - ${WAL_FILES_QUEUE}) / ${STEP}" | bc)
7171
test "$ZSTD_LEVEL" -lt 1 && ZSTD_LEVEL=1
72-
72+
7373
# архивируем WAL файл
7474
# в zstd без флага -B1M используются не все ядра (из-за небольшого размера файла?)
75-
ionice -c2 -n7 -- nice -n19 -- zstd -q -f -${ZSTD_LEVEL} -T${ZSTD_THREADS} -B1M "$SRC_FILE" -o "$DST_FILE" \
76-
&& rm -f "$LOCK_FILE" && log "saved, unlocked"
75+
COMMAND="zstd -q -f -${ZSTD_LEVEL} -T${ZSTD_THREADS} -B1M '$SRC_FILE' -o '$DST_FILE'"
76+
test $ZSTD_LEVEL -gt 1 && COMMAND="ionice -c2 -n7 -- nice -n19 -- $COMMAND"
77+
$COMMAND && rm -f "$LOCK_FILE" && log "saved, unlocked"

0 commit comments

Comments
 (0)