Firebird 2.5 дерекқорын ODS12 пішіміне ағынмен түрлендіру (Firebird 3.0)

Firebird бағдарламасының әрбір нұсқасында дерекқор дискі құрылымы форматының O(n)D(isk)S(структура) өз нұсқасы бар. 2.5 қоса алғанда, Firebird қозғалтқышы алдыңғы нұсқалардың ODS-пен жұмыс істей алады, яғни ескі нұсқалардың дерекқорлары жаңа нұсқамен ашылды және үйлесімділік режимінде жұмыс істеді, бірақ Firebird 3.0 қозғалтқышы тек өзінің ODS нұсқасындағы дерекқорлармен жұмыс істейді. 12.0.

3.0 нұсқасына көшу үшін 2.5 дерекқорын сақтық көшірме жасау/қалпына келтіру арқылы жаңа пішімге түрлендіру қажет. Әрине, дерекқор бұрын түрлендіруге дайындалған деп есептейміз - яғни. метадеректер мен сұраулардың Firebird 3.0 нұсқасымен үйлесімділігі тексерілді.

Стандартты тәсілді ұстанатын болсаңыз, бұл сізге 2.5 нұсқасында сақтық көшірме жасау керек, содан кейін 3.0 орнатып, қалпына келтіру керек дегенді білдіреді. Мұндай процедура жеткілікті уақыт болған жағдайда қолайлы, бірақ үлкен дерекқорларды көшіру кезінде немесе бірнеше ондаған дерекқорларды бір уақытта көшіру кезінде, уақыт таусылған кезде ағынды түрлендіруді қолдануға болады, ол 30-40% жылдамырақ. Мұны қалай дәл орындау керек (Windows жүйесінде және Linux жүйесінде), кесу астында оқыңыз.

Жалпы идея - біз тездету үшін құбырды қолданамыз:

gbak -b … база25 stdout | gbak -c … stdin база30

Gbak from 2.5 желілік пішімде сақтық көшірме жасайды және оны stdout-қа жібереді, ол бірден stdin арқылы 3.0-ден gbak-ты алып, жаңа дерекқор жасайды.

Мұндай құбырды жергілікті (файлдық) қол жеткізу әдісімен ұйымдастыру қажет, өйткені желіге кіру (тіпті localhost арқылы да) процесті айтарлықтай баяулатады.

Төменде Windows және Linux үшін мәліметтерді қарастырамыз.

Windows

Windows жағдайында ең оңай жолы - Firebird-тің толық дербес құрастыруын жасау. Бұл үшін біз аламыз Embed-архив Firebird 2.5, fbemded.dll атауын fbclient.dll деп өзгертіңіз, «тұрақты» 2.5 мұрағатынан gbak.exe және (міндетті емес) isql.exe утилиталарын қосыңыз.

Firebird 3.0 пайдаланады жалғыз құрастыру және ешқандай өзгертулерді қажет етпейді.

Ең аз нұсқа (мақсатты жүйеде VS2008/VS2010 жұмыс уақыты кітапханаларын орнатуды қажет етпейтін) келесі файлдарды қамтиды:

25/gbak.exe
25/fbclient.dll
25/firebird.conf
25/firebird.log
25/firebird.msg
25/ib_util.dll
25/icudt30.dll
25/icuin30.dll
25/icuuc30.dll
25/Microsoft.VC80.CRT.manifest
25/msvcp80.dll
25/msvcr80.dll

30/fbclient.dll
30/firebird.conf
30/firebird.msg
30/gbak.exe
30/ib_util.dll
30/icudt52.dll
30/icudt52l.dat
30/icuin52.dll
30/icuuc52.dll
30/msvcp100.dll
30/msvcr100.dll
30/intl/fbintl.conf
30/intl/fbintl.dll
30/plugins/engine12.dll

Тәжірибелі әкімші 2.5 ішінде intl/fbintl.dll және intl/fbintl.conf файлдары жоқ екенін байқауы мүмкін. Бұл дұрыс, өйткені gbak қосылым таңбалар жинағын пайдаланбайды және деректерді таңбалар жиыны арасында түрлендірмейді, бірақ Firebird 3.0 «қабылдау» жағында бұл файлдар индекстерді жасау кезінде қажет.

Firebird.conf ішінде Firebird 3.0 қосу ұсынылады:

MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Сондай-ақ, 2.5 және 3.0 үшін әртүрлі IpcName мәндерін орнатқан жөн.

