Мой опыт администрирования IBM DB2 Express-C при использовании с 1C: Предприятием

Довелось работать с IBM DB2. И на 1С, и сервер на Django использовал эту СУБД одно время, OLAP запросы довольно шустро обрабатывал (правда, требовалась ручная настройка индексов, ну и веб-сервера, конечно, чтобы отклик был в пределах 2 секунд). Году в 2015 подготовил эту небольшую инструкцию себе, чтоб не забыть. И как дополнение к резюме, возможно кто-то прочитал на бумаге, оставшиеся годы без дела пролежала. Некоторое обобщение моего опыта работы с DB2. Немного поправил и предлагаю прочесть здесь для расширения кругозора. Может кого-то заинтересует. Сразу скажу, что с тех пор с DB2 не работал, подзабылось всё, но кое-что ещё помню. Критика и уточнения приветствуются, но, поскольку уже не работаю, может, не мне, а кому-то ещё будут полезны.

В интернете много инструкций как организовать работу 1С: Предприятия с СУБД IBM DB2. Для начала это совсем не плохо, но для использования в производстве не достаточно. Я раньше рекомендовал начинать знакомство с IBM DB2 с тренировочного курса Big Data University DB101RU. Сам прошел этот курс, сдал экзамен в 2012 году, считаю его очень полезным. Жаль, что ресурс прекратил своё существование. На новой платформе ничего подобного не нашёл. В производстве IBM DB2 требует дополнительных настроек и обслуживания, самые необходимые из которых будут здесь кратко описаны. Рассматривается бесплатная редакция IBM DB2 Express-C для Windows версии 10.1fp2 и 10.5fp4 (первая поддерживается фирмой «1С» для работы в тестовом режиме, вторая — поддерживается официально, жаль, что более новые версии только платные). Имеет смысл установить 64-битную 10.5 там, где высоки требования к оперативной памяти (размерам буферпулов для скорости работы) или размеру записи (EXTENDED_ROW_SZ = ENABLE) при использовании составных типов, содержащих длинные строки фиксированного размера.

Самое первое, что следует сделать — перейти к использованию архивных журналов с тем, чтобы делать бэкапы, не прерывая работы «1С: Предприятия», и иметь возможность восстановить базу данных на любой момент времени (восстановление в 10.1fp2 имеет свои особенности из-за неисправленного бага в бесплатной версии — требуется ручное перемещение файлов журналов). В отличие от MS SQL архивирование журналов выполняется не в определенные заранее заданные моменты времени (в MS SQL не силён, возможно, что-то ещё есть), а по достижении файлом журнала определенного, заранее заданного размера, не требуется бэкапирование журнала перед операцией восстановления, достаточно деактивировать базу. Легко настраивается архивирование журналов в два направления, одно из которых — на сетевом диске, например. При этом в случае непродолжительных сбоев в сети увеличение занятого активными журналами места — не значительно. Для активных журналов необходимо предусмотреть достаточно свободного места, чтобы иметь возможность восстановления базы данных на любой момент времени. Если в процессе работы программиста с базой 1С требуются частые возвраты в различные близкие моменты времени, для восстановления достаточно одного бэкапа, выбор файлов журнала для восстановления весьма прост. Обязательно следует активировать базу при старте инстанса, иначе получим большое количество мелких файлов журналов при неявной активации. Очевидно, следует установить время хранения бэкапов (мне кажется, необходимо хранить журналы не менее двух месяцев) и настроить автоматическое удаление. База и бэкапы (логи) должны находиться на разных физических дисках, в крайнем случае можно делать бэкапы на другой компьютер локальной сети.

Активация базы нужна и по другой причине. Для нормальной работы следует установить окна онлайн и оффлайн обслуживания. В это время база должна быть активна. Периодически следует просматривать историю базы для выяснения какие действия выполнялись во время оффлайн окна. Окно оффлайн обслуживания, скорее всего, следует установить в промежутке времени 22:00 — 0:00, так как в это время нет тяжелых регламентных заданий 1С. Возможно, для небольших баз достаточно окна продолжительностью 1 час.

Периодически требуется запускать проверку необходимости реорганизации в ручном режиме и, после анализа состояния таблиц и индексов, выполнять реорганизацию отдельных объектов. Ручная реорганизация нескольких тысяч таблиц и индексов может занять продолжительное время. Анализ легко ускоряется простым фильтром (на .js, например) с использованием регэкспов.

AUTOCONFIGURE, конечно, необходимо периодически делать, исправляя вручную отдельные настройки, например, устанавливая свой размер файлов журнала.

