The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Опыт обслуживания базы 1С в PostgreSQL
Знакомство с СУБД PostgreSQL было определено выходом версии платформы
"1С:Предприятие 8.1", в которой была реализована поддержка СУБД PostgreSQL. Но
все встречи с PostgreSQL проходили на резервном сервере (с ОС Linux), где
методом тестового использования решался вопрос об использовании PostgreSQL в
качестве СУБД для рабочей базы 1С. В это время на основном сервере (с ОС Linux)
база 1С работала в файл-серверном режиме.

До поры до времени шел процесс перехода со старой системы на 1С - нормативно
справочная информация была перенесена заранее, а в это время переносились
текущие остатки. Количество пользователей (менее 10) и размер файла базы 1С
(менее 3Gb) позволяли работать в файл-серверном режиме.

Шло время. Пользователи по мере внедрения переводились из старой системы в 1С.
Количество пользователей росло. Размер файла базы данных тоже увеличивался в
размере. Настало время подключать к базе 1С удаленных пользователей в
терминальном режиме (FreeNX). Количество лицензий опять пришлось увеличить.
Хорошо, что получилось поменять один ключ на ключ с большим количеством
пользовательских лицензий и количество компьютеров для менеджера лицензий не увеличилось.

И тут произошло самое скучное - размер базы данных 1С вырос до неприличных
размеров. Все вместе, количество одновременно работающих в 1С пользователей
более 10 и размер файла базы данных 1С более 4Gb, стало очень негативно
сказываться на производительности работы пользователей в 1С.

Настало время серьезного знакомства с возможностью размещения базы 1С в СУБД
PostgreSQL. Пользуясь знакомством с СУБД PostgreSQL, переезд на SQL-версию
размещения данных 1С прошел быстро и без жертв (сервер с ОС Linux).

Время шло. Размер системного каталога PostgreSQL с базой 1C достиг размера
35Gb. Размер dt-файла выгрузки базы 1С стал где-то около 1.2Gb, а развернутая
база на его основе 16Gb. Пришло время придумать что-то еще для обеспечения
производительной работы пользователей в 1С. Пользуясь документацией PostgreSQL,
которая идет в комплекте с СУБД, оформилось две команды по обслуживанию базы
"baza1c_81" в PostgreSQL. Эти команды выполняют сбор мусора, выполнение сбора
статистики о базе данных для работы планировщика запросов, переиндексацию:

   VACUUM FULL VERBOSE ANALYZE;
   REINDEX DATABASE baza1c_81 FORCE;

(Хотя с FULL в первой команде лучше для себя определиться еще раз
самостоятельно, http://wiki.PostgreSQL.org/wiki/VACUUM_FULL и в документации
PostgreSQL см. VACUUM).

Далее дело техники. Определили время запуска. В воскресенье с 17-00 до
понедельника 6-00 в базе никого не бывает. В cron отключаем ночное
архивирование базы в это время (а архивировать лучше как средствами 1С, так и pgdump).


Первым шагом в cron добавляем строку для создания архива:
Запускаем crontab -e:

   0 17 * * 0 /var/lib/pgsql/backups/pgdump.sh

   :wq

, где 0-мин, 17-час, *-день, *-месяц, 0-(день недели воскресенье);

Вторым шагом добавляем в cron строку выполнения первой команды :

   0 18 * * 0 /var/lib/pgsql/backups/vacuum.sh

, учтем 30 минут на работу pgdump.sh по созданию архива;

В vacuum.sh делаем стоп-старт сервера предприятия 1C, PostgreSQL, менеджера лицензий и VACUUM :

   #!/bin/sh
   # reindex BD
   PIDEL=`pidof Xvfb`
   if [ ! "$PIDEL" = "" ]; then
      ##иногда выгрузка из 1С в WINE зависает
      kill -9 $PIDEL
   fi
   # stop 1c-server
   /bin/sh /etc/rc.d/rc.1c stop
   #kill all running session nx
   /bin/sh /etc/NX/bin/nxserver --cleanup
   sleep 150
   #перешли на stop start
   /bin/sh /etc/NX/bin/nxserver --stop
   /bin/sh /etc/rc.d/rc.sshd stop
   rm /tmp/.nX*
   rm /tmp/.X*
   rm /tmp/.X11-unix/X29 ## следы от запуска Xvfb
   #--------------
   /bin/killall nxserver
   /bin/killall nxnode
   /bin/killall nxagent
   #
   sleep 150
   /bin/sh /etc/rc.d/rc.sshd start
   /bin/sh /etc/NX/bin/nxserver --start
   #--------------
   # start 1c-server
   sleep 150
   /bin/sh /etc/rc.d/rc.1c start
   sleep 150
   su postgres -c /var/lib/pgsql/backups/vacuumdb.sh

