Пишу для себя, чтобы не забыть как делал. 95 % рабочее. На комментарии отвечаю, когда увижу.
воскресенье, 31 марта 2019 г.
RAID
На полной скорости: руководство по оптимальной настройке SSD-накопителей
MSI M.2 Xpander-Aero – плата расширения с четырьмя слотами M.2 и системой охлаждения видеокарты
Тесты Btrfs RAID на четырех SSD-накопителях Samsung 970 EVO NVMe
Installation/SoftwareRAID
How To Create RAID Arrays with mdadm on Ubuntu 16.04
MSI M.2 Xpander-Aero – плата расширения с четырьмя слотами M.2 и системой охлаждения видеокарты
Тесты Btrfs RAID на четырех SSD-накопителях Samsung 970 EVO NVMe
Installation/SoftwareRAID
How To Create RAID Arrays with mdadm on Ubuntu 16.04
суббота, 30 марта 2019 г.
Проверка TRIM
HOWTO: Check If TRIM On Ext4 Is Enabled And Working On Ubuntu And Other Distributions
Trim with LVM and dm-crypt
Тестирование TRIM из SSD
Включение TRIM на SSD
$ sudo -i
# dd if=/dev/urandom of=tempfilez count=100 bs=512k oflag=direct
100+0 записей получено
100+0 записей отправлено
52428800 байт (52 MB, 50 MiB) скопирован, 0,485889 s, 108 MB/s
# sync
# hdparm --fibmap tempfilez
# hdparm --read-sector 44194816 /dev/sda
# rm tempfilez
# sync
$ wget -O /tmp/test_trim.sh "https://sites.google.com/site/lightrush/random-1/checkiftrimonext4isenabledandworking/test_trim.sh?attredirects=0&d=1"
$ sudo nano /tmp/test_trim.sh
#!/bin/bash
#
# Test if TRIM is working on your SSD. Tested only with EXT4 filesystems
# in Ubuntu 11.10 and Fedora 16. This script is simply an automation of
# the procedures described by Nicolay Doytchev here:
#
# https://sites.google.com/site/lightrush/random-1/checkiftrimonext4isenabledandworking
#
# Author: Dorian Bolivar <dbolivar@gmail.com>
# Date: 20120129
#
if [ $# -ne 3 ]; then
echo
echo "Usage: $0 <filename> <size> <device>"
echo
echo "<filename> is a temporary file for the test"
echo "<size> is the file size in MB"
echo "<device> is the device being tested, e.g. /dev/sda"
echo
echo "Example: $0 tempfile 5 /dev/sda"
echo
echo "This would run the test for /dev/sda creating a"
echo "temporary file named \"tempfile\" with 5 MB"
echo
exit 1
fi
FILE="$1"
SIZE=$2
DEVICE="$3"
# Create the temporary file
dd if=/dev/urandom of="$FILE" count=1 bs=${SIZE}M oflag=direct
sync
# Get the address of the first sector
hdparm --fibmap "$FILE"
SECTOR=`hdparm --fibmap "$FILE" | tail -n1 | awk '{ print $2; }'`
# Read the first sector prior to deletion
hdparm --read-sector $SECTOR "$DEVICE"
echo
echo "This is a sector of the file. It should have been successfully read"
echo "and show a bunch of random data."
echo
read -n 1 -p "Press any key to continue..."
# Delete the file and re-read the sector
rm -f $FILE
sync
echo
echo "File deleted. Sleeping for 120 seconds before re-reading the sector."
echo "If TRIM is working, you should see all 0s now."
sleep 120
hdparm --read-sector $SECTOR "$DEVICE"
echo
echo "If the sector isn't filled with 0s, something is wrong with your"
echo "configuration. Try googling for \"TRIM SSD Linux\"."
echo
exit 0
$ chmod +x /tmp/test_trim.sh
Trim with LVM and dm-crypt
Тестирование TRIM из SSD
Включение TRIM на SSD
$ sudo -i
# dd if=/dev/urandom of=tempfilez count=100 bs=512k oflag=direct
100+0 записей получено
100+0 записей отправлено
52428800 байт (52 MB, 50 MiB) скопирован, 0,485889 s, 108 MB/s
# sync
# hdparm --fibmap tempfilez
# hdparm --read-sector 44194816 /dev/sda
# rm tempfilez
# sync
$ wget -O /tmp/test_trim.sh "https://sites.google.com/site/lightrush/random-1/checkiftrimonext4isenabledandworking/test_trim.sh?attredirects=0&d=1"
$ sudo nano /tmp/test_trim.sh
#!/bin/bash
#
# Test if TRIM is working on your SSD. Tested only with EXT4 filesystems
# in Ubuntu 11.10 and Fedora 16. This script is simply an automation of
# the procedures described by Nicolay Doytchev here:
#
# https://sites.google.com/site/lightrush/random-1/checkiftrimonext4isenabledandworking
#
# Author: Dorian Bolivar <dbolivar@gmail.com>
# Date: 20120129
#
if [ $# -ne 3 ]; then
echo
echo "Usage: $0 <filename> <size> <device>"
echo
echo "<filename> is a temporary file for the test"
echo "<size> is the file size in MB"
echo "<device> is the device being tested, e.g. /dev/sda"
echo
echo "Example: $0 tempfile 5 /dev/sda"
echo
echo "This would run the test for /dev/sda creating a"
echo "temporary file named \"tempfile\" with 5 MB"
echo
exit 1
fi
FILE="$1"
SIZE=$2
DEVICE="$3"
# Create the temporary file
dd if=/dev/urandom of="$FILE" count=1 bs=${SIZE}M oflag=direct
sync
# Get the address of the first sector
hdparm --fibmap "$FILE"
SECTOR=`hdparm --fibmap "$FILE" | tail -n1 | awk '{ print $2; }'`
# Read the first sector prior to deletion
hdparm --read-sector $SECTOR "$DEVICE"
echo
echo "This is a sector of the file. It should have been successfully read"
echo "and show a bunch of random data."
echo
read -n 1 -p "Press any key to continue..."
# Delete the file and re-read the sector
rm -f $FILE
sync
echo
echo "File deleted. Sleeping for 120 seconds before re-reading the sector."
echo "If TRIM is working, you should see all 0s now."
sleep 120
hdparm --read-sector $SECTOR "$DEVICE"
echo
echo "If the sector isn't filled with 0s, something is wrong with your"
echo "configuration. Try googling for \"TRIM SSD Linux\"."
echo
exit 0
$ chmod +x /tmp/test_trim.sh
пятница, 29 марта 2019 г.
fio для Windows 64
Microsoft Windows binaries for fio
c:\Temp\fio-3.13-x64>fio --name=randwrite --ioengine=windowsaio --iodepth=1 --rw=randwrite --bs=8k --direct=1 --size=10G --runtime=240 --group_reporting -directory /Temp -buffered=0 --numjobs=1
write: IOPS=11.3k, BW=88.2MiB/s (92.5MB/s)(10.0GiB/116108msec)
c:\Temp\fio-3.13-x64>fio --name=randwrite --ioengine=windowsaio --iodepth=1 --rw=randwrite --bs=8k --direct=1 --size=10G --runtime=240 --group_reporting -directory /Temp -buffered=0 --numjobs=2
write: IOPS=28.4k, BW=222MiB/s (233MB/s)(20.0GiB/92324msec)
c:\Temp\fio-3.13-x64>fio --name=randwrite --ioengine=windowsaio --iodepth=1 --rw=randwrite --bs=8k --direct=1 --size=10G --runtime=240 --group_reporting -directory /Temp -buffered=0 --numjobs=3
write: IOPS=26.0k, BW=211MiB/s (221MB/s)(30.0GiB/145776msec)
c:\Temp\fio-3.13-x64>fio --name=randwrite --ioengine=windowsaio --iodepth=1 --rw=randwrite --bs=8k --direct=1 --size=10G --runtime=240 --group_reporting -directory /Temp -buffered=0 --numjobs=1
write: IOPS=11.3k, BW=88.2MiB/s (92.5MB/s)(10.0GiB/116108msec)
c:\Temp\fio-3.13-x64>fio --name=randwrite --ioengine=windowsaio --iodepth=1 --rw=randwrite --bs=8k --direct=1 --size=10G --runtime=240 --group_reporting -directory /Temp -buffered=0 --numjobs=2
write: IOPS=28.4k, BW=222MiB/s (233MB/s)(20.0GiB/92324msec)
c:\Temp\fio-3.13-x64>fio --name=randwrite --ioengine=windowsaio --iodepth=1 --rw=randwrite --bs=8k --direct=1 --size=10G --runtime=240 --group_reporting -directory /Temp -buffered=0 --numjobs=3
write: IOPS=26.0k, BW=211MiB/s (221MB/s)(30.0GiB/145776msec)
Измерение производительности дисковой подсистемы с помощью утилиты FIO
Инструкция по измерению производительности дисковой подсистемы для unix-OS с помощью утилиты FIO.
Benchmarking SSDs with Flexible IO tester(fio)
$ sudo apt install fio
=================================================================
дальше запускаете с различными ключиками:
./fio -name iops -rw=randwrite -bs=4096 -size=10G -iodepth=20 -runtime=100 -directory /testfio -ioengine libaio -direct=1
randwrite -- рандомная запись,
bs -- blocksize -- посмотрите сколько у вас в оракле 4 или 8 или 16
size-- рекомендую побольше, чтобы превысить размер RAM-кеша массива
в результате видим в выводе массу цифр, но нас интересует iops
write: io=49732KB, bw=507666 B/s, iops=123 , runt=100313msec
т.е. 123 рандомных записи за секунду, 123*4096=503808, целых пол-мегабайта в секунду.
=================================================================
В PostgreSQL размер блока 8192
$ sudo fio --name=randwrite --ioengine=libaio --iodepth=1 --rw=randwrite --bs=8k --direct=1 --size=10G --runtime=240 --group_reporting -directory /tmp/iotest -buffered=0 --numjobs=1
write: io=10240MB, bw=168983KB/s, iops=21122, runt= 62052msec
$ sudo fio --name=randwrite --ioengine=libaio --iodepth=1 --rw=randwrite --bs=8k --direct=1 --size=10G --runtime=240 --group_reporting -directory /tmp/iotest -buffered=0 --numjobs=2
write: io=20480MB, bw=283598KB/s, iops=35449, runt= 73948msec
$ sudo fio --name=randwrite --ioengine=libaio --iodepth=1 --rw=randwrite --bs=8k --direct=1 --size=10G --runtime=240 --group_reporting -directory /tmp/iotest -buffered=0 --numjobs=3
write: io=30720MB, bw=221730KB/s, iops=27716, runt=141872msec
Benchmarking SSDs with Flexible IO tester(fio)
$ sudo apt install fio
=================================================================
дальше запускаете с различными ключиками:
./fio -name iops -rw=randwrite -bs=4096 -size=10G -iodepth=20 -runtime=100 -directory /testfio -ioengine libaio -direct=1
randwrite -- рандомная запись,
bs -- blocksize -- посмотрите сколько у вас в оракле 4 или 8 или 16
size-- рекомендую побольше, чтобы превысить размер RAM-кеша массива
в результате видим в выводе массу цифр, но нас интересует iops
write: io=49732KB, bw=507666 B/s, iops=123 , runt=100313msec
т.е. 123 рандомных записи за секунду, 123*4096=503808, целых пол-мегабайта в секунду.
=================================================================
В PostgreSQL размер блока 8192
$ sudo fio --name=randwrite --ioengine=libaio --iodepth=1 --rw=randwrite --bs=8k --direct=1 --size=10G --runtime=240 --group_reporting -directory /tmp/iotest -buffered=0 --numjobs=1
write: io=10240MB, bw=168983KB/s, iops=21122, runt= 62052msec
$ sudo fio --name=randwrite --ioengine=libaio --iodepth=1 --rw=randwrite --bs=8k --direct=1 --size=10G --runtime=240 --group_reporting -directory /tmp/iotest -buffered=0 --numjobs=2
write: io=20480MB, bw=283598KB/s, iops=35449, runt= 73948msec
$ sudo fio --name=randwrite --ioengine=libaio --iodepth=1 --rw=randwrite --bs=8k --direct=1 --size=10G --runtime=240 --group_reporting -directory /tmp/iotest -buffered=0 --numjobs=3
write: io=30720MB, bw=221730KB/s, iops=27716, runt=141872msec
TRIM
How To Configure Periodic TRIM for SSD Storage on Linux Servers
Настройка Ubuntu для работы с SSD
Все о SSD TRIM
Деградация производительности SSD и методы борьбы с ней.
Как правильно мерять производительность диска
Samsung SSD HBA TRIM
Почему по мере заполнения SSD падает скорость записи в RAID, или зачем нужен TRIM
Проверка поддержки TRIM, для диска sda
$ sudo hdparm -I /dev/sda | grep -i trim
$ sudo hdparm -I /dev/sda | grep -i trim
* Data Set Management TRIM supported (limit 8 blocks)
Почему может тупить на запись RAID1 из двух SSD дисков?
$ sudo apt install pv
$ dd if=/dev/zero bs=110K count=60000 | pv | dd of=./zero.dd
60000+0 записей получено/s] [ <=> ]
60000+0 записей отправлено
6758400000 байт (6,8 GB, 6,3 GiB) скопирован, 24,7248 s, 273 MB/s
6,29GiB 0:00:24 [ 260MiB/s] [ <=> ]
13200000+0 записей получено
13200000+0 записей отправлено
6758400000 байт (6,8 GB, 6,3 GiB) скопирован, 25,987 s, 260 MB/s
Скорость Диска (Чтения/Записи): Тест HDD, SSD в Linux
$ sync; dd if=/dev/zero of=tempfile bs=1M count=10240; sync
10240+0 записей получено
10240+0 записей отправлено
10737418240 байт (11 GB, 10 GiB) скопирован, 42,0694 s, 255 MB/s
$ dd if=/dev/zero of=output.img bs=8k count=512k
$ sudo hdparm -t /dev/sda
Как измерить скорость жесткого диска
Настройка Ubuntu для работы с SSD
Все о SSD TRIM
Деградация производительности SSD и методы борьбы с ней.
Как правильно мерять производительность диска
Samsung SSD HBA TRIM
Почему по мере заполнения SSD падает скорость записи в RAID, или зачем нужен TRIM
Проверка поддержки TRIM, для диска sda
$ sudo hdparm -I /dev/sda | grep -i trim
$ sudo hdparm -I /dev/sda | grep -i trim
* Data Set Management TRIM supported (limit 8 blocks)
Почему может тупить на запись RAID1 из двух SSD дисков?
$ sudo apt install pv
$ dd if=/dev/zero bs=110K count=60000 | pv | dd of=./zero.dd
60000+0 записей получено/s] [ <=> ]
60000+0 записей отправлено
6758400000 байт (6,8 GB, 6,3 GiB) скопирован, 24,7248 s, 273 MB/s
6,29GiB 0:00:24 [ 260MiB/s] [ <=> ]
13200000+0 записей получено
13200000+0 записей отправлено
6758400000 байт (6,8 GB, 6,3 GiB) скопирован, 25,987 s, 260 MB/s
Скорость Диска (Чтения/Записи): Тест HDD, SSD в Linux
$ sync; dd if=/dev/zero of=tempfile bs=1M count=10240; sync
10240+0 записей получено
10240+0 записей отправлено
10737418240 байт (11 GB, 10 GiB) скопирован, 42,0694 s, 255 MB/s
$ dd if=/dev/zero of=output.img bs=8k count=512k
$ sudo hdparm -t /dev/sda
Как измерить скорость жесткого диска
понедельник, 25 марта 2019 г.
Тест 1С и PostgreSQL Windows vs PostgreSQL Linux
Есть средство виртуализации debian с VirtualBox (kvm)
Поднимем, 2 виртуальные машины:
1. Ubuntu 16.04 32 Gb 4 ядра
Виртуальная машина ubuntu 16.04.5 PostgreSQL версия 10.5-24.1C 1С 8.3.13.1690
Тест pgbench
$ sudo su postgres
$ psql -c "CREATE DATABASE example;"
$ pgbench -i -s 500 example
$ pgbench -c 10 -j 10 -t 10000 example
starting vacuum...end.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 500
query mode: simple
number of clients: 10
number of threads: 10
number of transactions per client: 10000
number of transactions actually processed: 100000/100000
latency average = 1.647 ms
tps = 6073.027124 (including connections establishing)
tps = 6078.146705 (excluding connections establishing)
Тест расчета зарплаты на 3000 сотрудников (с оптимизацией postgresql.conf):
Заполнить154 с
Провести 127 с
Тест Гилева
$ cat /proc/cpuinfo | grep MHz
cpu MHz : 3599.998
cpu MHz : 3599.998
cpu MHz : 3599.998
cpu MHz : 3599.998
$ sudo hdparm -Tt /dev/sda
/dev/sda:
Timing cached reads: 34870 MB in 1.98 seconds = 17598.73 MB/sec
Timing buffered disk reads: 1096 MB in 3.00 seconds = 365.07 MB/sec
$ free -ht
total used free shared buff/cache available
Память: 31G 2,5G 1,3G 2,5G 27G 25G
Подкачка: 1,0G 7,0M 1,0G
Всего: 32G 2,5G 2,3G
2. Windows 10 32 Gb 4 ядра
Установка PostgreSQL, версия 10.5-24.1C windows 10
PostgreSQL, версия 10.5-24.1C windows 10 postgresql.conf
> "c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -c "CREATE DATABASE example"
Password for user postgres:
CREATE DATABASE
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\pgbench" -U postgres -i -s 500 example
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\pgbench" -U postgres -c 10 -j 10 -t 10000 example
C:\Users\user>"c:\Program Files\PostgreSQL\10.5-24.1C\bin\pgbench" -U postgres -c 10 -j 10 -t 10000 example
Password:
starting vacuum...end.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 500
query mode: simple
number of clients: 10
number of threads: 10
number of transactions per client: 10000
number of transactions actually processed: 100000/100000
latency average = 2.006 ms
tps = 4984.870590 (including connections establishing)
tps = 5021.018416 (excluding connections establishing)
Тест расчета зарплаты на 3000 сотрудников (с оптимизацией postgresql.conf):
Заполнить160 с
Провести 148 с
-----------------------------------------------------------------------
CrystalDiskMark 6.0.2 x64 (C) 2007-2018 hiyohiyo
Crystal Dew World : https://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes
Sequential Read (Q= 32,T= 1) : 541.779 MB/s
Sequential Write (Q= 32,T= 1) : 524.051 MB/s
Random Read 4KiB (Q= 8,T= 8) : 277.270 MB/s [ 67692.9 IOPS]
Random Write 4KiB (Q= 8,T= 8) : 252.523 MB/s [ 61651.1 IOPS]
Random Read 4KiB (Q= 32,T= 1) : 188.719 MB/s [ 46074.0 IOPS]
Random Write 4KiB (Q= 32,T= 1) : 153.639 MB/s [ 37509.5 IOPS]
Random Read 4KiB (Q= 1,T= 1) : 22.986 MB/s [ 5611.8 IOPS]
Random Write 4KiB (Q= 1,T= 1) : 59.959 MB/s [ 14638.4 IOPS]
Test : 1024 MiB [C: 5.4% (53.8/999.5 GiB)] (x5) [Interval=5 sec]
Date : 2019/03/25 18:36:32
OS : Windows 10 Professional [10.0 Build 16299] (x64)
Поднимем, 2 виртуальные машины:
1. Ubuntu 16.04 32 Gb 4 ядра
Виртуальная машина ubuntu 16.04.5 PostgreSQL версия 10.5-24.1C 1С 8.3.13.1690
Тест pgbench
$ sudo su postgres
$ psql -c "CREATE DATABASE example;"
$ pgbench -i -s 500 example
$ pgbench -c 10 -j 10 -t 10000 example
starting vacuum...end.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 500
query mode: simple
number of clients: 10
number of threads: 10
number of transactions per client: 10000
number of transactions actually processed: 100000/100000
latency average = 1.647 ms
tps = 6073.027124 (including connections establishing)
tps = 6078.146705 (excluding connections establishing)
Тест расчета зарплаты на 3000 сотрудников (с оптимизацией postgresql.conf):
Заполнить154 с
Провести 127 с
Тест Гилева
$ cat /proc/cpuinfo | grep MHz
cpu MHz : 3599.998
cpu MHz : 3599.998
cpu MHz : 3599.998
cpu MHz : 3599.998
$ sudo hdparm -Tt /dev/sda
/dev/sda:
Timing cached reads: 34870 MB in 1.98 seconds = 17598.73 MB/sec
Timing buffered disk reads: 1096 MB in 3.00 seconds = 365.07 MB/sec
$ free -ht
total used free shared buff/cache available
Память: 31G 2,5G 1,3G 2,5G 27G 25G
Подкачка: 1,0G 7,0M 1,0G
Всего: 32G 2,5G 2,3G
2. Windows 10 32 Gb 4 ядра
Установка PostgreSQL, версия 10.5-24.1C windows 10
PostgreSQL, версия 10.5-24.1C windows 10 postgresql.conf
> "c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -c "CREATE DATABASE example"
Password for user postgres:
CREATE DATABASE
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\pgbench" -U postgres -i -s 500 example
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\pgbench" -U postgres -c 10 -j 10 -t 10000 example
C:\Users\user>"c:\Program Files\PostgreSQL\10.5-24.1C\bin\pgbench" -U postgres -c 10 -j 10 -t 10000 example
Password:
starting vacuum...end.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 500
query mode: simple
number of clients: 10
number of threads: 10
number of transactions per client: 10000
number of transactions actually processed: 100000/100000
latency average = 2.006 ms
tps = 4984.870590 (including connections establishing)
tps = 5021.018416 (excluding connections establishing)
Тест расчета зарплаты на 3000 сотрудников (с оптимизацией postgresql.conf):
Заполнить160 с
Провести 148 с
-----------------------------------------------------------------------
CrystalDiskMark 6.0.2 x64 (C) 2007-2018 hiyohiyo
Crystal Dew World : https://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes
Sequential Read (Q= 32,T= 1) : 541.779 MB/s
Sequential Write (Q= 32,T= 1) : 524.051 MB/s
Random Read 4KiB (Q= 8,T= 8) : 277.270 MB/s [ 67692.9 IOPS]
Random Write 4KiB (Q= 8,T= 8) : 252.523 MB/s [ 61651.1 IOPS]
Random Read 4KiB (Q= 32,T= 1) : 188.719 MB/s [ 46074.0 IOPS]
Random Write 4KiB (Q= 32,T= 1) : 153.639 MB/s [ 37509.5 IOPS]
Random Read 4KiB (Q= 1,T= 1) : 22.986 MB/s [ 5611.8 IOPS]
Random Write 4KiB (Q= 1,T= 1) : 59.959 MB/s [ 14638.4 IOPS]
Test : 1024 MiB [C: 5.4% (53.8/999.5 GiB)] (x5) [Interval=5 sec]
Date : 2019/03/25 18:36:32
OS : Windows 10 Professional [10.0 Build 16299] (x64)
воскресенье, 24 марта 2019 г.
Тест pgbench PostgreSQL Windows vs PostgreSQL Linux
Windows
Посмотреть список баз:
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -c "\l"
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -c "CREATE DATABASE example"
> "c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -c "CREATE DATABASE example"
Password for user postgres:
CREATE DATABASE
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\pgbench" -U postgres -i -s 500 example
Опция -i(initialize) скажет pgbench инициализировать указанную базу данных.
По умолчанию pgbench будут созданы таблицы выше с количеством строк, показанных выше. Это создает простую 16MBбазу данных.
Так как мы будем использовать pgbenchдля измерения изменений в производительности, небольшой 16MB базы данных будет недостаточно, чтобы подчеркнуть наш экземпляр. Это где -s(масштабирование) опция вступает в игру.
-sОпция используется для умножения числа строк , введенных в каждую таблицу. В приведенной выше команде мы ввели параметр «масштабирования» 500. Это говорит pgbenchо создании базы данных в 500 раз больше размера по умолчанию.
Это означает, что в нашей pgbench_accountsтаблице теперь есть 50000000 записи. Это также означает, что размер нашей базы данных теперь 8 GB( 500 x 16MB).
Посмотреть размер базы example:
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -d example -c "select pg_size_pretty( pg_database_size('example')) postgres
>"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -d example -c "select pg_size_pretty( pg_database_size('example')) postgres
Password for user postgres:
postgres
----------
7484 MB
(1 row)
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\pgbench" -U postgres -c 10 -j 10 -t 10000 example
При вызове pgbench мы добавляем в команду довольно много опций.
Первый - -c (клиенты), который используется для определения количества клиентов, с которыми необходимо связаться. Для этого испытания, я использовал , 10 чтобы сказать , pgbench чтобы выполнить с 10 клиентами.
Это означает, что при pgbench выполнении тестов открывается 10 разных сессий.
Следующий параметр - -j флаг (потоки). Этот флаг используется для определения количества рабочих процессов для pgbench. В приведенной выше команде я указал значение 10. Это скажет pgbench запустить 10 рабочих процесса во время бенчмаркинга.
Третий используемый вариант - -t(транзакции), который используется для указания количества транзакций для выполнения.
В приведенной выше команде я указал значение 10000. Однако это не означает, что 10000с нашей службой базы данных будут выполняться только транзакции. Это означает, что каждый сеанс клиента будет выполнять 10000 транзакции. Подводя итог, можно сказать, что базовый тестовый запуск состоял из двух pgbench рабочих процессов, имитирующих 10000 транзакции от 10 клиентов для общего количества 100000 транзакций.
>"c:\Program Files\PostgreSQL\10.5-24.1C\bin\pgbench" -U postgres -c 10 -j 10 -t 10000 example
Password:
starting vacuum...end.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 500
query mode: simple
number of clients: 10
number of threads: 10
number of transactions per client: 10000
number of transactions actually processed: 100000/100000
latency average = 3.133 ms
tps = 3191.871025 (including connections establishing)
tps = 3278.326360 (excluding connections establishing)
Для Linux:
Настройка PostgreSQL с помощью pgbench
Посмотреть список баз:
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -c "\l"
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -c "CREATE DATABASE example"
> "c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -c "CREATE DATABASE example"
Password for user postgres:
CREATE DATABASE
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\pgbench" -U postgres -i -s 500 example
Опция -i(initialize) скажет pgbench инициализировать указанную базу данных.
По умолчанию pgbench будут созданы таблицы выше с количеством строк, показанных выше. Это создает простую 16MBбазу данных.
Так как мы будем использовать pgbenchдля измерения изменений в производительности, небольшой 16MB базы данных будет недостаточно, чтобы подчеркнуть наш экземпляр. Это где -s(масштабирование) опция вступает в игру.
-sОпция используется для умножения числа строк , введенных в каждую таблицу. В приведенной выше команде мы ввели параметр «масштабирования» 500. Это говорит pgbenchо создании базы данных в 500 раз больше размера по умолчанию.
Это означает, что в нашей pgbench_accountsтаблице теперь есть 50000000 записи. Это также означает, что размер нашей базы данных теперь 8 GB( 500 x 16MB).
Посмотреть размер базы example:
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -d example -c "select pg_size_pretty( pg_database_size('example')) postgres
>"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -d example -c "select pg_size_pretty( pg_database_size('example')) postgres
Password for user postgres:
postgres
----------
7484 MB
(1 row)
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\pgbench" -U postgres -c 10 -j 10 -t 10000 example
При вызове pgbench мы добавляем в команду довольно много опций.
Первый - -c (клиенты), который используется для определения количества клиентов, с которыми необходимо связаться. Для этого испытания, я использовал , 10 чтобы сказать , pgbench чтобы выполнить с 10 клиентами.
Это означает, что при pgbench выполнении тестов открывается 10 разных сессий.
Следующий параметр - -j флаг (потоки). Этот флаг используется для определения количества рабочих процессов для pgbench. В приведенной выше команде я указал значение 10. Это скажет pgbench запустить 10 рабочих процесса во время бенчмаркинга.
Третий используемый вариант - -t(транзакции), который используется для указания количества транзакций для выполнения.
В приведенной выше команде я указал значение 10000. Однако это не означает, что 10000с нашей службой базы данных будут выполняться только транзакции. Это означает, что каждый сеанс клиента будет выполнять 10000 транзакции. Подводя итог, можно сказать, что базовый тестовый запуск состоял из двух pgbench рабочих процессов, имитирующих 10000 транзакции от 10 клиентов для общего количества 100000 транзакций.
>"c:\Program Files\PostgreSQL\10.5-24.1C\bin\pgbench" -U postgres -c 10 -j 10 -t 10000 example
Password:
starting vacuum...end.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 500
query mode: simple
number of clients: 10
number of threads: 10
number of transactions per client: 10000
number of transactions actually processed: 100000/100000
latency average = 3.133 ms
tps = 3191.871025 (including connections establishing)
tps = 3278.326360 (excluding connections establishing)
Для Linux:
Настройка PostgreSQL с помощью pgbench
суббота, 23 марта 2019 г.
Тест 1С и PostgreSQL Windows vs PostgreSQL Linux on Windows
Существует миф:
PostgreSQL на ОС Linux, запущенной в виртуальной машине на Windows, работает быстрее, чем PostgreSQL на той же Windows
Оригинальная статья
Несколько раз слышал такое, в том числе от Антона Дорошкевича в одном из выступлений.
Сравним на одной Windows 10 машине тест гилева(без настройки postgresql.conf)
с PostgreSQL, версия 10.5-24.1C
на Windows
с PostgreSQL, версия 10.5-24.1C на Linux на виртуальной машине vbox сервер 1с на Windows
На той же Windows машине 1C и PostgreSQL под Linux на vbox guest host на Windows
Тест расчета зарплаты на 3000 сотрудников (с оптимизацией postgresql.conf):
с PostgreSQL, версия 10.5-24.1C на Windows
Заполнить 317
Провести 215
с PostgreSQL, версия 10.5-24.1C на Linux на виртуальной машине vbox сервер 1с на Windows
Заполнить 465
Провести 371
На той же Windows машине 1C и PostgreSQL под Linux на vbox guest host на Windows
3. Заполнить 740
Провести 647
Тест под Windows на другом подобном железе I5
PostgreSQL, версия 10.5-24.1C windows 10 postgresql.conf
Заполнить: 285
Провести и закрыть: 215
Короче миф не нашел подтверждения.
Посокольку не ставил целью сравнивать работу из под windows с нативным линуксом, не подготовил стенд, сравним с тем что было измерено ранее:
Тот же тест Ubuntu 16.04
Установка сервера 1с на бюджетном CPU
Более слабое железо, ниже частота процессора, SATA2
G2020
с настройкой postgresql.conf и без тж
Заполнить: 229 с
Провести: 222 с
1cfresh.com
Заполнить: 225 с
Провести: 260 с
i7-6700
1. Без настройки postgresql.conf и без тж
Заполнить: 156 с
Провести: 114 с
Для i7-6700:
Вывод (сравниваем с G2020 более слабое железо):
1. под Linux (при установке Linux непосредственно на железо) система 1С + PostgreSQL работает минимум в 1,5 раза быстрее (скорее в 2), чем аналогичная на Windows.
2. Linux установленный поверх Windows на виртуальной машине (VirtualBox), даёт замедление работы 1С + PostgreSQL на Linux по сравнению с 1С + PostgreSQL установленной на Windows.
3. PostgreSQL установленный на Linux установленный поверх Windows (cредства виртуализации VirtualBox под Windows) даёт замедление работы 1С (Windows)+ PostgreSQL (Linux) по сравнению с 1С + PostgreSQL установленной на Windows.
PostgreSQL на ОС Linux, запущенной в виртуальной машине на Windows, работает быстрее, чем PostgreSQL на той же Windows
Оригинальная статья
Несколько раз слышал такое, в том числе от Антона Дорошкевича в одном из выступлений.
Сравним на одной Windows 10 машине тест гилева(без настройки postgresql.conf)
с PostgreSQL, версия 10.5-24.1C
на Windows
с PostgreSQL, версия 10.5-24.1C на Linux на виртуальной машине vbox сервер 1с на Windows
Тест расчета зарплаты на 3000 сотрудников (с оптимизацией postgresql.conf):
с PostgreSQL, версия 10.5-24.1C на Windows
Заполнить 317
Провести 215
с PostgreSQL, версия 10.5-24.1C на Linux на виртуальной машине vbox сервер 1с на Windows
Заполнить 465
Провести 371
На той же Windows машине 1C и PostgreSQL под Linux на vbox guest host на Windows
3. Заполнить 740
Провести 647
Тест под Windows на другом подобном железе I5
PostgreSQL, версия 10.5-24.1C windows 10 postgresql.conf
Заполнить: 285
Провести и закрыть: 215
Короче миф не нашел подтверждения.
Посокольку не ставил целью сравнивать работу из под windows с нативным линуксом, не подготовил стенд, сравним с тем что было измерено ранее:
Тот же тест Ubuntu 16.04
Установка сервера 1с на бюджетном CPU
Более слабое железо, ниже частота процессора, SATA2
G2020
с настройкой postgresql.conf и без тж
Заполнить: 229 с
Провести: 222 с
1cfresh.com
Заполнить: 225 с
Провести: 260 с
i7-6700
1. Без настройки postgresql.conf и без тж
Заполнить: 156 с
Провести: 114 с
Для i7-6700:
Вывод (сравниваем с G2020 более слабое железо):
1. под Linux (при установке Linux непосредственно на железо) система 1С + PostgreSQL работает минимум в 1,5 раза быстрее (скорее в 2), чем аналогичная на Windows.
2. Linux установленный поверх Windows на виртуальной машине (VirtualBox), даёт замедление работы 1С + PostgreSQL на Linux по сравнению с 1С + PostgreSQL установленной на Windows.
3. PostgreSQL установленный на Linux установленный поверх Windows (cредства виртуализации VirtualBox под Windows) даёт замедление работы 1С (Windows)+ PostgreSQL (Linux) по сравнению с 1С + PostgreSQL установленной на Windows.
пятница, 22 марта 2019 г.
Управление серверами 8.3.14
https://its.1c.ru/db/content/metod8dev/src/developers/additional/universal/i8105957.htm
$ sudo su root -c "cat >/etc/systemd/system/srv1cv8-ras.service <<EOL
[Unit]
Description=1C:Enterprise Remote Administration Service
After=network.target remote-fs.target nss-lookup.target
Requires=srv1cv83.service
[Service]
Type=simple
ExecStart=/opt/1C/v8.3/x86_64/ras cluster --port=1545
KillSignal=SIGINT
PrivateTmp=true
Restart=on-failure
RestartSec=5
User=usr1cv8
Group=grp1cv8
[Install]
WantedBy=multi-user.target
EOL"
$ sudo chmod +x /etc/systemd/system/srv1cv8-ras.service
$ sudo systemctl daemon-reload
$ sudo systemctl enable srv1cv8-ras.service
$ sudo systemctl start srv1cv8-ras.service
$ sudo systemctl status srv1cv8-ras.service
$ sudo su root -c "cat >/etc/systemd/system/srv1cv8-ras.service <<EOL
[Unit]
Description=1C:Enterprise Remote Administration Service
After=network.target remote-fs.target nss-lookup.target
Requires=srv1cv83.service
[Service]
Type=simple
ExecStart=/opt/1C/v8.3/x86_64/ras cluster --port=1545
KillSignal=SIGINT
PrivateTmp=true
Restart=on-failure
RestartSec=5
User=usr1cv8
Group=grp1cv8
[Install]
WantedBy=multi-user.target
EOL"
$ sudo chmod +x /etc/systemd/system/srv1cv8-ras.service
$ sudo systemctl daemon-reload
$ sudo systemctl enable srv1cv8-ras.service
$ sudo systemctl start srv1cv8-ras.service
$ sudo systemctl status srv1cv8-ras.service
среда, 20 марта 2019 г.
Windows обслуживание баз PostgreSQL
Скрипт обслуживающий все базы (добавить в планировщик)
pg_vacuum.bat
REM СКРИПТ ОБСЛУЖИВАЮЩИЙ ВСЕ БАЗЫ В КЛАСТЕРЕ POSTGRESQL
CLS
ECHO OFF
CHCP 1251
REM Установка переменных окружения
SET PGBIN=C:\Program Files\PostgreSQL\10.5-24.1C\bin
SET PGUSER=postgres
SET PGPASSWORD=pass
REM Смена диска и переход в папку из которой запущен bat-файл
%~d0
CD %~dp0
REM Формирование имени файла резервной копии и файла-отчета
SET DATETIME=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%
SET LOGFILE=%DATETIME%.log
SET LOGPATH="Vacuum\%LOGFILE%"
REM Обслуживание баз кластера
IF NOT EXIST Vacuum MD Vacuum
CALL "%PGBIN%\vacuumdb" -zfa -U %PGUSER% 2>>%LOGPATH%
REM Анализ кода завершения
IF NOT %ERRORLEVEL%==0 GOTO Error
GOTO Successfull
REM В случае ошибки делается соответствующая запись в журнале
:Error
MSG * "Ошибка при Vacuum. Смотрите vacuum.log."
ECHO %DATETIME% Ошибки при Vacuum. Смотрите отчет %LOGFILE%. >> vacuum.log
GOTO End
REM В случае удачного Vacuum просто делается запись в журнал
:Successfull
ECHO %DATETIME% Успешное проведение Vacuum >> vacuum.log
GOTO End
:End
Сохранить.
pg_vacuum.bat
REM СКРИПТ ОБСЛУЖИВАЮЩИЙ ВСЕ БАЗЫ В КЛАСТЕРЕ POSTGRESQL
CLS
ECHO OFF
CHCP 1251
REM Установка переменных окружения
SET PGBIN=C:\Program Files\PostgreSQL\10.5-24.1C\bin
SET PGUSER=postgres
SET PGPASSWORD=pass
REM Смена диска и переход в папку из которой запущен bat-файл
%~d0
CD %~dp0
REM Формирование имени файла резервной копии и файла-отчета
SET DATETIME=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%
SET LOGFILE=%DATETIME%.log
SET LOGPATH="Vacuum\%LOGFILE%"
REM Обслуживание баз кластера
IF NOT EXIST Vacuum MD Vacuum
CALL "%PGBIN%\vacuumdb" -zfa -U %PGUSER% 2>>%LOGPATH%
REM Анализ кода завершения
IF NOT %ERRORLEVEL%==0 GOTO Error
GOTO Successfull
REM В случае ошибки делается соответствующая запись в журнале
:Error
MSG * "Ошибка при Vacuum. Смотрите vacuum.log."
ECHO %DATETIME% Ошибки при Vacuum. Смотрите отчет %LOGFILE%. >> vacuum.log
GOTO End
REM В случае удачного Vacuum просто делается запись в журнал
:Successfull
ECHO %DATETIME% Успешное проведение Vacuum >> vacuum.log
GOTO End
:End
Сохранить.
Резервное копирование кластера PostgreSQL pg_basebackup Windows
Проверить
C:\Program Files\PostgreSQL\10.5-24.1C\data\postgresql.conf
max_replication_slots = 10
max_wal_senders = 10
wal_level = replica
Резервная копия кластера PostgreSQL
pg_basebackup.exe -U postgres -X fetch --format=tar -z -D "c:/backup" -P
Обслуживание базы
psql -d demo -U postgres -c "VACUUM FULL FREEZE VERBOSE ANALYZE;"
Скрипт создающий резервную копию кластера (добавить в планировщик)
pg_bbackup.bat
REM СОЗДАНИЕ РЕЗЕРВНОЙ КОПИИ КЛАСТЕРА POSTGRESQL
REM Все действия в в папке где запускаем скрипт
CLS
ECHO OFF
CHCP 1251
REM Установка переменных окружения
REM SET PGBIN=C:\Program Files\PostgreSQL\11.5-19.1C\bin
SET PGBIN=F:\PostgreSQL\11.5-19.1C\bin
REM Папка в которой будут лежать копии в папке где запускаем скрипт
SET BACKUP="Backup"
REM Папка в которой формируются файлы, должна быть пустой и на SSD
SET PGBACKUP=C:\BackupTMP
DEL /F /Q %PGBACKUP%\base.tar.gz
SET PGUSER=postgres
SET PGPASSWORD=pass
REM Смена диска и переход в папку из которой запущен bat-файл
%~d0
CD %~dp0
REM Формирование имени файла резервной копии и файла-отчета
SET DATETIME=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%
SET DUMPFILE= %DATETIME%.tar.gz
SET LOGFILE=%DATETIME%.log
SET DUMPPATH="%BACKUP%\%DUMPFILE%"
SET LOGPATH="%BACKUP%\%LOGFILE%"
REM Создание резервной копии
IF NOT EXIST Backup MD Backup
CALL "%PGBIN%\pg_basebackup.exe" -U %PGUSER% -X fetch --format=tar -z -D %PGBACKUP% -P 2>%LOGPATH%
REM Анализ кода завершения
IF NOT %ERRORLEVEL%==0 GOTO Error
GOTO Successfull
REM В случае ошибки удаляется поврежденная резервная копия и делается соответствующая запись в журнале
:Error
DEL %DUMPPATH%
MSG * "Ошибка при создании резервной копии базы данных. Смотрите backup.log."
ECHO %DATETIME% Ошибки при создании резервной копии базы данных %DUMPFILE%. Смотрите отчет %LOGFILE%. >> backup.log
GOTO End
REM В случае удачного резервного копирования просто делается запись в журнал
:Successfull
ECHO %DATETIME% Успешное создание резервной копии %DUMPFILE% >> backup.log
COPY %PGBACKUP%\base.tar.gz %DUMPPATH%
REM D -2 оставить файлы за 2 дня
forfiles /P "%BACKUP%" /D -2 /C "cmd /c del @path /q"
GOTO End
:End
Сохранить.
Восстановление:
Остановить службу pgsql-10.5-24.1C-x64
net stop pgsql-10.5-24.1C-x64
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" останавливается.
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" успешно остановлена.
Очистить содержимое:
C:\Program Files\PostgreSQL\10.5-24.1C\data
Разархивировать архив вида 2019-03-20_18-00-57.tar.gz
в C:\Program Files\PostgreSQL\10.5-24.1C\data
net start pgsql-10.5-24.1C-x64
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" запускается.
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" успешно запущена.
Разархивировать архив вида 2019-03-20_18-00-57.tar.gz
в C:\Program Files\PostgreSQL\10.5-24.1C\data
Если удалили папку
C:\Program Files\PostgreSQL\10.5-24.1C\data
Создать
C:\Program Files\PostgreSQL\10.5-24.1C\data
Но нужно,
Задать на папку права полного доступа для пользователя NETWORK SERVICE от имени которого запускает pgsql-10.5-24.1C-x64
C:\Program Files\PostgreSQL\10.5-24.1C\data\postgresql.conf
max_replication_slots = 10
max_wal_senders = 10
wal_level = replica
Резервная копия кластера PostgreSQL
pg_basebackup.exe -U postgres -X fetch --format=tar -z -D "c:/backup" -P
Обслуживание базы
psql -d demo -U postgres -c "VACUUM FULL FREEZE VERBOSE ANALYZE;"
Скрипт создающий резервную копию кластера (добавить в планировщик)
pg_bbackup.bat
REM СОЗДАНИЕ РЕЗЕРВНОЙ КОПИИ КЛАСТЕРА POSTGRESQL
REM Все действия в в папке где запускаем скрипт
CLS
ECHO OFF
CHCP 1251
REM Установка переменных окружения
REM SET PGBIN=C:\Program Files\PostgreSQL\11.5-19.1C\bin
SET PGBIN=F:\PostgreSQL\11.5-19.1C\bin
REM Папка в которой будут лежать копии в папке где запускаем скрипт
SET BACKUP="Backup"
REM Папка в которой формируются файлы, должна быть пустой и на SSD
SET PGBACKUP=C:\BackupTMP
DEL /F /Q %PGBACKUP%\base.tar.gz
SET PGUSER=postgres
SET PGPASSWORD=pass
REM Смена диска и переход в папку из которой запущен bat-файл
%~d0
CD %~dp0
REM Формирование имени файла резервной копии и файла-отчета
SET DATETIME=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%
SET DUMPFILE= %DATETIME%.tar.gz
SET LOGFILE=%DATETIME%.log
SET DUMPPATH="%BACKUP%\%DUMPFILE%"
SET LOGPATH="%BACKUP%\%LOGFILE%"
REM Создание резервной копии
IF NOT EXIST Backup MD Backup
CALL "%PGBIN%\pg_basebackup.exe" -U %PGUSER% -X fetch --format=tar -z -D %PGBACKUP% -P 2>%LOGPATH%
REM Анализ кода завершения
IF NOT %ERRORLEVEL%==0 GOTO Error
GOTO Successfull
REM В случае ошибки удаляется поврежденная резервная копия и делается соответствующая запись в журнале
:Error
DEL %DUMPPATH%
MSG * "Ошибка при создании резервной копии базы данных. Смотрите backup.log."
ECHO %DATETIME% Ошибки при создании резервной копии базы данных %DUMPFILE%. Смотрите отчет %LOGFILE%. >> backup.log
GOTO End
REM В случае удачного резервного копирования просто делается запись в журнал
:Successfull
ECHO %DATETIME% Успешное создание резервной копии %DUMPFILE% >> backup.log
COPY %PGBACKUP%\base.tar.gz %DUMPPATH%
REM D -2 оставить файлы за 2 дня
forfiles /P "%BACKUP%" /D -2 /C "cmd /c del @path /q"
GOTO End
:End
Сохранить.
Восстановление:
Остановить службу pgsql-10.5-24.1C-x64
net stop pgsql-10.5-24.1C-x64
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" останавливается.
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" успешно остановлена.
Очистить содержимое:
C:\Program Files\PostgreSQL\10.5-24.1C\data
Разархивировать архив вида 2019-03-20_18-00-57.tar.gz
в C:\Program Files\PostgreSQL\10.5-24.1C\data
net start pgsql-10.5-24.1C-x64
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" запускается.
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" успешно запущена.
Разархивировать архив вида 2019-03-20_18-00-57.tar.gz
в C:\Program Files\PostgreSQL\10.5-24.1C\data
Если удалили папку
C:\Program Files\PostgreSQL\10.5-24.1C\data
Создать
C:\Program Files\PostgreSQL\10.5-24.1C\data
Но нужно,
Задать на папку права полного доступа для пользователя NETWORK SERVICE от имени которого запускает pgsql-10.5-24.1C-x64
вторник, 19 марта 2019 г.
Резервное копирование базы PostgreSQL pg_dump под windows
Создание пустой базы demo1 с помощью pgAdmin4
Создание базы demo1 запросом sql
CREATE DATABASE demo1
WITH
OWNER = postgres
TEMPLATE = template0
ENCODING = 'UTF8'
LC_COLLATE = 'Russian_Russia.1251'
LC_CTYPE = 'Russian_Russia.1251'
TABLESPACE = pg_default
CONNECTION LIMIT = -1;
psql -U postgres -c "CREATE DATABASE demo1 WITH OWNER = postgres TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'Russian_Russia.1251' LC_CTYPE = 'Russian_Russia.1251' TABLESPACE = pg_default CONNECTION LIMIT = -1;"
Восстановление базы demo в предварительно созданную выше базу demo1:
pg_restore.exe --host "localhost" --port "5432" --username "postgres" --dbname "demo1" --verbose "demo2019-03-20_20-03-06.backup"
Восстановление базы demo в туже базу demo с заменой данных
C:\Program Files (x86)\pgAdmin 4\v4\runtime\pg_restore.exe --host "localhost" --port "5432" --username "postgres" --no-password --role "postgres" --dbname "demo" --clean --verbose "E:\\windows\\1\\demo\\DEMO20~1.BAC"
Тоже с использование pgAdmin4
Скрипт для автоматизации резервного копирования pg_dump_demo.bat
(создать для каждой базы добавить в планировщик)
REM СОЗДАНИЕ РЕЗЕРВНОЙ КОПИИ БАЗЫ ДАННЫХ demo POSTGRESQL
REM в папке запуска скрипта в папке %PGDATABASE%
REM для базы отличной от demo изменить PGDATABASE (следующая строка)
SET PGDATABASE=demo
CLS
ECHO OFF
CHCP 1251
REM Установка переменных окружения
REM SET PGBIN=C:\Program Files\PostgreSQL\11.5-19.1C\bin
SET PGBIN=F:\PostgreSQL\11.5-19.1C\bin
SET PGHOST=localhost
SET PGPORT=5432
SET PGUSER=postgres
SET PGPASSWORD=pass
REM Удаляем в папке PGDATABASE все файл старше DAY
SET DAY=5
REM Смена диска и переход в папку из которой запущен bat-файл
%~d0
CD %~dp0
REM Формирование имени файла резервной копии и файла-отчета
SET DATETIME=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%
SET DUMPFILE=%PGDATABASE%%DATETIME%.backup
SET LOGFILE=%PGDATABASE%%DATETIME%.log
SET DUMPPATH="%PGDATABASE%\%DUMPFILE%"
SET LOGPATH="%PGDATABASE%\%LOGFILE%"
REM Создание резервной копии
IF NOT EXIST %PGDATABASE% MD %PGDATABASE%
REM Удаляем в папке PGDATABASE все файл старше DAY
forfiles /p %PGDATABASE% /m * /s /d -%DAY% /c "cmd /c del @path /q" >nul 2>&1
REM Если батник будет запускаться планировщиком при загрузке
REM для исключения повторных срабатываний в один день
FORFILES /p "%PGDATABASE%" /M *.backup /D 0 >nul 2>&1
if not errorlevel 1 exit
CALL "%PGBIN%\pg_dump.exe" --format=custom --verbose --file=%DUMPPATH% 2>%LOGPATH%
REM Анализ кода завершения
IF NOT %ERRORLEVEL%==0 GOTO Error
GOTO Successfull
REM В случае ошибки удаляется поврежденная резервная копия и делается соответствующая запись в журнале
:Error
DEL %DUMPPATH%
MSG * "Ошибка при создании резервной копии базы данных. Смотрите backup.log."
ECHO %DATETIME% Ошибки при создании резервной копии базы данных %DUMPFILE%. Смотрите отчет %LOGFILE%. >> %PGDATABASE%.log
GOTO End
REM В случае удачного резервного копирования просто делается запись в журнал
:Successfull
ECHO %DATETIME% Успешное создание резервной копии %DUMPFILE% >> %PGDATABASE%.log
GOTO End
:End
Вообще хорошо перед pg_dump
Остановить сервер 1С
"C:\Program Files\1cv8\8.3.13.1690\bin\ragent.exe" -stop
После pg_dump
"C:\Program Files\1cv8\8.3.13.1690\bin\ragent.exe" -start
PostgreSQL, версия 10.5-24.1C windows 10 postgresql.conf
Тест расчета зарплаты на 3000 сотрудников
Заполнить: 285 с
Провести и закрыть: 215 с
Интересно запустить тест Гилева №1, до настройки postgresql.conf
Samsung SSD 850 PRO 256GB
c:\Program Files\PostgreSQL\10.5-24.1C\data\postgresql.conf
Добавить в конец:
#
max_connections = 1000
shared_buffers = 4GB
temp_buffers = 256MB
work_mem = 64MB
effective_cache_size = 12GB
maintenance_work_mem = 1GB
wal_buffers = 16MB
min_wal_size = 2GB
max_wal_size = 4GB
default_statistics_target = 100
#effective_io_concurrency = 2
random_page_cost = 1.1
autovacuum = on
autovacuum_max_workers = 4
autovacuum_naptime = 20s
bgwriter_delay = 20ms
bgwriter_lru_multiplier = 4.0
bgwriter_lru_maxpages = 400
synchronous_commit = off
checkpoint_completion_target = 0.9
#min_wal_size = 2GB
#max_wal_size = 4GB
ssl = off
fsync = on
commit_delay = 1000
commit_siblings = 5
row_security = off
max_files_per_process = 1000
standard_conforming_strings = off
escape_string_warning = off
max_locks_per_transaction = 256
#log_min_duration_statement = 0
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,client=%h '
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
#log_autovacuum_min_duration = 0
lc_messages='C'
#log_duration = on
#log_statement = all
log_destination = stderr
plantuner.fix_empty_table = 'on'
online_analyze.table_type = 'temporary'
online_analyze.verbose = 'off'
max_replication_slots = 10
max_wal_senders = 10
wal_level = replica
Сохранить.
net stop pgsql-10.5-24.1C-x64
C:\WINDOWS\SysWOW64\net.exe stop pgsql-10.5-24.1C-x64
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" останавливается.
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" успешно остановлена.
net start pgsql-10.5-24.1C-x64
C:\WINDOWS\SysWOW64\net.exe start pgsql-10.5-24.1C-x64
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" запускается.
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" успешно запущена.
Тест расчета зарплаты на 3000 сотрудников
Заполнить: 240 с
Провести и закрыть: 198 с
Заполнить дает ускорение 15%
Интересно запустить тест Гилева № 1, после настройки postgresql.conf
Как видим особо не влияет.
Посмотреть список баз:
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -c "\l"
Посмотреть размер базы demo:
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -d demo -c "select pg_size_pretty( pg_database_size('demo')) postgres
Password for user postgres:
postgres
----------
2452 MB
(1 row)
Удаление базы demo
Вручную можно удалить так:
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -c "DROP DATABASE demo"
Password for user postgres:
DROP DATABASE
Создать базу demo лучше создать средствами 1с !!!:
Данные кластера
c:\Program Files\1cv8\srvinfo
cd "c:\Users\USR1CV8\AppData\Local\1C\1cv8"
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -c "SELECT name, setting, unit FROM pg_settings where category like '%Memory%';"
Посмотреть настройки
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -c "SELECT name, setting, unit FROM pg_settings;"
Посмотреть конкретную настойку
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -c "SELECT name, setting, unit FROM pg_settings where name like 'autovacuum_max_workers';"
Заполнить: 285 с
Провести и закрыть: 215 с
Интересно запустить тест Гилева №1, до настройки postgresql.conf
Samsung SSD 850 PRO 256GB
c:\Program Files\PostgreSQL\10.5-24.1C\data\postgresql.conf
Добавить в конец:
#
max_connections = 1000
shared_buffers = 4GB
temp_buffers = 256MB
work_mem = 64MB
effective_cache_size = 12GB
maintenance_work_mem = 1GB
wal_buffers = 16MB
min_wal_size = 2GB
max_wal_size = 4GB
default_statistics_target = 100
#effective_io_concurrency = 2
random_page_cost = 1.1
autovacuum = on
autovacuum_max_workers = 4
autovacuum_naptime = 20s
bgwriter_delay = 20ms
bgwriter_lru_multiplier = 4.0
bgwriter_lru_maxpages = 400
synchronous_commit = off
checkpoint_completion_target = 0.9
#min_wal_size = 2GB
#max_wal_size = 4GB
ssl = off
fsync = on
commit_delay = 1000
commit_siblings = 5
row_security = off
max_files_per_process = 1000
standard_conforming_strings = off
escape_string_warning = off
max_locks_per_transaction = 256
#log_min_duration_statement = 0
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,client=%h '
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
#log_autovacuum_min_duration = 0
lc_messages='C'
#log_duration = on
#log_statement = all
log_destination = stderr
plantuner.fix_empty_table = 'on'
online_analyze.table_type = 'temporary'
online_analyze.verbose = 'off'
max_replication_slots = 10
max_wal_senders = 10
wal_level = replica
Сохранить.
net stop pgsql-10.5-24.1C-x64
C:\WINDOWS\SysWOW64\net.exe stop pgsql-10.5-24.1C-x64
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" останавливается.
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" успешно остановлена.
net start pgsql-10.5-24.1C-x64
C:\WINDOWS\SysWOW64\net.exe start pgsql-10.5-24.1C-x64
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" запускается.
Служба "PostgreSQL Database Server 10.5-24.1C(x64)" успешно запущена.
Тест расчета зарплаты на 3000 сотрудников
Заполнить: 240 с
Провести и закрыть: 198 с
Заполнить дает ускорение 15%
Интересно запустить тест Гилева № 1, после настройки postgresql.conf
Как видим особо не влияет.
Посмотреть список баз:
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -c "\l"
Посмотреть размер базы demo:
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -d demo -c "select pg_size_pretty( pg_database_size('demo')) postgres
Password for user postgres:
postgres
----------
2452 MB
(1 row)
Удаление базы demo
Вручную можно удалить так:
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -c "DROP DATABASE demo"
Password for user postgres:
DROP DATABASE
Создать базу demo лучше создать средствами 1с !!!:
Данные кластера
c:\Program Files\1cv8\srvinfo
cd "c:\Users\USR1CV8\AppData\Local\1C\1cv8"
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -c "SELECT name, setting, unit FROM pg_settings where category like '%Memory%';"
Посмотреть настройки
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -c "SELECT name, setting, unit FROM pg_settings;"
Посмотреть конкретную настойку
"c:\Program Files\PostgreSQL\10.5-24.1C\bin\psql" -U postgres -c "SELECT name, setting, unit FROM pg_settings where name like 'autovacuum_max_workers';"
Установка PostgreSQL, версия 10.5-24.1C windows 10
Настроить в биос на высшую производительность
Если процессор(ы) Xeon отключить HT. (на десктопных не надо)
.
.
.
start → run → services.msc
.
.
.
.
.
.
.
Изменить переменную среды PATH
Гилев рекомендует, если у Вас нет специфических задач отключать этот протокол на сервере.
Просто снять галочку в сетевых интерфейсах недостаточно!
Чтобы отключить отдельные компоненты IPv6, выполните описанные далее действия.
- Нажмите кнопку Пуск
, введите regedit в поле Начать поиск, затем выберите regedit.exe в списке Программы.
- В диалоговом окне Контроль учетных записей пользователей нажмите кнопку Продолжить.
- Найдите и выберите следующий подраздел реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\
- Дважды щелкните пункт DisabledComponents для изменения параметра DisabledComponents.Примечание. Если параметр DisabledComponents недоступен, его необходимо создать. Для этого выполните указанные ниже действия.
- В меню Правка выберите пункт Создать, а затем — Параметр DWORD (32 бита).
- Введите DisabledComponents и нажмите клавишу ВВОД.
- Дважды щелкните пункт DisabledComponents.
- Введите любое из указанных ниже значений для настройки протокола IP версии 6, а затем нажмите кнопку ОК.
- Введите 0, чтобы включить все компоненты IP версии 6.Примечание. Значение «0» используется по умолчанию.
- Введите 0xffffffff, чтобы отключить все компоненты IP версии 6, кроме интерфейса замыкания на себя. При этом значении Windows Vista также будет использовать в политиках префиксов протокол IP версии 4 вместо IPv6.
- Введите 0x20, чтобы использовать в политиках префикса IP версии 4 вместо IP версии 6.
- Введите 0x10, чтобы отключить собственные интерфейсы IP версии 6.
- Введите 0x01, чтобы отключить все туннельные интерфейсы IP версии 6.
- Введите 0x11, чтобы отключить все интерфейсы IP версии 6, кроме интерфейса замыкания на себя.
Устанавливает предельный объем виртуального адресного пространства, после постоянного превышения которого в течение определенного времени (см. следующий параметр) рабочий процесс или менеджер кластера будет автоматически перезапущен. Нулевое значение означает, что критический объем памяти не задан и автоматический перезапуск процессов не выполняется.
А так же:
Интервал превышения допустимого объема памяти __ секунд
Определяет интервал времени постоянного превышения предельного объема виртуального адресного пространства, занимаемого рабочим процессом или менеджером кластера (см. предыдущий параметр), после которого выполняется автоматический перезапуск процесса. Нулевое значение означает, что автоматически перезапуск рабочих процессов не выполняется.
Выключенные процессы останавливать через __ секунд
Интервал времени, по истечении которого выключенный рабочий процесс принудительно останавливается, независимо от наличия соединений. Работа всех соединений с этим процессом завершается аварийно. Значение свойства может быть изменено во время работы кластера. Нулевое значение означает, что принудительное завершение процесса не выполняется. Менеджер кластера при стойком превышении предельного объема виртуального адресного пространства всегда перезапускается без ожидания.
Настройка: таймаута рестарта процессов нет, лимит памяти 10Гб, время превышения - 10с, время завершения - 300с. "Завершать принудительно". Настройка сервера - дефолт (8/128).
Настройка технологического журнала для расследования проблем:
Создать файл:
"c:\Program Files\1cv8\conf\logcfg.xml"
<?xml version="1.0"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<dump create="true" location="c:\dumps" type="3" prntscrn="false"/>
<log location="c:\logs" history="96">
<event>
<eq property="name" value="PROC"/>
</event>
<event>
<eq property="name" value="CONN"/>
</event>
<event>
<eq property="name" value="EXCP"/>
</event>
<event>
<eq property="name" value="ATTN"/>
</event>
<event>
<eq property="name" value="CLSTR"/>
</event>
<event>
<eq property="name" value="CALL"/>
</event>
<event>
<eq property="name" value="SCALL"/>
</event>
<event>
<eq property="name" value="SDBL"/>
</event>
<event>
<eq property="name" value="DBMSSQL"/>
</event>
<property name="all"/>
</log>
</config>
Заменить "c:\dumps", "c:\logs" на свои:
<dump create="true" location="c:\dumps" type="3" prntscrn="false"/>
<log location="c:\logs" history="96">
Другой вариант:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="c:\log" history="96">
<event>
<ne property="name" value="DB2" />
<ne property="name" value="DBMSSQL" />
<ne property="name" value="DBMSSQLCONN" />
<ne property="name" value="DBORACLE" />
<ne property="name" value="DBPOSTGRS" />
<ne property="name" value="DBV8DBENG" />
<ne property="name" value="SDBL" />
<ne property="name" value="MEM" />
<ne property="name" value="TLOCK" />
<ne property="name" value="SRVC" />
<ne property="name" value="CALL" />
<ne property="name" value="CONN" />
<ne property="name" value="SCALL" />
<ne property="name" value="SCOM" />
<ne property="name" value="VRSREQUEST" />
<ne property="name" value="VRSRESPONSE" />
</event>
<property name="all" />
</log>
</config>
воскресенье, 17 марта 2019 г.
Как очистить кэш-память ОЗУ, буфер и пространство подкачки в Linux
Чистим pagecache: # sync; echo 1 > /proc/sys/vm/drop_caches Чистим dentrie и inode кэши: # sync; echo 2 > /proc/sys/vm/drop_caches Чистим pagecache, dentrie и inode кэши: # sync; echo 3 > /proc/sys/vm/drop_caches # swapoff -a && swapon -a
1) Shutdown the database server (pg_ctl, sudo service postgresql stop, etc.) 2) sync 3) sudo echo 3 > /proc/sys/vm/drop_caches 4) Start the database server
free && sync && echo 3 > /proc/sys/vm/drop_caches && free
Отношение OOM к vm.swappiness = 0 в новом ядре
Отношение OOM к vm.swappiness = 0 в новом ядре
Отношение OOM к vm.swappiness = 0 в новом ядре
По Ovais Тарика Понимание для администраторов баз данных , MySQL ядро , память , oom , swap , swappiness 8 комментариев
Недавно я участвовал в диагностике причин вызова OOM, который мог бы убить процесс сервера MySQL. Конечно, эти серверы в основном работали с MySQL. Таким образом, серверный процесс MySQL был с наибольшим объемом выделенной памяти.
Но странная вещь заключалась в том, что во всех случаях не было обнаружено ни одной операции свопинга, и в кеше страниц было достаточно страниц. По иронии судьбы все эти серверы были CentOS 6.4 с ядром версии 2.6.32-358. Другая распространенность заключалась в том, что для vm.swappiness было установлено значение 0. Это довольно стандартная практика, которая применяется практически на каждом сервере, на котором работает MySQL.
Заглядывая дальше, я понял, что в ядре 3.5-rc1 было внесено изменение, которое изменило поведение подкачки, когда «vm.swappiness = 0».
Ниже приведено описание коммита, который изменил поведение «vm.swappiness = 0» вместе с diff:
Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
$ git show fe35004fbf9eaf67482b074a2e032abb9c89b1dd
commit fe35004fbf9eaf67482b074a2e032abb9c89b1dd
Author: Satoru Moriya <satoru.moriya@hds.com>
Date: Tue May 29 15:06:47 2012 -0700
mm: avoid swapping out with swappiness==0
Sometimes we'd like to avoid swapping out anonymous memory. In
particular, avoid swapping out pages of important process or process
groups while there is a reasonable amount of pagecache on RAM so that we
can satisfy our customers' requirements.
OTOH, we can control how aggressive the kernel will swap memory pages with
/proc/sys/vm/swappiness for global and
/sys/fs/cgroup/memory/memory.swappiness for each memcg.
But with current reclaim implementation, the kernel may swap out even if
we set swappiness=0 and there is pagecache in RAM.
This patch changes the behavior with swappiness==0. If we set
swappiness==0, the kernel does not swap out completely (for global reclaim
until the amount of free pages and filebacked pages in a zone has been
reduced to something very very small (nr_free + nr_filebacked < high
watermark)).
Signed-off-by: Satoru Moriya <satoru.moriya@hds.com>
Acked-by: Minchan Kim <minchan@kernel.org>
Reviewed-by: Rik van Riel <riel@redhat.com>
Acked-by: Jerome Marchand <jmarchan@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 67a4fd4..ee97530 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -1761,10 +1761,10 @@ static void get_scan_count(struct mem_cgroup_zone *mz, struct scan_control *sc,
* proportional to the fraction of recently scanned pages on
* each list that were recently referenced and in active use.
*/
- ap = (anon_prio + 1) * (reclaim_stat->recent_scanned[0] + 1);
+ ap = anon_prio * (reclaim_stat->recent_scanned[0] + 1);
ap /= reclaim_stat->recent_rotated[0] + 1;
- fp = (file_prio + 1) * (reclaim_stat->recent_scanned[1] + 1);
+ fp = file_prio * (reclaim_stat->recent_scanned[1] + 1);
fp /= reclaim_stat->recent_rotated[1] + 1;
spin_unlock_irq(&mz->zone->lru_lock);
@@ -1777,7 +1777,7 @@ out:
unsigned long scan;
scan = zone_nr_lru_pages(mz, lru);
- if (priority || noswap) {
+ if (priority || noswap || !vmscan_swappiness(mz, sc)) {
scan >>= priority;
if (!scan && force_scan)
scan = SWAP_CLUSTER_MAX;
|
Это изменение было объединено с ядром RHEL 2.6.32-303:
Shell
1
2
3
|
* Mon Aug 27 2012 Jarod Wilson <jarod@redhat.com> [2.6.32-303.el6]
...
- [mm] avoid swapping out with swappiness==0 (Satoru Moriya) [787885]
|
Это, очевидно, изменило наш взгляд на «vm.swappiness = 0». Ранее считалось, что установка этого параметра в 0 уменьшает тенденцию к обмену пользовательскими процессами, но не отключает ее полностью. Как таковой, он ожидал увидеть небольшой обмен вместо ООМ.
Это относится ко всем ядрам RHEL / CentOS> 2.6.32-303 и к другим дистрибутивам, которые предоставляют более новые ядра, такие как Debian и Ubuntu. Или любой другой дистрибутив, в котором это изменение было перенесено, как в RHEL.
Позвольте мне поделиться с вами статистикой, связанной с зонами памяти, которые были зарегистрированы в системном журнале одного из событий OOM.
Shell
1
2
3
4
5
6
7
8
9
10
11
12
|
Mar 11 11:01:45 db01 kernel: Node 0 DMA: 4*4kB 2*8kB 2*16kB 0*32kB 2*64kB 1*128kB 0*256kB 0*512kB 1*1024kB 1*2048kB 3*4096kB = 15680kB
Mar 11 11:01:45 db01 kernel: Node 0 DMA32: 6*4kB 22*8kB 444*16kB 374*32kB 129*64kB 26*128kB 15*256kB 17*512kB 2*1024kB 0*2048kB 0*4096kB = 45448kB
Mar 11 11:01:45 db01 kernel: Node 0 Normal: 825*4kB 1012*8kB 382*16kB 169*32kB 69*64kB 74*128kB 14*256kB 0*512kB 0*1024kB 1*2048kB 0*4096kB = 42436kB
Mar 11 11:01:45 db01 kernel: 452844 total pagecache pages
Mar 11 11:01:45 db01 kernel: 0 pages in swap cache
Mar 11 11:01:45 db01 kernel: Swap cache stats: add 0, delete 0, find 0/0
Mar 11 11:01:45 db01 kernel: Free swap = 4128760kB
Mar 11 11:01:45 db01 kernel: Total swap = 4128760kB
...
Mar 11 11:01:45 db01 kernel: Node 0 DMA free:15680kB min:124kB low:152kB high:184kB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:15284kB mlocked:0kB dirty:0kB writeback:0kB mapped:0kB shmem:0kB slab_reclaimable:0kB slab_unreclaimable:0kB kernel_stack:0kB pagetables:0kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? yes
Mar 11 11:01:45 db01 kernel: Node 0 DMA32 free:45448kB min:25140kB low:31424kB high:37708kB active_anon:1741812kB inactive_anon:520348kB active_file:4792kB inactive_file:462576kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:3072160kB mlocked:0kB dirty:386328kB writeback:76268kB mapped:936kB shmem:0kB slab_reclaimable:20420kB slab_unreclaimable:6964kB kernel_stack:0kB pagetables:572kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:142592 all_unreclaimable? no
Mar 11 11:01:45 db01 kernel: Node 0 Normal free:42436kB min:42316kB low:52892kB high:63472kB active_anon:3041852kB inactive_anon:643624kB active_file:340156kB inactive_file:1003512kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:5171200kB mlocked:0kB dirty:979444kB writeback:22040kB mapped:15616kB shmem:180kB slab_reclaimable:41052kB slab_unreclaimable:35996kB kernel_stack:2720kB pagetables:19912kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:31552 all_unreclaimable? no
|
Как можно видеть, объем свободной памяти и объем памяти в кеше страниц был больше, чем верхний водяной знак, что предотвращало любую операцию подкачки. И все же из-за ненужного давления памяти вызывался OOM, который убивал процесс сервера MySQL.
MySQL, получающий OOM'ed, является плохим по многим причинам и может иметь нежелательное влияние, например, привести к потере незафиксированных транзакций или транзакций, еще не сброшенных в журнал из-за innodb_flush_log_at_trx_commit = 0, или гораздо более сильному воздействию из-за холодных кэшей при перезапуске.
Я предпочитаю старое поведение vm.swappiness, и теперь я установил для него значение «1». Установка vm.swappiness = 0 будет означать, что теперь вам нужно будет гораздо точнее настраивать размер различных глобальных и сессионных буферов.