Firebird.conf басқа параметрлерінің мәндерін таңдағанда, біз қарапайым қарастырудан шығамыз: деректерді тасымалдау сатысында gbak бір процесте 2.5, ал екіншісінде 3.0 жұмыс істейді, содан кейін 2.5 шығады және 3.0 құрастыра бастайды. индекстер.

3.0-де индексті құру кезеңін жылдамдату үшін TempCacheLimit параметрінің өлшемін ~40% жедел жадыға дейін ұлғайту ұсынылады (әрине, егер ол арнайы сервер болса).

Мысалы, егер серверде 16 ГБ жедел жады болса, онда сіз қоюға болады

TempCacheLimit=6G

Әрине, бұл мәнді тек 64 биттік Firebird 3 үшін орнатуға болады, өйткені кез келген 32 биттік процесс 2 гигабайттан артық жадты бөле алмайды.

2.5-те бұл параметрді өзгерту қажет емес - ол бәрібір 2 гигабайттан аспауы керек және сақтық көшірме жасау кезінде жылдамдыққа әсер етпейді.

Операцияны орындамас бұрын дерекқор тақырыбындағы бет кэшінің 0 (пәрмен) орнатылғанын тексеру керек. gstat -h databasename, Бет буферлері жолын қараңыз).

Егер кэш нақты дерекқор тақырыбына орнатылса, ол firebird.conf (және 3.0 нұсқасындағы databases.conf) мәндерін қайта анықтайды, ал мәндері жеткіліксіз үлкен болған жағдайда, ол жадты шамадан тыс тұтынуға және ауыстыруға әкелуі мүмкін.

Содан кейін файлдарды мақсатты жүйеге көшіріңіз.

Түрлендіру «жүйені» Firebird 2.5 қызметін тоқтатқаннан кейін, жергілікті әкімшіге жоғары құқықтары бар пәрмен жолында жүзеге асырылады (мысал):

set ISC_USER=владелец
"25/gbak" -z -b -g -v -st t -y 25.log база25 stdout|^
"30/gbak" -z -c -v -st t -y 30.log stdin база30

Бұл мысалда тырнақшаларда «алға қиғаш сызық» қолданылады (жарамды «unix-стиль») және «шляпа» («^» таңбасы) ұзын пәрмендерді теру кезінде пайдалы болатын жаңа жол таңбасын алып тастайды. -st(atus) опциясы Firebird 2.5.8 нұсқасында пайда болды және gbak процесі орындалған уақыт туралы деректерді тіркеуге мүмкіндік береді (толығырақ ақпаратты құжаттамадан қараңыз).

Linux

Linux жүйесінде Firebird 3 томмат кітапханасына байланысты. CentOS (RHEL) жүйесінде бұл кітапхана epel репозиторийінде, Ubuntu жүйесінде (Debian) жүйелік репозиторийде орналасқан.

CentOS үшін алдымен epel репозиторийін қосу керек, содан кейін ғана қосыңыз

yum install libtommath

Ubuntu қосымша репозиторийлерді қамтудың қажеті жоқ, бірақ Ubuntu 16 және Ubuntu 18 пакеттердің әртүрлі нұсқаларын орнатады - тиісінше libtommath0 және libtommath1.

Firebird 3.0 tommath.so.0 іздейді және Ubuntu 18 үшін tommath.so.0-дан tommath.so.1-ге сілтеме (символы) жасау қосымша талап етіледі. Ол үшін алдымен tommath.so.1 табу керек.

Ubuntu-да ізделген жол - /usr/lib/x86_64-linux-gnu/, бірақ ол Debian негізіндегі басқа дистрибутивтерде басқаша болуы мүмкін.

Екінші мәселе Firebird 3.0.1 нұсқасына дейін екі түрлі сервер нұсқасын орнатудың оңай жолы болмағанымен байланысты. Біз «қажетті префикспен дереккөзден құрастыру» опциясын оның салыстырмалы күрделілігіне байланысты қарастырмаймыз.

Firebird 3.0.2 және одан жоғары нұсқалары үшін енгізілген –enable-binreloc көмегімен құру және бөлек орнату опциясы (-жол жолы).

Жүйеге tommath кітапханасы және қажет болса, tommath.so.0 үшін символдық сілтеме қосылды деп есептей отырып, ағымдағы (осы жазу кезінде) Firebird 3.0.4 таратуын, мысалы, /opt ішінде орнатуға болады. /fb3:

./install.sh -path /opt/fb3

Осыдан кейін сіз Firebird жүйесінің қызметін тоқтатып, ағынды түрлендіруді бастай аласыз.

Firebird қызметін тоқтатқанда, классикалық режимдегі Firebid 2.5 процестерін әдетте xinetd іске қосатынын есте сақтаңыз, сондықтан xinetd үшін firebird қызметін өшіру немесе xinetd қызметін толығымен тоқтату керек.

Linux жүйесіндегі 3.0 үшін firebird.conf ішінде MaxUnflushed параметрлерін орнатудың қажеті жоқ (олар тек Windows жүйесінде жұмыс істейді) және Firebird 2.5 параметрлерін өзгерту.

Linux жүйесінде Firebird 2.5 жергілікті (файлдық) қол жеткізу Windows жүйесіндегі ендірілген нұсқаға баламалы емес - 2.5 сервері gbak процесінде (желі бөлігісіз) жұмыс істейді, бірақ кіру құқығы пайдаланушы базасына қатысты тексеріледі, бұл дегеніміз логин ғана емес, сонымен қатар пароль қажет болады:

export ISC_USER=username ISC_PASSWORD=password
/opt/firebird/bin/gbak -b … база25 stdout
|/opt/fb3/bin/gbak -c … stdin база30

Сәтті түрлендіруден кейін алдымен «қосымша» Firebird 3.0, содан кейін «негізгі» Firebird 2.5 нұсқасын жою керек, содан кейін Firebird 2.5-ті таза орнатуды орындау керек - және бұл қарапайым tar.gz орнатушысынан жақсырақ. репозиторийлер, өйткені. репозиторийлердегі нұсқа артта қалуы мүмкін.

Сондай-ақ, Linux жүйесінде дерекқорды қалпына келтіріп, қайта орнатқаннан кейін жаңа дерекқор Firebird пайдаланушысына тиесілі екенін тексеру керек.

Егер бұлай болмаса, оны түзету қажет болады.

chown firebird.firebird database

Нәтиже

Уақыт пен дискілік кеңістікті үнемдеумен қатар, ағынды түрлендірудің тағы бір маңызды артықшылығы бар - дерекқорды түрлендіру бұрыннан бар Firebird 2.5 нұсқасын жоймай жүзеге асырылады, бұл сәтсіз түрлендіру жағдайында кері қайтаруды айтарлықтай жеңілдетеді (көбінесе орын болмауы немесе тасымалдау кезінде күтпеген қайта жүктеу салдарынан). процесс).

Уақытты үнемдеу «классикалық» түрлендірудің «сақтық көшірме уақыты» плюс «қалпына келтіру уақыты» болуына байланысты. Қалпына келтіру екі бөліктен тұрады: сақтық көшірме файлынан деректерді оқу және индексті құру.

Ағынды түрлендіру кезінде жалпы уақыт «сақтық көшірме уақыты плюс бес-он пайызға» және «индекс құру уақыты» ретінде алынады.

Арнайы нәтижелер дерекқордың құрылымына байланысты, бірақ орташа алғанда қалпына келтіру уақыты сақтық көшірме жасау уақытынан шамамен екі есе көп. Сондықтан, егер резервтік көшірме уақытын бірлік ретінде алсақ, онда «классикалық түрлендіру» - үш уақыт бірлігі, ағын - екі уақыт бірлігі. TempCacheLimit ұлғайту уақытты одан әрі қысқартуға көмектеседі.

Жалпы алғанда, ағынды түрлендіру тәжірибеде балама сақтық көшірме жасау және қалпына келтіру уақытының 30-40% үнемдеуге мүмкіндік береді.

Сұрақтар?

Барлық сұрақтарды түсініктемелерде жазыңыз немесе әдістеме авторы және осы мақаланың бірлескен авторы - Василий Сидоров, iBase жүйесінің жетекші инженері, bs at ibase ru.

Сауалнамаға тек тіркелген пайдаланушылар қатыса алады. Кіру, өтінемін.

Сіз Firebird қандай нұсқасын пайдаланасыз?

  • Firebird 3.x

  • Firebird 2.5

  • Firebird 2.1

  • Firebird 2.0, 1.5 немесе 1.0

16 қолданушы дауыс берді. 1 пайдаланушы қалыс қалды.

Ақпарат көзі: www.habr.com

пікір қалдыру