В vacuumdb.sh :

   #!/bin/sh
   psql -a -f /var/lib/pgsql/backups/vacuum.sql

В vacuum.sql :

   VACUUM FULL VERBOSE ANALYZE;

Команда по факту работает от 6 до 8 часов.

Вторым шагом добавляем в cron строку выполнения второй команды:

   30 3 * * 1 /var/lib/pgsql/backups/reindex.sh

,учтем время на работу vacuum.sh;

В reindex.sh все тоже, что и в vacuum.sh, за исключением одной строчки. Вместо
su postgres -c /var/lib/pgsql/backups/vacuumdb.sh напишем su postgres -c /var/lib/pgsql/backups/reindexdb.sh.


В reindexdb.sh :

   #!/bin/sh
   psql -a -f /var/lib/pgsql/backups/reindex.sql

В reindex.sql :

   REINDEX DATABASE baza1c_81 FORCE;

И в каждый понедельник база готова к эффективной работе.

А время идет. Подумываем об использовании SSD-дисков для размещения WAL.

PS. Если начинаете править postgresql.conf, тогда после изменений убедитесь в
успешном старте PostgreSQL c новым postgresql.conf.  Также необходимо убедиться
в успешном создании архивной копии, лучше всего восстановив базу на резервном
сервере из архивной копии.

PPS. Расчет себестоимости.... иногда этот расчет начинает очень сильно
задумываться о чем-то своем. Так вот, в этом случае можно попробовать отключить
в конфигурационном файле PostgreSQL autovacuum, выполнить стоп-старт "Менеджер
лицензий-Сервер предприятия-PostgreSQL". После расчета себестоимости в
конфигурационном файле вернуть все назад, стоп-старт. Оценить время расчета и
сделать вывод о необходимости повтора этих действий.

PPPS. Больная тема - остановка менеджера лицензий. И точнее всего эта остановка
прикладывается в пятницу, вечером. Это когда подходит время в цехе запустить 1С
и добавить в систему отчет производства за смену, или на складе готовой
продукции идет отгрузка во вторую смену. В другие дни решить эту проблему
помогает удаленный доступ, но в пятницу....

Для спокойного выполнения пятничных планов делаем маленькое дополнение в cron,
а именно добавляем следующую строку :

   0,5,10,15,20,25,30,35,40,45,50,55 * * * * /var/lib/pgsql/backups/hasp.restore

В hasp.restore запишем :

   #!/bin/sh
   FLAG=$(ps -A | grep hasplm | wc -l)
   CUR_DATE=20$(date +%y).$(date +%m).$(date +%d)-$(date +%H)$(date +%M)$(date +%S):
   if [ $FLAG -eq 2 ]
   then
      echo "$CUR_DATE hasplm running" >> /var/log/hasp.restore.log
   else
      #echo "false"
      hasplm &
      echo "$CUR_DATE RESTORE hasplm" >> /var/log/hasp.restore.log
   fi

И после выполнения crontab -e, с необходимым интервалом будет происходить
проверка работы менеджера лицензий и запуск его в случае необходимости.

Еще добавим в каталоге logrotate.d в файле syslog два файла для logrotate
(автоматическая архивация log-файлов)

   /var/mail/root /var/log/hasp.restore.log

А потом в свободное время смотрим tcpdump (или еще как то), вычисляем с какого
адреса забивают наш менеджер лицензий. А там тоже может стоять менеджер
лицензий, и даже совсем не 1С. Если находим такой адрес, добавляем правило в
iptables не оставляя ему шансов присылать нам эти приветы.
 
