Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
product:settings:pssql [05.12.2022 10:57] – [Установка и развертывание на Astra Linux Special Edition x.7] anna.makhnevaproduct:settings:pssql [09.12.2025 08:02] (текущий) – [Бэкап и восстановление базы] Сердцев Сергей
Строка 1: Строка 1:
-====== PostgreSQL ======+====== Настройка базы данных PostgreSQL ======
 ===== Версия PostgreSQL ===== ===== Версия PostgreSQL =====
-Поддерживаются версии PostgreSQL начиная с 13 версии с поддержкой ICU.+Поддерживаются версии PostgreSQL начиная с 13 (рекомендуется не ниже 14) версии с поддержкой ICU.
  
 Для однообразной сортировки в PostgreSQL на Windows и Linux, и для сортировки как в SQL Server, используется провайдер icu, который использует внешнюю библиотеку ICU. Локали ICU можно использовать, только если поддержка ICU была включена в конфигурации сборки PostgreSQL. Для однообразной сортировки в PostgreSQL на Windows и Linux, и для сортировки как в SQL Server, используется провайдер icu, который использует внешнюю библиотеку ICU. Локали ICU можно использовать, только если поддержка ICU была включена в конфигурации сборки PostgreSQL.
Строка 16: Строка 16:
 Надо настроить PostgreSQL, по умолчанию PostgreSQL использует 256 МБ памяти. Надо настроить PostgreSQL, по умолчанию PostgreSQL использует 256 МБ памяти.
  
-Для генерации настроек по конфигурации сервера надо зайти на https://pgtune.leopard.in.ua/ и заполнить параметры.+Для генерации настроек по конфигурации сервера надо зайти на https://www.pgconfig.org/ и заполнить параметры. 
  
-В поле DB Type надо выбрать "Mixed type of application"+Далее на вкладке "Export config" выберете формат ALTER SYSTEM commands  для изменения параметров PostgreSQL, запустите полученный скрипт на сервере PostgreSQL и перезапустите сервис PostgreSQL после выполнения скрипта.
- +
-Надо взять скрипт с вкладки ALTER SYSTEM для изменения параметров PostgreSQL, запустить его на сервере PostgreSQL и перезапустить сервис PostgreSQL после выполнения скрипта.+
  
 После запуска скриптов надо перезапустить сервис PostgreSQL: <code bash> sudo service postgresql restart </code> После запуска скриптов надо перезапустить сервис PostgreSQL: <code bash> sudo service postgresql restart </code>
 +<code bash> pgbadger -j 4  /rs-analyse/log/pg_clean.log </code>
 +=== Пример для PostgreSQL 13: ===
  
-=== Пример для PostgreSQL 13: === \\ +OS TypeGNU/Linux based \\ 
-DB Version13 \\ +Architecrure64 Bits 
-OS Typelinux \\ +Storage typessd \\ 
-DB Typemixed \\ +Application profileERP or long transaction applications\\
-Total Memory (RAM)40 GB \\+
 # CPUs num: 16 \\ # CPUs num: 16 \\
 +# Total Memory: 40 GB \\
 # Connections num: 1000 \\ # Connections num: 1000 \\
 # Data Storage: ssd \\ # Data Storage: ssd \\
 +# DB Version: 13 \\
  
 <code sql> <code sql>
 sql sql