Через день, возможно и чаще выполнять онлайн бэкапирование базы (не требует остановки работы и присутствия DBA), частота зависит от требуемого времени восстановления, зависящего в свою очередь от количества файлов архивных журналов после последнего бэкапа, то есть нагрузки на базу. Для средних, больших и высоконагруженных баз данных имеет смысл применение различных видов инкрементного бэкапа с целью уменьшения занимаемого бэкапами места и сокращения времени восстановления из резервных копий. После каждого бэкапа и перед восстановлением проверять исправность резервных копий. Время хранения бэкапов на усмотрение DBA, но не меньше времени хранения журналов.

Не реже, чем раз в месяц выполнять оффлайн и онлайн проверки исправности базы данных (в оффлайн режиме работа с базой приостанавливается на несколько минут) и при необходимости — выполнить ремонт (наиболее актуально для «серверов» без ИБП). Ежемесячно выполнять оффлайн бэкап базы данных, хранить долго только оффлайн бэкапы, поскольку при смене версии DB2 онлайн бэкап развернуть не удастся. Если «1С: Предприятие» не допускает даже кратковременного перевода базы в оффлайн для проверки или бэкапа, возможно выполнение указанных действий в развернутой копии базы. База данных без особых проблем восстанавливается из бэкапа в другое расположение, например на другой диск на другом сервере. Следует отметить, что как бэкапы, так и архивные журналы могут быть сжаты средствами DB2 (при этом остается работоспособным средство проверки бэкапов и не работает средство проверки архивных журналов).

Перед оффлайн проверкой базы данных и оффлайн бэкапом следует установить блокировку базы и регламентных заданий. В экстренном случае можно обойтись стабилизацией базы данных, но, поскольку, пользователь, под которым запущен сервер «1С: Предприятия» входит в группу SYSADM_GROUP, это не отменит возможности подключения 1С к базе данных в неподходящий момент времени и, как следствие, вызовет необходимость повторного запуска задания.

Если база данных работает не быстро, следует, после обновления статистики, получить планы наиболее тяжелых запросов, в копии базы поэкспериментировать с индексами в 1С, отслеживая изменения плана запроса в IBM Data Studio (в этом случае оправдано применение eclipse, в других достаточно обойтись интерфейсом командной строки), или воспользоваться рекомендациями DB2 Design Advisor и, при необходимости, создать индексы вручную вне 1С. Одновременно с этим запустить сбор детальной информации о производительности средствами DB2 (более десятка SQL скриптов) и проанализировать нагрузку системным монитором. Для уменьшения нагрузки на дисковую систему база данных должна устанавливаться на отдельный высокооборотный диск достаточного объема (если, конечно, отсутствует нормальный серверный дисковый массив RAID 10), возможно размещение активных логов на SSD вместе с ОС. Вероятно, также потребуется изменение места расположения темпов сервера «1С: Предприятия». В случае, если покупка диска только планируется, для небольших организаций допустимо временное использование под базы данных единственного физического диска.

Ежедневно просматривать db2diag.log на предмет ошибок, а также по результатам действий с базой данных. Архивировать по достижении размера в несколько десятков мегабайт. Удобным средством просмотра журнала может быть Far Manager (предполагается, что ошибок в процессе работы базы данных мало), он же поможет в случае необходимости ручного перемещения архивных логов для восстановления на момент времени.

Одним из конкурентных преимуществ IBM DB2, как мне кажется, можно считать то, что в случаях, когда для нормальной работы MS SQL Server требуется 64-битный сервер «1С: Предприятия», для IBM DB2 можно обойтись 32-битным.

UPD: Возможно, был не внимателен, когда перед публикацией проверял поддерживаемые 1С: Предприятием версии DB2. В оригинале этого текста 2015 года о 10.5fp4 было сказано: при использовании с 1С: Предприятием «ошибок пока не обнаружено». То есть на настоящий момент из новых Express-C возможно только применение 10.1 (с её особенностями и ограничениями). Из современных платных официально поддерживается только 11.1. Не исключено, что кому-то будет достаточно Developer-C с размером базы до 100 Гб. Ссылку на документацию менять не стал — там легко переключаться.