11.08.2010 , Автор: sashacd , Источник: http://www.oit-company.ru/publ/opyt...
Ключи: 1c, postgresql
Раздел:    Корень / Программисту и web-разработчику / SQL и базы данных / PostgreSQL специфика / Оптимизация и администрирование PostgreSQL

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Аноним (-), 13:44, 12/08/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > учтем время на работу xxx.sh

    А если не сумеете? Нужна только одна запись в cron, то есть пусть /var/lib/pgsql/backups/pgdump.sh в конце скрипта запускает /var/lib/pgsql/backups/vacuum.sh, а тот в конце - /var/lib/pgsql/backups/reindex.sh. И простоя не будет, и если вдруг какой-то скрипт будет выполняться дольше чем планировалось, ничего не обвалится.

     
  • 1.2, KIrill (?), 13:51, 12/08/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А зачем так много файлов?
    Я использую такое:
    #!/bin/sh

    DATE='/bin/date --date '-1 day' +%Y%m%d'
    BACKUPDIR=/backup
    PGUSER=postgres

    /usr/bin/vacuumdb --all --analyze --full --quiet --username $PGUSER
    for i in trade zup montage; do
            /usr/bin/find $BACKUPDIR/$i -type f -ctime +45 -delete
            /usr/bin/pg_dump --insert --blobs --format=custom \
                    --username=$PGUSER --file=$BACKUPDIR/$i/$DATE.tgz $i
    done

    Правда сервер 1С находится на другой машине, скрипт запускаю в 5 утра, у нас в это время не работают.

     
     
  • 2.3, Denis (??), 13:58, 12/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    А зачем "учитываем время работы скрпита" нельзя ли составить однострочник с последовательным выполнением всем команд с помощью &&?
     

  • 1.4, igoree (?), 14:23, 12/08/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    лучше время работы скрипта не учитывать наугад, а сделать проверку на работу предыдущего перед запуском следующего, создавая первичным скриптом lock файл и удаляя его потом
     
  • 1.5, anonim (?), 16:31, 12/08/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Correct: OS GNU/Linux
     
  • 1.6, ммм... (?), 20:42, 12/08/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А что autovacuum не помогает? :(
    И прям таки reindex делать нада???
     
     
  • 2.31, Аноним (-), 01:24, 11/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    и ещё меня убивает что все кругом делают VACUUM FULL. Вы доки читали??????????
    НЕ РЕКОМЕНДУЕТСЯ ЕГО ДЕЛАТЬ! СМОТРИТЕ http://wiki.postgresql.org/wiki/VACUUM_FULL#When_.28not.29_to_use_VACUUM_FULL
     

  • 1.7, japh (?), 23:55, 12/08/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    можно пояснить сакральный смысл REINDEX?
    чем не угодил автовакум?

    > Подумываем об использовании SSD-дисков для размещения WAL

    это поможет, да.

     
  • 1.8, ДяДя (?), 10:35, 13/08/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Всё это хорошо, но без управляемых блокировок PostgreSQL использовать невозможно, если есть постоянный ввод документов и пользователей больше пяти.
     
     
  • 2.25, Аноним (-), 09:55, 20/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    В 1с можно вручную прописать уровни блокировок и тогда постгресина становится вполне себе хорошей заменой MS SQL для 1с.
     

  • 1.9, mma (?), 11:46, 13/08/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    что это такое. поясните, любопытно. я знаю про транзакции, а упровляемая блокировка это что?
     
     
  • 2.10, трололо (?), 11:57, 13/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >что это такое. поясните, любопытно. я знаю про транзакции, а упровляемая блокировка
    >это что?

    забанили в гугле?
    http://v8.1c.ru/overview/datalockcontrol.htm

    ЗЫ: объясните, мил человек, как можно умудриться сделать ошибку в слове "упрАвляемая"?

     
     
  • 3.13, Аноним (-), 01:45, 14/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > ЗЫ: объясните, мил человек, как можно умудриться сделать ошибку в слове "упрАвляемая"?

    Помимо ошибок бывают ещё опечатки, это когда человек хотел написать правильную букву но ошибся и нажал не ту клавишу на клавиатуре. Так-то!

     
     
  • 4.15, трололо (?), 10:19, 16/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >> ЗЫ: объясните, мил человек, как можно умудриться сделать ошибку в слове "упрАвляемая"?
    >
    >Помимо ошибок бывают ещё опечатки, это когда человек хотел написать правильную букву
    >но ошибся и нажал не ту клавишу на клавиатуре. Так-то!

    человек осьминог? буковки о и а - как то не очень рядышком на клавиатуре. так-то.

     
  • 3.14, Аноним (-), 00:02, 15/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >http://v8.1c.ru/overview/datalockcontrol.htm

    Пурга какая то .... У нас одному ERP'у вместо старого оракля подсунули постргресса ... молотит только пыль летит. А великие и ужасные 1C - не ослилили ...

     
     
  • 4.16, stimpack (?), 17:25, 16/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    великие и ужасные 1с берут на работу с такой ЗП, что идут туда либо люди одной с директором 1С национальности, либо студенты. И в итоге код выходит курам на смех. То, что они еще живы - это лишь подтверждение тому, что качество софта мало влияет на успешность продукта.
    аська, виндовс, 1с, оракл - все одного поля ягоды. И стыдно и завидно. Видать, стабильность разработки больше выгодна программерам, чем конечным пользователям. Которые голосуют кошельком :-)
     
     
  • 5.17, stimpack (?), 17:26, 16/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    s/стабильность разработки/качество кода/


     
  • 5.18, ДяДя (?), 19:33, 16/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Это нельзя ни подтвердить ни опровергнуть.
    Однако 1С-прогеры на испытательном сроке получают больше, чем начальник с 3-х летним опытом в Parallels.
     
     
  • 6.21, stimpack (?), 10:50, 18/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >Это нельзя ни подтвердить ни опровергнуть.
    >Однако 1С-прогеры на испытательном сроке получают больше, чем начальник с 3-х летним
    >опытом в Parallels.

    "За что купил, за то и продаю", и не в курсе, что платит параллелс.

     
     
  • 7.22, ДяДя (?), 12:39, 18/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Можете сами это узнать, если интересно.

    У приятеля сын C-прогером устроился в одну контору после института - 40 т.р.
    Гуру у них получает 60 т.р.

    Обычный 1С-ник с не очень большим опытом в паршивой фирме 80 т.р.

     
     
  • 8.23, stimpack (?), 15:34, 18/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Вы, вероятно, путаете понятия 1С-ник, пишущий прикладные конфигурации в 1С-плат... текст свёрнут, показать
     
  • 5.19, hhh (?), 09:36, 18/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >>великие и ужасные 1с берут на работу с такой ЗП, что идут туда либо люди одной с директором 1С национальности, либо студенты.

    При чем тут национальность?

    >>аська, виндовс, 1с, оракл - все одного поля ягоды. И стыдно и завидно.

    У Вас есть примеры программ с безупречным кодом и работой?

     
     
  • 6.20, stimpack (?), 10:49, 18/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >При чем тут национальность?

    имеется в виду закамуфлированный "гастарбайтер"
    >У Вас есть примеры программ с безупречным кодом и работой?

    В мире все относительно, не стоит применять атрибутику идеального мира. И, следуя этой же относительности, перечисленные софты явно не в топе общепризнанного качества.

     
  • 4.26, Аноним (-), 15:19, 20/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > У нас одному ERP'у вместо старого оракля подсунули постргресса ... молотит только пыль летит. А великие и ужасные 1C - не ослилили ...

    Оракл и постгрес версионники, а 1С разрабатывалась под блокировочник, отсюда и проблемы.

    Два варианта, которые собственно и озвучены: либо переисать конфигурации на другой тип блокировок, либо сделать из версионника блокировочник и получить деградацию скорости.

     
  • 2.30, Дым (?), 06:50, 09/12/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Постгрес - версионник.
    М$скул - блокировочник.
    В МС блокировки построчные.
    Реализация 1С на постгресе использует блокировки таблиц, но можно их сделать (в терминах 1С) управляемыми, сиречь - тоже построчными.
    Правда, простое переключение блокировок в конфигурации 1С из "автоматических" в "управляемые" ожидаемого результата не даст: требуется ещё и вмешательство в код, что автоматом исключает апдейт до свежих версий платформы.
    Поправьте меня, если я неправильно ошибаюсь.
     

  • 1.11, sashacd (?), 17:54, 13/08/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    В чем сакральный смысл reindex после vacuum full?
    А в чем сакральный смысл не делать reindex после vacuum full? Только опыт использования в каждом случае может ответить на этот вопрос.
     
     
  • 2.12, трололо (?), 17:58, 13/08/2010 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >В чем сакральный смысл reindex после vacuum full?
    >А в чем сакральный смысл не делать reindex после vacuum full? Только
    >опыт использования в каждом случае может ответить на этот вопрос.

    ответ на этот вопрос может дать вдумчивое чтение документации. дураки учатся на "собственном опыте", читай - ошибках. умные люди - учатся на ошибках чужих.

     

  • 1.27, Аноним (-), 06:59, 05/09/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    "REINDEX DATABASE baza1c_81 FORCE;
    VACUUM FULL VERBOSE ANALYZE;

    (Хотя с FULL в первой команде лучше для себя определиться еще раз)"

    Автор  как истинный программист считает с 0 ? :)

     
  • 1.28, sashacd (ok), 18:58, 08/09/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    поправился -
    "VACUUM FULL VERBOSE ANALYZE;
    REINDEX DATABASE baza1c_81 FORCE;"

     
  • 1.29, Дым (?), 06:19, 09/12/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    0,5,10,15,20,25,30,35,40,45,50,55 * * * * /var/lib/pgsql/backups/hasp.restore

    меняем на

    */5 * * * * /var/lib/pgsql/backups/hasp.restore
    ==============
    CUR_DATE=20$(date +%y).$(date +%m).$(date +%d)-$(date +%H)$(date +%M)$(date +%S):
    if [ $FLAG -eq 2 ]; then
          echo "$CUR_DATE hasplm running" >> /var/log/hasp.restore.log
    else
          hasplm &
          echo "$CUR_DATE RESTORE hasplm" >> /var/log/hasp.restore.log
    fi

    меняем на

    [ $FLAG -eq 2 ] && echo "$(date +%Y.%m.%d-%H:%M:%S) hasplm running" >> /var/log/hasp.restore.log || {
          hasplm &
          echo "$(date +%Y.%m.%d-%H:%M:%S) RESTORE hasplm" >> /var/log/hasp.restore.log
    }

     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру