суббота, 30 марта 2019 г.

Ubuntu 18.04 kvm

Проверка 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

пятница, 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)

Измерение производительности дисковой подсистемы с помощью утилиты 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

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

Как измерить скорость жесткого диска


понедельник, 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)
 


воскресенье, 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
 

суббота, 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.
 

пятница, 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



среда, 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


Сохранить.

Резервное копирование кластера 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


вторник, 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';"


Установка PostgreSQL, версия 10.5-24.1C windows 10

Настроить в биос на высшую производительность


Если процессор(ы) Xeon отключить HT. (на десктопных не надо)

.
 .
.

.

start → run → services.msc 

.

 .

 
 .
.
.
.
.
.




Изменить переменную среды PATH



Гилев рекомендует, если у Вас нет специфических задач  отключать этот протокол на сервере.
Просто снять галочку в сетевых интерфейсах недостаточно!


Чтобы отключить отдельные компоненты IPv6, выполните описанные далее действия.
  1. Нажмите кнопку Пуск
    Кнопка "Пуск"
    , введите regedit в поле Начать поиск, затем выберите regedit.exe в списке Программы.
  2. В диалоговом окне Контроль учетных записей пользователей нажмите кнопку Продолжить.
  3. Найдите и выберите следующий подраздел реестра:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\
  4. Дважды щелкните пункт DisabledComponents для изменения параметра DisabledComponents.Примечание. Если параметр DisabledComponents недоступен, его необходимо создать. Для этого выполните указанные ниже действия.
    1. В меню Правка выберите пункт Создать, а затем — Параметр DWORD (32 бита).
    2. Введите DisabledComponents и нажмите клавишу ВВОД.
    3. Дважды щелкните пункт DisabledComponents.
  5. Введите любое из указанных ниже значений для настройки протокола IP версии 6, а затем нажмите кнопку ОК.
    1. Введите 0, чтобы включить все компоненты IP версии 6.Примечание. Значение «0» используется по умолчанию.
    2. Введите 0xffffffff, чтобы отключить все компоненты IP версии 6, кроме интерфейса замыкания на себя. При этом значении Windows Vista также будет использовать в политиках префиксов протокол IP версии 4 вместо IPv6.
    3. Введите 0x20, чтобы использовать в политиках префикса IP версии 4 вместо IP версии 6.
    4. Введите 0x10, чтобы отключить собственные интерфейсы IP версии 6.
    5. Введите 0x01, чтобы отключить все туннельные интерфейсы IP версии 6.
    6. Введите 0x11, чтобы отключить все интерфейсы IP версии 6, кроме интерфейса замыкания на себя.
В некоторых случаях, Допустимыйобъем памяти __ KB

Устанавливает предельный объем виртуального адресного пространства, после постоянного превышения которого в течение определенного времени (см. следующий параметр) рабочий процесс или менеджер кластера будет автоматически перезапущен. Нулевое значение означает, что критический объем памяти не задан и автоматический перезапуск процессов не выполняется.

А так же:
Интервал превышения допустимого объема памяти __ секунд
Определяет интервал времени постоянного превышения предельного объема виртуального адресного пространства, занимаемого рабочим процессом или менеджером кластера (см. предыдущий параметр), после которого выполняется автоматический перезапуск процесса. Нулевое значение означает, что автоматически перезапуск рабочих процессов не выполняется.

Выключенные процессы останавливать через __ секунд

Интервал времени, по истечении которого выключенный рабочий процесс принудительно останавливается, независимо от наличия соединений. Работа всех соединений с этим процессом завершается аварийно. Значение свойства может быть изменено во время работы кластера. Нулевое значение означает, что принудительное завершение процесса не выполняется. Менеджер кластера при стойком превышении предельного объема виртуального адресного пространства всегда перезапускается без ожидания.

Настройка: таймаута рестарта процессов нет, лимит памяти 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 в новом ядре

Недавно я участвовал в диагностике причин вызова 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:
Это изменение было объединено с ядром RHEL 2.6.32-303:
Это, очевидно, изменило наш взгляд на «vm.swappiness = 0». Ранее считалось, что установка этого параметра в 0 уменьшает тенденцию к обмену пользовательскими процессами, но не отключает ее полностью. Как таковой, он ожидал увидеть небольшой обмен вместо ООМ.
Это относится ко всем ядрам RHEL / CentOS> 2.6.32-303 и к другим дистрибутивам, которые предоставляют более новые ядра, такие как Debian и Ubuntu. Или любой другой дистрибутив, в котором это изменение было перенесено, как в RHEL.
Позвольте мне поделиться с вами статистикой, связанной с зонами памяти, которые были зарегистрированы в системном журнале одного из событий OOM.
Как можно видеть, объем свободной памяти и объем памяти в кеше страниц был больше, чем верхний водяной знак, что предотвращало любую операцию подкачки. И все же из-за ненужного давления памяти вызывался OOM, который убивал процесс сервера MySQL.
MySQL, получающий OOM'ed, является плохим по многим причинам и может иметь нежелательное влияние, например, привести к потере незафиксированных транзакций или транзакций, еще не сброшенных в журнал из-за innodb_flush_log_at_trx_commit = 0, или гораздо более сильному воздействию из-за холодных кэшей при перезапуске.
Я предпочитаю старое поведение vm.swappiness, и теперь я установил для него значение «1». Установка vm.swappiness = 0 будет означать, что теперь вам нужно будет гораздо точнее настраивать размер различных глобальных и сессионных буферов.