UPD: Перечитал всё, наверно, должно быть понятно тому, кто имел дело с DB2 но, возможно, требуются некоторые пояснения для тех, кому работа с этой СУБД в новинку, например
следует просматривать историю базы
должно привести сюда, а
выполнять оффлайн и онлайн проверки исправности базы данных
сюда, сюда и сюда, но в последнем случае уже может потребоваться
вот такой пакетный файл
@echo off
setlocal
db2 list applications for db %1 && exit /b
set active=no
db2 list active databases | findstr /i /r "=\ %1$" >nul && set active=yes
if %active%==yes db2 deactivate db %1 || (db2 activate db %1 & exit /b)
db2 CONNECT TO %1
db2 QUIESCE DATABASE IMMEDIATE FORCE CONNECTIONS
db2 CONNECT RESET
::db2set DB2_DIRECT_IO=OFF
db2dart %1 /RPT . /ERR E
::db2set DB2_DIRECT_IO=
db2 CONNECT TO %1
db2 UNQUIESCE DATABASE
db2 CONNECT RESET
if %active%==yes db2 activate db %1


А вот то, что
Анализ легко ускоряется простым фильтром (на .js, например) с использованием регэкспов.
может вызвать затруднение, не уверен, что вообще это кто-нибудь делает, полагается на автоматику, максимум ограничивается таким запросом: db2 "SELECT substr(TABSCHEMA,1,20), substr(TABNAME,1,20) FROM SYSIBMADM.ADMINTABINFO WHERE REORG_PENDING = 'Y'" Тем не менее
получить нужную информацию легко
Для этого сначала запускается вот такая команда db2 -x "select 'reorgchk update statistics on table',substr(rtrim(tabschema)||'.'||rtrim(tabname),1,50),';' from syscat.tables where type = 'T' " > reorgchk.out а затем db2 -tvf reorgchk.out > reorgchk.txt и, наконец reorg_filter.js reorgchk.txt Вот сам WSH скрипт reorg_filter.js, выводящий список потенциально проблемных объектов, который, скорее всего, должен быть небольшим, если окна обслуживания правильно установлены:
var block = "", include = false, fso = new ActiveXObject("Scripting.FileSystemObject");
var input = fso.OpenTextFile(WScript.Arguments.Item(0), 1, false);
var output = fso.CreateTextFile(WScript.ScriptFullName.replace(/\.js/i, ".txt"), true);
while(!input.AtEndOfStream){
    line = input.ReadLine();
    if(/^reorgchk\s/i.test(line)){
        if(include)output.WriteLine(block);
        block = "";
        include = false;
    }
    block += line + "\n";
    if(/\s([-*]{3}|[-*]{5})\s+$/.test(line))if(/\*/.test(RegExp.$1))include = true;
}
if(include)output.WriteLine(block);

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

Ссылки на упомянутые ресурсы/файлы


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

Многое уже подзабылось, но ссылку на сохранённый когда-то документ pdf «Best practices. Tuning and monitoring database system performance» удалось найти (ссылка теперь новая, старая wiki прекращает существование с 2020-01-01, а здесь пока всё не совсем стабильно).
Если ссылка перестанет работать, название и хеши файла:
Name: DB2BP_System_Performance_0813.pdf
SHA384: 180E EF56 DB7F 70DE A514 981C 2718 ADD1 5702 D142 ABFD 090C A2B1 529C E918 B7AE DD08 7C7E B36C 3466 C843 C808 D4DA DE66
SHA256: A1B3 C600 B28A 8B9F 25ED 4AC3 F6C2 C6BB F884 BDA5 4121 DA1A 9C05 D0B0 F5CF D84E
MD5: F086 F0DD 6CFC 4DAB 4723 FBE4 A2BE AB41
SHA512: 6C86 B044 7F60 1DDA AFA5 D726 A6C2 9B29 68DD 3A90 1606 DA17 0464 5213 C0B0 B3C8 E636 221A 316D 151F 7E05 2B6D 55EB 95FC 09E7 B1AD 8CFE 0848 AB9F 9408 D214 35EE
SHA1: 7911 0741 2E6C FD6B 4B5B F639 5C0D 48D8 3528 A64D
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 24

    +1
    Почитал про версию DB2 Express-C

    DB2 Express-C это не «покоцанная» версия DB2. Наоборот, DB2 Express-C построена на том же самом коде, что и другие, коммерческие редакции DB2, но при этом она обладает очень щедрыми условиями лицензирования, при которых отсутствуют ограничения на вашу базу данных. Это означает, что на вашем сервере DB2 может использовать:

    До 2 ядер (в пределах 1 процессора, в том числе и 2 ядра Power6!)
    До 2 Гигабайт оперативной памяти
    Нелимитированное пространство под базу данных
    Неограниченное количество соединений
    Отсутствие ограничений на количество пользователей или каких-либо иных ограничений


    не знал даже что они имеют такую открытую версию. И она, вопреки утверждению, все же чуточку покоцанная. Т.к. 2Гб это как-то маловато.

    Вопросы такие

    1) Почему отдали предпочтение DB2?
    2) Был ли это реальный проект работающий в системе управление реального предприятия?
    3) Хватило ли 2Гб и 2-х ядер?
    4) Купило ли в настоящее время предприятие платную лицензию DB2?
    5) Перешло ли в настояшее время предприятие на другую базу данных?
      0
      1) Когда подошло время перейти от 7.7 к 8 (хотелось быть в курсе новых технологий, а старое предприятие было в предбанкротном состоянии), начал изучать и заинтересовался различными поддерживаемыми 1С СУБД в клиент-серверном варианте. Одновременно появился интерес к Django. Python знал года с 2009. Был домашний локальный сайт c cgi-bin, захотел усовершенствовать. Django мог работать с DB2 в том числе. Так пришёл к DB2. Когда изучил довольно подробно, понравился механизм восстановлнеия на заданный момент времени: просто и эффективно. Если бэкапы и журналы целы, ремонт базы в случае обнаружения повреждений на жёстком диске — дело нескольких минут. Подробная официальная документация (на английском только) и к тому моменту развитое сообщество пользователей Express-C. Из несущественных недостатков: всё почти нужно делать через командную строку, но кто как привык. Data Studio на тот момент работало почти хорошо под Windows и почти совсем никак на openSUSE Linux. Да, кстати, на Linux не удалось завести — знаний не хватило, а с Windows пара мелких проблем только была. Ещё преимуществом можно считать хорошие курсы для старта на Big Data Iniversity тогда. Там неплохо всё для начала объяснили, правда на экзамене ничего из того, что преподавали не спрашивали, и если бы не интересовался SQL раньше и не работал практически с DB2 в процессе учёбы, наверно не сдал бы с первого раза. Ну и планы были пытаться куда-нибудь устроиться поблизости со знанием DB2. Надеялся, что такие технические характеристики забесплатно хоть кого-то заинтересуют и текст составлял так, чтобы был понятен объём работ в различных случаях. Да, ещё, насколько помню, если ничего не предпринимать, MS SQL отжирает со временем всю память, а с DB2 всё настраивается. Еще, если задано оффлайн окно, ручная реорганизация скорее всего не будет требоваться, разве что окно слишком маленькое. Но это легко исправляется ручной проверкой и анализом (да, кстати .js скрипт не на Node.js, а на WSH — пишу скрипты на .js года с 2000).

      2) Не долго проработал с УПП на одном предприятии. Внедряли новый проект, и, когда оказалось, что большие проблемы с MS SQL, предложил начальнику попробовать DB2. Он был не против, а, поскольку я к тому времени довольно хорошо знал Express-C (сайт со временем стал не только локальным и на DB2 прекрасно работал, несколько раз апгрейдился на новую версию, вроде, посетителей было не много, но я настраивал из интереса всё так, чтобы все мыслимые тестовые нагрузки выдерживал, там было всё — и мониторинг доступности извне через недорогой платный сервис, и SSL сертификат с настройками апача на A+ по безопасности), начали (использование DB2 было не сильно рискованное решение, так как через выгрузку можно в 1С всегда перейти с одной СУБД на другую). И стало получаться. К сожалению по состоянию здоровья не смог долго работать, уволился. Потом пару раз звали обратно и при старом начальнике отдела IT, и при новом, но уже не смог. Что потом сделали внедренцы из областного центра я не знаю (и, кстати, у них как раз и были длинные строки фиксированного размера в полях составных типов).

      3) Насколько помню, на 10.5 целых 4 Гб даётся. На одном инстантсе ставил эту довольно большую базу и три мелких, вручную прераспределял память только. Проблем не было. Предприятие бедное, на их железе если вообще что-то работало — уже успех. Когда купили новый дополнительный диск на сервер и настроил всё — залетало. Пробил покупку нового сервера, но уже не увидел, как запустили. Насколько помню, тест Гилёва показывал некоторое преимущество DB2 над MS SQL, но, возможно, что последний я просто не умел настраивать, а предыдущие специалисты тоже не были большими мастерами.

      4) Предприятие оборонное и с деньгами у них проблемы постоянно. Не думаю, что они используют DB2 сейчас. Специалистов таких нет у нас. Если бы продолжил работу — и то не уверен, что стали бы использовать DB2. Что требовал от меня начальник — написать побольше инструкций по MS SQL.

      5) Изначально у них был MS SQL, он, наверняка и остался. DB2 был некоторый непродолжительный эксперимент со стороны руководства отдела. Возможно, специалисты из области всё настроили. По моим прикидкам из старого сервера ничего выжать было нельзя. Были довольны, что он вообще работает.

      Ну и дополню ещё: когда выходили ещё версии Express-C, они зачастую долгое время содержали незакрытые баги. Выход нового фикспака в текущей бесплатной версии — было целое событие. Я тогда был подписан на рассылку по обнаруженным и исправленным багам (не вспомню уже где это найти). Так покупка платной редакции всегда казалась правильным решением. Но, учитывая, что у нас предприятия не готовы платить много, считал, что DB2 имеет свою нишу на рынке среди мелких предприятий. У крупных проблем нет, платные редакции обеспечивают очень хорошую производительность и надёжность. Проблема в том, что в бесплатном сегменте нет специалистов по использованию DB2.
      • UFO just landed and posted this here
          0
          У 1С есть своя специфика. Но я имел в виду другое. Если на платные редакции фикспаки ставились, то для Express-C приходилось ждать выхода полного дистрибутива с вшитым фикспаком. Возможно, технически фикспак и можно было поставить, но, насколько помню, лицензия не позволяла. Поэтому, когда в 10.1fp2 поломали нормальное восстановление на момент времени, я думал что базу грохну, когда столкнулся. Но хотя бы удалось вернуться на текущий момент. И у IBM не было обязательства помогать. Решение нашёл через несколько часов только. Насколько помню, в следующем фикспаке это поправили, но для Express-C следующего фикспака так и не вышло. Только с появлением 10.5 всё заработало так, как надо, а до этого приходилось из расположения архивных журналов перемещать нужное количество в расположение активных журналов и тогда только начинать rolforward. Это замечание, скорее, о том, что у платных редакций есть значительные преимущества.
            0
            Копировать, конечно, а не перемещать.
            • UFO just landed and posted this here
        • UFO just landed and posted this here
          • UFO just landed and posted this here
              0
              Пишут, что IBM Db2 Exprecc-C была заменена на IBM Db2 Community Edition c указанными вами ограничениями: www.ibm.com/cloud/blog/announcements/ibm-db2-developer-community-edition
                0
                Это Developer-C со всеми ограничениями в лицензии. Express-C можно легально использовать на производстве. А в сравнении с MS SQL Server Express на тот момент IBM DB2 Express-C однозначно выигрывала.
                • UFO just landed and posted this here
                    0
                    По целям это всё-таки Developer. То есть клиенту демо базу показать, пока не захочет купить лицензию. Здесь чуть подробнее.
                      0
                      Data warehouse и Fast data рисуют безлимитные базы.
              0
              В 1С раньше (давно) поднимал Андрей Аристархов, можно посмотреть его посты на форму IBM DB2. DB2 потрясает своей устойчивостью к нагрузкам, даже Express. Но без настройки с 1С у меня 9 не запускалась. И спасибо за пост — кратко и по делу!
                0
                Одним из конкурентных преимуществ IBM DB2, как мне кажется, можно считать то, что в случаях, когда для нормальной работы MS SQL Server требуется 64-битный сервер «1С: Предприятия», для IBM DB2 можно обойтись 32-битным.


                О чем вы?
                MSSQLSERVER2016 + 1C-Server-x32 + 3года + 100users = Мир, дружба, жвачка
                  0
                  Писал по опыту работы в 2014 году, когда предприятие, на котором работал, не имело серверов с достаточной памятью. Текст исправлять не стал.
                    0
                    А какой размер базы у вас?
                      0
                      Не помню уже, уволился оттуда в 2014 году.
                        0
                        30Gb
                          0
                          Да, не маленькая.
                          1С, всё-таки, советует сервер предприятия использовать x64.
                    • UFO just landed and posted this here
                        0
                        Design Advisor, кстати, упомянул. В третьем абзаце с конца. Но иногда решение очевидно. Мне в одном месте помогло добавление в индекс (если правильно помню через include) почти всех полей таблицы, благо она была не большая. То есть до чтения таблицы вообще не доходило, всё бралось из индекса, общее ускорение раз в 10 получилось, насколько помню.
                        • UFO just landed and posted this here
                            0
                            Насколько помню, в Express-C Design Advisor несколько урезан, доступны только пара функций из тех, которые мне были интересны, ну и когда база не очень большая, можно поломать голову над индексами в Data Studio — там довольно удобно.

                      Only users with full accounts can post comments. Log in, please.