-ALTER SYSTEM SET max_connections = '1000'; +-- Memory Configuration 
-ALTER SYSTEM SET shared_buffers = '10GB'; +ALTER SYSTEM SET shared_buffers TO '10GB'; 
-ALTER SYSTEM SET effective_cache_size = '30GB'; +ALTER SYSTEM SET effective_cache_size TO '30GB'; 
-ALTER SYSTEM SET maintenance_work_mem '2GB'; +ALTER SYSTEM SET work_mem TO '14MB'; 
-ALTER SYSTEM SET checkpoint_completion_target '0.9'; +ALTER SYSTEM SET maintenance_work_mem TO '2GB'; 
-ALTER SYSTEM SET wal_buffers '16MB'; + 
-ALTER SYSTEM SET default_statistics_target = '100'; +-- Checkpoint Related Configuration 
-ALTER SYSTEM SET random_page_cost '1.1'; +ALTER SYSTEM SET min_wal_size TO '2GB'; 
-ALTER SYSTEM SET effective_io_concurrency '200'; +ALTER SYSTEM SET max_wal_size TO '3GB'; 
-ALTER SYSTEM SET work_mem = '1310kB'; +ALTER SYSTEM SET checkpoint_completion_target TO '0.9'; 
-ALTER SYSTEM SET min_wal_size = '1GB'; +ALTER SYSTEM SET wal_buffers TO '-1'; 
-ALTER SYSTEM SET max_wal_size = '4GB'; + 
-ALTER SYSTEM SET max_worker_processes = '16'; +-- Network Related Configuration 
-ALTER SYSTEM SET max_parallel_workers_per_gather = '4'; +ALTER SYSTEM SET listen_addresses TO '*'; 
-ALTER SYSTEM SET max_parallel_workers = '16'; +ALTER SYSTEM SET max_connections TO '1000'; 
-ALTER SYSTEM SET max_parallel_maintenance_workers = '4';  + 
 +-- Storage Configuration 
 +ALTER SYSTEM SET random_page_cost TO '1.1'; 
 +ALTER SYSTEM SET effective_io_concurrency TO '200'; 
 + 
 +-- Worker Processes Configuration 
 +ALTER SYSTEM SET max_worker_processes TO '8'; 
 +ALTER SYSTEM SET max_parallel_workers_per_gather TO '2'; 
 +ALTER SYSTEM SET max_parallel_workers TO '2'; 
 + 
 +-- Logging configuration for pgbadger 
 +ALTER SYSTEM SET logging_collector TO 'on'; 
 +ALTER SYSTEM SET log_checkpoints TO 'on'; 
 +ALTER SYSTEM SET log_connections TO 'on'; 
 +ALTER SYSTEM SET log_disconnections TO 'on'; 
 +ALTER SYSTEM SET log_lock_waits TO 'on'; 
 +ALTER SYSTEM SET log_temp_files TO '0'; 
 +ALTER SYSTEM SET lc_messages TO 'C'; 
 + 
 +-- Adjust the minimum time to collect the data 
 +ALTER SYSTEM SET log_min_duration_statement TO '10s'; 
 +ALTER SYSTEM SET log_autovacuum_min_duration TO '0'; 
 + 
 +-- CSV Configuration 
 +ALTER SYSTEM SET log_destination TO 'csvlog';
 </code>   </code>  
 После запуска скрипта с установкой настроек нужно перезапустить сервис PostgreSQL: <code bash> sudo service postgresql restart </code> После запуска скрипта с установкой настроек нужно перезапустить сервис PostgreSQL: <code bash> sudo service postgresql restart </code>
  
-===== Конвертация базы из SQL Server в PostgreSQL и обратно ===== 
  
 ===== Настройка приложения ===== ===== Настройка приложения =====
Строка 74: Строка 98:
 на на
  
-  <add name="db" providerName="Npgsql" connectionString="Server=localhost;Port=5432;Database=sl_3_24;User +  <add name="db" providerName="Npgsql" connectionString="Server=localhost;Port=5432;Database=a2nta_db;User 
   Id=postgres;Password=123;Pooling=true;CommandTimeout=7200;Timeout=500;MaxPoolSize=500;Max Auto Prepare=100;Auto Prepare Min Usages=3;"/>   Id=postgres;Password=123;Pooling=true;CommandTimeout=7200;Timeout=500;MaxPoolSize=500;Max Auto Prepare=100;Auto Prepare Min Usages=3;"/>
-  <add name="dbCubes" providerName="Npgsql" connectionString="Server=localhost;Port=5432;Database=sl_3_24;User +  <add name="dbCubes" providerName="Npgsql" connectionString="Server=localhost;Port=5432;Database=a2nta_db;User 
   Id=postgres;Password=123;Pooling=true;CommandTimeout=7200;Timeout=500;MaxPoolSize=500;Max Auto Prepare=100;Auto Prepare Min Usages=3;"/>   Id=postgres;Password=123;Pooling=true;CommandTimeout=7200;Timeout=500;MaxPoolSize=500;Max Auto Prepare=100;Auto Prepare Min Usages=3;"/>
-  <add name="busDb" providerName="Npgsql" connectionString="Server=localhost;Port=5432;Database=sl_3_24;User +  <add name="busDb" providerName="Npgsql" connectionString="Server=localhost;Port=5432;Database=a2nta_db;User 
   Id=postgres;Password=123;Pooling=true;CommandTimeout=7200;Timeout=500;MaxPoolSize=500;Max Auto Prepare=100;Auto Prepare Min Usages=3;"/>   Id=postgres;Password=123;Pooling=true;CommandTimeout=7200;Timeout=500;MaxPoolSize=500;Max Auto Prepare=100;Auto Prepare Min Usages=3;"/>
  
Строка 161: Строка 185:
   sudo pg_ctlcluster 13 main start </code>   sudo pg_ctlcluster 13 main start </code>
      
-2. Как отредакировать файл от имени админа+2. Как отредакnировать файл от имени админа
  
 https://vitux.com/how-to-open-and-edit-files-and-folders-in-ubuntu-desktop-as-an-administrator/ https://vitux.com/how-to-open-and-edit-files-and-folders-in-ubuntu-desktop-as-an-administrator/
Строка 362: Строка 386:
  
 ===== Бэкап и восстановление базы ===== ===== Бэкап и восстановление базы =====
-https://postgrespro.ru/docs/postgresql/13/backup+https://postgrespro.ru/docs/postgresql/14/backup
   
 Бэкап базы делается утилитой '' pg_dump '', нужно использовать '' pg_dump '' той же версии, которая установлена на сервере PostgreSQL: Бэкап базы делается утилитой '' pg_dump '', нужно использовать '' pg_dump '' той же версии, которая установлена на сервере PostgreSQL:
   
-<code bash>  pg_dump.exe --file "D:\\DbBackups\\sl_3_24.bak" --host "sl_3_24" --port "5432" --username "postgres" --password --verbose --format=c --blobs "sl_3_24" </code>+<code bash>  pg_dump.exe --file "D:\\DbBackups\\a2nta_db.bak" --host "a2nta_db" --port "5432" --username "postgres" --password --verbose --format=c --blobs "a2nta_db" </code>
   
  
Строка 372: Строка 396:
 <code sql> <code sql>
   sql   sql
-  CREATE DATABASE "sl_3_24"+  CREATE DATABASE "a2nta_db"
   WITH    WITH 
   OWNER = postgres   OWNER = postgres
Строка 384: Строка 408:
   CONNECTION LIMIT = -1;    CONNECTION LIMIT = -1;
  
-  ALTER DATABASE "sl_3_24" SET search_path TO "$user", public, dbo;+  ALTER DATABASE "a2nta_db" SET search_path TO "$user", dbo;
  
   CREATE EXTENSION IF NOT EXISTS "uuid-ossp";   CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
Строка 391: Строка 415:
 И запустить утилиту '' pg_restore '' , в созданную пустую базу: И запустить утилиту '' pg_restore '' , в созданную пустую базу:
  
-<code bash> pg_restore.exe --host "localhost" --port "5432" --username "postgres" --password --dbname "sl_3_24" --verbose "D:\\DbBackups\\sl_3_24.bak" </code>+<code bash> pg_restore.exe --host "localhost" --port "5432" --username "postgres" --password --dbname "a2nta_db" --verbose "D:\\DbBackups\\a2nta_db.bak" </code>
  
 Можно установить search_path на системном уровне, чтобы при каждом восстановление базы не надо было это настраивать отдельно: Можно установить search_path на системном уровне, чтобы при каждом восстановление базы не надо было это настраивать отдельно:
Строка 397: Строка 421:
   sql   sql
   ALTER SYSTEM SET search_path    ALTER SYSTEM SET search_path 
-  TO "$user", public, dbo;+  TO "$user", dbo;
  
   SELECT pg_reload_conf();   SELECT pg_reload_conf();
 </code> </code>
  
-Если нужно выдать права пользователю на базу (https://postgrespro.ru/docs/postgresql/13/sql-grant):+Нужно выдать права пользователю на базу (https://postgrespro.ru/docs/postgresql/14/sql-grant):
 <code sql> <code sql>
   sql   sql
Строка 413: Строка 437:
   - Документация по PostgreSQL: https://www.postgresql.org/docs/   - Документация по PostgreSQL: https://www.postgresql.org/docs/
   - Документация по PostgreSQL на русском: https://postgrespro.ru/docs/   - Документация по PostgreSQL на русском: https://postgrespro.ru/docs/
-  - Онлайн утилита генерации настроек для конфигурации сервера PostgreSQL: https://pgtune.leopard.in.ua/+  - Онлайн утилита генерации настроек для конфигурации сервера PostgreSQL: https://www.pgconfig.org/
   - PgBouncer FAQ: https://www.pgbouncer.org/faq.html   - PgBouncer FAQ: https://www.pgbouncer.org/faq.html
  
 +
 +=====  Решение проблем с PostgreSQL =====
 +
 +==== Блокировки транзакций ====
 +Если возникают проблемы с операциями в БД PostgreSQL по причине конфликта блокировок транзакций, рекомендуется увеличить значение параметра ''max_locks_per_transaction'' в конфигурационном файле Сервера БД ''postgresql.conf'', например, до 100.
 +
 +<code config [highlight_lines_extra="9"]>
 +#...
 +
 +#--------------------------------------------------------
 +# LOCK MANAGEMENT
 +#--------------------------------------------------------
 +
 +# deadlock_timeout = 1s
 +
 +max_locks_per_transaction = 100 # min 10
 +# (change requires restart)
 +
 +#max_pred_locks_per_transaction = 64 # min 10
 +# (change requires restart)
 +
 +#...
 +</code>
 +
 +В случае возникновения ошибки "53200: нехватка разделяемой памяти" возможно повышение параметра до значения 1000:
 +<code config [highlight_lines_extra="9"]>
 +max_locks_per_transaction = 1000
 +</code>