Усули илмии поке, ё чӣ гуна интихоб кардани конфигуратсияи пойгоҳи додаҳо бо истифода аз нишондиҳандаҳо ва алгоритми оптимизатсия

салом

Ман тасмим гирифтам, ки бозёфти худро мубодила кунам - самараи фикр, озмоиш ва хато.
Умуман: ин бозёфт нест, албатта - ҳамаи ин бояд барои онҳое, ки дар коркарди омории оморӣ ва оптимизатсияи ҳама гуна системаҳо машғуланд, бояд муддати тӯлонӣ маълум бошанд, на ҳатман ба DBMS.
Ва: бале, онҳо медонанд, онҳо дар бораи тадқиқоти худ мақолаҳои ҷолиб менависанд, намуна (UPD.: дар шарҳҳо онҳо як лоиҳаи хеле ҷолибро қайд карданд: оттертун )
Аз тарафи дигар: ман ҳеҷ гуна ёдоварӣ ё паҳн кардани ин равишро дар Интернет дар байни мутахассисони IT, DBA намебинам.

Пас, ба нукта.

Фарз мекунем, ки дар назди мо вазифа меистад: системаи муайяни хиз-матрасониро барои хизматрасонй ба ягон намуди кор барпо кардан.

Дар бораи ин кор маълум аст: он чист, сифати ин кор чй тавр чен карда мешавад ва меъёри чен кардани ин сифат чист.

Биёед инчунин фарз кунем, ки он кам ё камтар маълум ва фаҳмо аст: маҳз чӣ гуна кор дар ин системаи хидматрасонӣ (ё бо) иҷро карда мешавад.

"Бештар ё камтар" - ин маънои онро дорад, ки асбоби муайян, хидматрасонӣ, хидматро омода кардан (ё онро аз ҷое гирифтан) имконпазир аст, ки мумкин аст синтез карда шавад ва ба система бо сарбории санҷишӣ ба таври кофӣ мувофиқ, ки дар истеҳсолот мавҷуд аст, дар шароите, ки барои кор дар истехсолот ба таври кофй мувофик аст.

Хуб, фарз кунем, ки маҷмӯи параметрҳои танзими ин системаи хидматрасонӣ маълум аст, ки онҳоро метавон барои танзими ин система аз рӯи ҳосилнокии кори худ истифода бурд.

Ва мушкил дар чист - фаҳмиши ба қадри кофӣ мукаммали ин системаи хидматрасонӣ вуҷуд надорад, ки ба шумо имкон медиҳад, ки танзимоти ин системаро барои бори оянда дар платформаи додашуда ботаҷриба танзим кунед ва ҳосилнокии зарурии системаро ба даст оред.

Хуб. Ин қариб ҳамеша чунин аст.

Шумо дар ин ҷо чӣ кор карда метавонед?

Хуб, аввалин чизе, ки ба ақл меояд, дидани ҳуҷҷатҳои ин система аст. Фаҳмед, ки диапазонҳои қобили қабул барои арзишҳои параметрҳои тасҳеҳ чӣ гунаанд. Ва, масалан, бо истифода аз усули фаромадани координатҳо, арзишҳоро барои параметрҳои система дар санҷишҳо интихоб кунед.

Онхое. ба система як навъ конфигуратсияро дар шакли маҷмӯи мушаххаси арзишҳо барои параметрҳои конфигуратсияи он диҳед.

Бо истифода аз ин асбоб-утилит, генератори сарборӣ бори санҷиширо ба он татбиқ кунед.
Ва ба арзиш нигоҳ кунед - посух ё метрикаи сифати система.

Андешаи дуюм шояд ин хулоса бошад, ки ин муддати хеле дароз аст.

Хуб, яъне: агар бисёр параметрҳои танзим вуҷуд дошта бошанд, агар диапазони арзишҳои иҷрошавандаи онҳо калон бошанд, агар ҳар як санҷиши инфиродӣ барои анҷом додани бор вақти зиёдро талаб кунад, пас: ҳа, ҳамаи ин метавонад ғайри қобили қабулро талаб кунад. муддати дароз.

Хуб, ин аст он чизе ки шумо метавонед дарк кунед ва дар хотир доред.

Шумо метавонед фаҳмед, ки дар маҷмӯи арзишҳои параметрҳои танзимоти системаи хидматрасонӣ вектор ҳамчун пайдарпаии баъзе арзишҳо мавҷуд аст.

Ҳар як чунин вектор, ки чизҳои дигар баробаранд (ба он вектор ба он таъсир намерасонад) ба арзиши комилан муайяни метрикӣ - нишондиҳандаи сифати кори система дар зери бори санҷиш мувофиқат мекунад.

яъне

Биёед вектори конфигуратсияи системаро ҳамчун Усули илмии поке, ё чӣ гуна интихоб кардани конфигуратсияи пойгоҳи додаҳо бо истифода аз нишондиҳандаҳо ва алгоритми оптимизатсияки дар Усули илмии поке, ё чӣ гуна интихоб кардани конфигуратсияи пойгоҳи додаҳо бо истифода аз нишондиҳандаҳо ва алгоритми оптимизатсия; Дар куҷо Усули илмии поке, ё чӣ гуна интихоб кардани конфигуратсияи пойгоҳи додаҳо бо истифода аз нишондиҳандаҳо ва алгоритми оптимизатсия — шумораи параметрҳои конфигуратсияи система, чандтои ин параметрҳо вуҷуд доранд.

Ва арзиши метри мувофиқ ба ин Усули илмии поке, ё чӣ гуна интихоб кардани конфигуратсияи пойгоҳи додаҳо бо истифода аз нишондиҳандаҳо ва алгоритми оптимизатсия онро хамчун ифода кунем
Усули илмии поке, ё чӣ гуна интихоб кардани конфигуратсияи пойгоҳи додаҳо бо истифода аз нишондиҳандаҳо ва алгоритми оптимизатсия, пас мо функсияро ба даст меорем: Усули илмии поке, ё чӣ гуна интихоб кардани конфигуратсияи пойгоҳи додаҳо бо истифода аз нишондиҳандаҳо ва алгоритми оптимизатсия

Хуб, пас: ҳама чиз фавран ба вуқӯъ мепайвандад, дар ҳолати ман: аз рӯзҳои донишҷӯии ман, алгоритмҳои ҷустуҷӯи экстремуми функсия қариб фаромӯш карда шудаанд.

Хуб, аммо дар ин ҷо як саволи ташкилӣ ва амалӣ ба миён меояд: кадом алгоритмро истифода бояд кард.

  1. Ба маънои - то ки шумо метавонед бо дасти камтар рамзгузорӣ кунед.
  2. Ва барои он ки кор кунад, яъне. экстремумро (агар вуҷуд дошта бошад) ёфт, хуб, ҳадди аққал аз фуромади координатӣ зудтар.

Нуқтаи аввал ишора мекунад, ки мо бояд ба баъзе муҳитҳое назар кунем, ки дар онҳо ин алгоритмҳо аллакай амалӣ шудаанд ва дар баъзе шаклҳо барои истифода дар код омодаанд.
Хуб, ман медонам python и cran-r

Нуқтаи дуюм маънои онро дорад, ки шумо бояд дар бораи худи алгоритмҳо хонед, онҳо чӣ гунаанд, талаботҳои онҳо, хусусиятҳои кори онҳо.

Ва он чизе, ки онҳо медиҳанд, метавонанд таъсири тарафҳои муфид бошанд - натиҷаҳо ё бевосита аз худи алгоритм.

Ё онҳоро аз натиҷаи алгоритм ба даст овардан мумкин аст.

Бисёр чиз аз шароити вуруд вобаста аст.

Масалан, агар бо ягон сабаб, ба шумо лозим аст, ки натиҷаро зудтар ба даст оред, шумо бояд ба алгоритмҳои пастшавии градиент назар кунед ва яке аз онҳоро интихоб кунед.

Ё, агар вақт он қадар муҳим набошад, шумо метавонед, масалан, усулҳои оптимизатсияи стохастикӣ, ба монанди алгоритми генетикиро истифода баред.

Ман пешниҳод мекунам, ки кори ин равиш, интихоби конфигуратсияи система, бо истифода аз алгоритми генетикӣ, дар навбати худ, ба ибораи дигар: кори лабораторӣ баррасӣ карда шавад.

Аслӣ:

  1. Бигзор ҳамчун системаи хидматрасонӣ вуҷуд дошта бошад: oracle xe 18c
  2. Бигзор он ба фаъолияти транзаксионӣ ва ҳадаф хидмат кунад: ба даст овардани қобилияти баландтарини имконпазири зермаълумотҳо дар транзаксияҳо / сония.
  3. Муомилаҳо метавонанд аз рӯи хусусияти кор бо маълумот ва контексти кор хеле гуногун бошанд.
    Биёед розӣ шавем, ки ин амалиётҳое мебошанд, ки миқдори зиёди маълумоти ҷадвалиро коркард намекунанд.
    Ба ин маъно, ки онҳо нисбат ба такрори маълумот бештар бекор карда намешаванд ва фоизи зиёди сатрҳо ва ҷадвалҳои калонро коркард намекунанд.

Ин амалиётҳое мебошанд, ки як сатрро дар ҷадвали кам ё калон бо шумораи ками индексҳо дар ин ҷадвал иваз мекунанд.

Дар ин вазъият: маҳсулнокии зермаълумотҳо барои коркарди транзаксияҳо, бо қайд, бо сифати коркард аз ҷониби махзани редокс муайян карда мешавад.

Радди масъулият - агар мо махсусан дар бораи танзимоти subdb сӯҳбат кунем.

Зеро, дар сурати умумӣ, масалан, дар байни сеансҳои SQL, бинобар тарҳрезии кори корбар бо маълумоти ҷадвал ва/ё модели ҷадвал, қуфлҳои транзаксионӣ вуҷуд доранд.

Ин, албатта, ба метрикаи TPS таъсири рӯҳафтода хоҳад кард ва ин як омили экзогенӣ нисбат ба зермаълумот хоҳад буд: хуб, ин аст, ки модели ҷадвалӣ тарҳрезӣ шудааст ва кор бо маълумот дар он, ки басташавӣ ба амал меояд.

Аз ин рӯ, барои тозагии таҷриба, мо ин омилро истисно мекунем ва дар зер ман аниқ мегӯям, ки чӣ тавр.

  1. Барои дақиқ фарз кунем, ки 100% фармонҳои SQL, ки ба пойгоҳи додаҳо фиристода мешаванд, фармонҳои DML мебошанд.
    Бигзор хусусиятҳои кори корбар бо зермаълумотҳо дар санҷишҳо якхела бошанд.
    Махз: шумораи сессияҳои skl, маълумоти ҷадвалӣ, чӣ гуна сессияҳои skl бо онҳо кор мекунанд.
  2. Subd дар FORCE LOGGING, ARCHIVELOG mods. Ҳолати Flashback-базаи маълумот дар сатҳи зер хомӯш карда шудааст.
  3. Гузоришҳоро такрор кунед: дар системаи файлии алоҳида, дар "диски" алоҳида ҷойгир аст;
    Қисми боқимондаи ҷузъи физикии пойгоҳи додаҳо: дар дигар, системаи файлии алоҳида, дар "диски" алоҳида:

Тафсилоти бештар дар бораи дастгоҳи ҷисмонӣ. ҷузъҳои базаи лабораторӣ

SQL> select status||' '||name from v$controlfile;
 /db/u14/oradata/XE/control01.ctl
SQL> select GROUP#||' '||MEMBER from v$logfile;
1 /db/u02/oradata/XE/redo01_01.log
2 /db/u02/oradata/XE/redo02_01.log
SQL> select FILE_ID||' '||TABLESPACE_NAME||' '||round(BYTES/1024/1024,2)||' '||FILE_NAME as col from dba_data_files;
4 UNDOTBS1 2208 /db/u14/oradata/XE/undotbs1_01.dbf
2 SLOB 128 /db/u14/oradata/XE/slob01.dbf
7 USERS 5 /db/u14/oradata/XE/users01.dbf
1 SYSTEM 860 /db/u14/oradata/XE/system01.dbf
3 SYSAUX 550 /db/u14/oradata/XE/sysaux01.dbf
5 MONITOR 128 /db/u14/oradata/XE/monitor.dbf
SQL> !cat /proc/mounts | egrep "/db/u[0-2]"
/dev/vda1 /db/u14 ext4 rw,noatime,nodiratime,data=ordered 0 0
/dev/mapper/vgsys-ora_redo /db/u02 xfs rw,noatime,nodiratime,attr2,nobarrier,inode64,logbsize=256k,noquota 0 0

Дар аввал, дар ин шароити сарборӣ, ман мехостам, ки транзаксия subd -ро истифода барам Барномаи SLOB
Он дорои чунин хусусияти аҷиб аст, ман аз муаллиф иқтибос меорам:

Дар маркази SLOB усули "SLOB" аст. Усули SLOB барои санҷиши платформаҳо нигаронида шудааст
бе баҳси ариза. Кас наметавонад иҷрои ҳадди аксар сахтафзорро идора кунад
бо истифода аз рамзи барнома, ки масалан, бо бастани барнома ё ҳатто бастагӣ дорад
мубодилаи блокҳои Oracle Database. Ин дуруст аст - ҳангоми мубодилаи маълумот сарборӣ вуҷуд дорад
дар блокҳои додаҳо! Аммо SLOB - ҳангоми ҷойгиркунии пешфарз - аз чунин баҳс эмин аст.

Ин эъломия: мувофиқат мекунад, он аст.
Барои танзими дараҷаи параллелизми сессияҳои cl қулай аст, ин калид аст -t утилитаро оғоз кунед runit.sh аз SLOB
Фоизи фармонҳои DML дар шумораи паёмҳои матние, ки ба subd фиристода мешаванд, ҳар як сессияи матнӣ, параметр танзим карда мешавад. UPDATE_PCT
Алоҳида ва хеле қулай: SLOB худ, пеш аз ва баъд аз сеанси сарборӣ - омода statspack, ё awr-snapshots (он чи барои омода карда мешавад).

Бо вуҷуди ин, маълум шуд SLOB сессияҳои SQL-ро бо давомнокии камтар аз 30 сония дастгирӣ намекунад.
Аз ин ру, ман ав-вал боркунаки шахсии худ, коргару дехконро код додам ва баъд он дар кор монд.

Биёед ман дар бораи боркунак фаҳмонам - он чӣ ва чӣ тавр мекунад, барои равшанӣ.
Аслан боркунак чунин менамояд:

Рамзи коргар

function dotx()
{
local v_period="$2"
[ -z "v_period" ] && v_period="0"
source "/home/oracle/testingredotracе/config.conf"

$ORACLE_HOME/bin/sqlplus -S system/${v_system_pwd} << __EOF__
whenever sqlerror exit failure
set verify off
set echo off
set feedback off

define wnum="$1"
define period="$v_period"
set appinfo worker_&&wnum

declare
 v_upto number;
 v_key  number;
 v_tots number;
 v_cts  number;
begin
 select max(col1) into v_upto from system.testtab_&&wnum;
 SELECT (( SYSDATE - DATE '1970-01-01' ) * 86400 ) into v_cts FROM DUAL;
 v_tots := &&period + v_cts;
 while v_cts <= v_tots
 loop
  v_key:=abs(mod(dbms_random.random,v_upto));
  if v_key=0 then
   v_key:=1;
  end if;
  update system.testtab_&&wnum t
  set t.object_name=translate(dbms_random.string('a', 120), 'abcXYZ', '158249')
  where t.col1=v_key
  ;
  commit;
  SELECT (( SYSDATE - DATE '1970-01-01' ) * 86400 ) into v_cts FROM DUAL;
 end loop;
end;
/

exit
__EOF__
}
export -f dotx

Коргарон ин тавр ба кор андохта мешаванд:

Коргарони коркунанда

echo "starting test, duration: ${TEST_DURATION}" >> "$v_logfile"
for((i=1;i<="$SQLSESS_COUNT";i++))
do
 echo "sql-session: ${i}" >> "$v_logfile"
 dotx "$i" "${TEST_DURATION}" &
done
echo "waiting..." >> "$v_logfile"
wait

Ва ҷадвалҳо барои коргарон чунин тартиб дода мешаванд:

Эҷоди ҷадвалҳо

function createtable() {
source "/home/oracle/testingredotracе/config.conf"
$ORACLE_HOME/bin/sqlplus -S system/${v_system_pwd} << __EOF__
whenever sqlerror continue
set verify off
set echo off
set feedback off

define wnum="$1"
define ts_name="slob"

begin
 execute immediate 'drop table system.testtab_&&wnum';
exception when others then null;
end;
/

create table system.testtab_&&wnum tablespace &&ts_name as
select rownum as col1, t.*
from sys.dba_objects t
where rownum<1000
;
create index testtab_&&wnum._idx on system.testtab_&&wnum (col1);
--alter table system.testtab_&&wnum nologging;
--alter index system.testtab_&&wnum._idx nologging;
exit
__EOF__
}
export -f createtable

seq 1 1 "$SQLSESS_COUNT" | xargs -n 1 -P 4 -I {} -t bash -c "createtable "{}"" | tee -a "$v_logfile"
echo "createtable done" >> "$v_logfile"

Онхое. Барои хар як коргар (амалан: сеанси алохидаи SQL дар МБ) чадвали алохида сохта мешавад, ки бо он коргар кор мекунад.

Ин мавҷуд набудани қулфҳои транзаксияро дар байни ҷаласаҳои коргар таъмин мекунад.
Хар як коргар: як хел кор мекунад, бо столи худаш, мизхо хама як хел.
Хамаи коргарон як хел вакт кор мекунанд.
Гузашта аз ин, барои муддати кофӣ дароз, то ки, масалан, як гузариш гузориш бешубҳа рух медиҳад, ва зиёда аз як маротиба.
Хуб, мутаносибан, хароҷот ва таъсироти алоқаманд ба миён омаданд.
Дар ҳолати ман, ман давомнокии кори коргаронро дар 8 дақиқа танзим кардам.

Як пораи гузориши statspack, ки кори зерборро дар зери сарборӣ тавсиф мекунад

Database    DB Id    Instance     Inst Num  Startup Time   Release     RAC
~~~~~~~~ ----------- ------------ -------- --------------- ----------- ---
          2929910313 XE                  1 07-Sep-20 23:12 18.0.0.0.0  NO

Host Name             Platform                CPUs Cores Sockets   Memory (G)
~~~~ ---------------- ---------------------- ----- ----- ------- ------------
     billing.izhevsk1 Linux x86 64-bit           2     2       1         15.6

Snapshot       Snap Id     Snap Time      Sessions Curs/Sess Comment
~~~~~~~~    ---------- ------------------ -------- --------- ------------------
Begin Snap:       1630 07-Sep-20 23:12:27       55        .7
  End Snap:       1631 07-Sep-20 23:20:29       62        .6
   Elapsed:       8.03 (mins) Av Act Sess:       8.4
   DB time:      67.31 (mins)      DB CPU:      15.01 (mins)

Cache Sizes            Begin        End
~~~~~~~~~~~       ---------- ----------
    Buffer Cache:     1,392M              Std Block Size:         8K
     Shared Pool:       288M                  Log Buffer:   103,424K

Load Profile              Per Second    Per Transaction    Per Exec    Per Call
~~~~~~~~~~~~      ------------------  ----------------- ----------- -----------
      DB time(s):                8.4                0.0        0.00        0.20
       DB CPU(s):                1.9                0.0        0.00        0.04
       Redo size:        7,685,765.6              978.4
   Logical reads:           60,447.0                7.7
   Block changes:           47,167.3                6.0
  Physical reads:                8.3                0.0
 Physical writes:              253.4                0.0
      User calls:               42.6                0.0
          Parses:               23.2                0.0
     Hard parses:                1.2                0.0
W/A MB processed:                1.0                0.0
          Logons:                0.5                0.0
        Executes:           15,756.5                2.0
       Rollbacks:                0.0                0.0
    Transactions:            7,855.1

Бозгашт ба кори лабораторӣ.
Мо, агар чизҳои дигар баробар бошанд, арзишҳои параметрҳои зерини зермаълумоти лабораторияро тағир медиҳем:

  1. Андозаи гурӯҳҳои гузориши пойгоҳи додаҳо. диапазони арзиш: [32, 1024] MB;
  2. Шумораи гурӯҳҳои журналҳо дар базаи маълумот. диапазони арзиш: [2,32];
  3. log_archive_max_processes диапазони арзиш: [1,8];
  4. commit_logging ду арзиш иҷозат дода мешавад: batch|immediate;
  5. commit_wait ду арзиш иҷозат дода мешавад: wait|nowait;
  6. log_buffer доираи арзиши: [2,128] MB.
  7. log_checkpoint_timeout диапазони арзиш: [60,1200] сония
  8. db_writer_processes диапазони арзиш: [1,4]
  9. undo_retention диапазони арзиш: [30;300] сония
  10. transactions_per_rollback_segment диапазони арзиш: [1,8]
  11. disk_asynch_io ду арзиш иҷозат дода мешавад: true|false;
  12. filesystemio_options арзишҳои зерин иҷозат дода мешаванд: none|setall|directIO|asynch;
  13. db_block_checking арзишҳои зерин иҷозат дода мешаванд: OFF|LOW|MEDIUM|FULL;
  14. db_block_checksum арзишҳои зерин иҷозат дода мешаванд: OFF|TYPICAL|FULL;

Шахсе, ки дар нигоҳдории пойгоҳи додаҳои Oracle таҷриба дорад, бешубҳа метавонад бигӯяд, ки аз параметрҳои муайяншуда ва арзишҳои қобили қабули онҳо чӣ ва ба кадом арзишҳо муқаррар карда шаванд, то маҳсулнокии бештари махзани маълумот барои кор бо маълумоте, ки дар он нишон дода шудааст, ба даст оранд. рамзи барнома, дар ин ҷо дар боло.

Аммо.

Ҳадафи кори лабораторӣ нишон додани он аст, ки худи алгоритми оптимизатсия инро барои мо нисбатан зуд равшан мекунад.

Барои мо танҳо дидани ҳуҷҷат тавассути системаи танзимшаванда танҳо кофӣ аст, то бидонед, ки кадом параметрҳоро тағир додан лозим аст ва дар кадом диапазон.
Ва инчунин: рамзеро, ки барои кор бо системаи фармоишии алгоритми оптимизатсияи интихобшуда истифода мешавад, рамзгузорӣ кунед.

Пас, ҳоло дар бораи код.
Дар боло гуфтам cran-r, яъне: ҳама амалҳо бо системаи фармоишӣ дар шакли скрипти R ташкил карда мешаванд.

Вазифаи воқеӣ, таҳлил, интихоб аз рӯи арзиши метрикӣ, векторҳои ҳолати система: ин баста аст GA (ҳуҷҷатҳо)
Маҷмӯа, дар ин ҳолат, он қадар мувофиқ нест, ба он маъно, ки вай интизор аст, ки векторҳо (хромосомаҳо, агар дар бастаҳо) дар шакли сатри рақамҳо бо қисми касрӣ муайян карда шаванд.

Ва вектори ман, аз арзишҳои параметрҳои танзим: инҳо 14 миқдор - ададҳои бутун ва сатр мебошанд.

Мушкилот, албатта, тавассути таъин кардани баъзе рақамҳои мушаххас ба арзишҳои сатр ба осонӣ пешгирӣ карда мешавад.

Ҳамин тариқ, дар ниҳоят, қисми асосии скрипти R чунин менамояд:

Ба GA::ga занг занед

cat( "", file=v_logfile, sep="n", append=F)

pSize = 10
elitism_value=1
pmutation_coef=0.8
pcrossover_coef=0.1
iterations=50

gam=GA::ga(type="real-valued", fitness=evaluate,
lower=c(32,2, 1,1,1,2,60,1,30,1,0,0, 0,0), upper=c(1024,32, 8,10,10,128,800,4,300,8,10,40, 40,30),
popSize=pSize,
pcrossover = pcrossover_coef,
pmutation = pmutation_coef,
maxiter=iterations,
run=4,
keepBest=T)
cat( "GA-session is done" , file=v_logfile, sep="n", append=T)
gam@solution

Ана, бо ёрии lower и upper атрибутҳои зерпрограмма ga аслан, майдони фазои ҷустуҷӯ муайян карда мешавад, ки дар доираи он ҷустуҷӯ барои чунин вектор (ё векторҳо), ки барои онҳо арзиши максималии функсияи фитнес ба даст оварда мешавад, анҷом дода мешавад.

Зерпрограммаи ga ҷустуҷӯеро анҷом медиҳад, ки функсияи фитнесро ба ҳадди аксар мерасонад.

Хуб, пас, маълум мешавад, ки дар ин ҳолат, зарур аст, ки функсияи фитнес, ки векторро ҳамчун маҷмӯи арзишҳо барои параметрҳои муайяни зерфаъолият дарк карда, аз зерсохтор метрика гирад.

Яъне: чанд нафар, бо танзими додашуда ва сарбории додашуда дар зер: subd транзаксияҳоро дар як сония коркард мекунад.

Яъне, ҳангоми кушодан, дар дохили функсияи фитнес қадамҳои зерин бояд иҷро карда шаванд:

  1. Коркарди вектори вуруди рақамҳо - табдил додани он ба арзишҳо барои параметрҳои зермаълумот.
  2. Кӯшиши эҷоди шумораи муайяни гурӯҳҳои такрории андозаи додашуда. Гузашта аз ин, кӯшиш метавонад бебарор бошад.
    Гуруххои журналие, ки аллакай дар субд мавчуд буданд, ба микдори муайян ва ба андозаи муайян барои тозагии тачриба - д.б. нест карда шуд.
  3. Агар нуқтаи қаблӣ муваффақ бошад: муайян кардани арзишҳои параметрҳои конфигуратсия дар пойгоҳи додаҳо (боз: метавонад ноком бошад)
  4. Агар қадами қаблӣ бомуваффақият бошад: қатъ кардани subd, оғоз кардани subd, то ки арзишҳои параметрҳои навтаъсис эътибор пайдо кунанд. (боз: шояд хато бошад)
  5. Агар қадами қаблӣ муваффақ бошад: санҷиши сарборӣ кунед. метрикаро аз subd гиред.
  6. Subd-ро ба ҳолати аввалааш баргардонед, яъне. нест кардани гурӯҳҳои иловагии гузориш, баргардонидани конфигуратсияи аслии зермаълумот ба кор.

Рамзи функсияи фитнес

evaluate=function(p_par) {
v_module="evaluate"
v_metric=0
opn=NULL
opn$rg_size=round(p_par[1],digit=0)
opn$rg_count=round(p_par[2],digit=0)
opn$log_archive_max_processes=round(p_par[3],digit=0)
opn$commit_logging="BATCH"
if ( round(p_par[4],digit=0) > 5 ) {
 opn$commit_logging="IMMEDIATE"
}
opn$commit_logging=paste("'", opn$commit_logging, "'",sep="")

opn$commit_wait="WAIT"
if ( round(p_par[5],digit=0) > 5 ) {
 opn$commit_wait="NOWAIT"
}
opn$commit_wait=paste("'", opn$commit_wait, "'",sep="")

opn$log_buffer=paste(round(p_par[6],digit=0),"m",sep="")
opn$log_checkpoint_timeout=round(p_par[7],digit=0)
opn$db_writer_processes=round(p_par[8],digit=0)
opn$undo_retention=round(p_par[9],digit=0)
opn$transactions_per_rollback_segment=round(p_par[10],digit=0)
opn$disk_asynch_io="true"
if ( round(p_par[11],digit=0) > 5 ) {
 opn$disk_asynch_io="false"
} 

opn$filesystemio_options="none"
if ( round(p_par[12],digit=0) > 10 && round(p_par[12],digit=0) <= 20 ) {
 opn$filesystemio_options="setall"
}
if ( round(p_par[12],digit=0) > 20 && round(p_par[12],digit=0) <= 30 ) {
 opn$filesystemio_options="directIO"
}
if ( round(p_par[12],digit=0) > 30 ) {
 opn$filesystemio_options="asynch"
}

opn$db_block_checking="OFF"
if ( round(p_par[13],digit=0) > 10 && round(p_par[13],digit=0) <= 20 ) {
 opn$db_block_checking="LOW"
}
if ( round(p_par[13],digit=0) > 20 && round(p_par[13],digit=0) <= 30 ) {
 opn$db_block_checking="MEDIUM"
}
if ( round(p_par[13],digit=0) > 30 ) {
 opn$db_block_checking="FULL"
}

opn$db_block_checksum="OFF"
if ( round(p_par[14],digit=0) > 10 && round(p_par[14],digit=0) <= 20 ) {
 opn$db_block_checksum="TYPICAL"
}
if ( round(p_par[14],digit=0) > 20 ) {
 opn$db_block_checksum="FULL"
}

v_vector=paste(round(p_par[1],digit=0),round(p_par[2],digit=0),round(p_par[3],digit=0),round(p_par[4],digit=0),round(p_par[5],digit=0),round(p_par[6],digit=0),round(p_par[7],digit=0),round(p_par[8],digit=0),round(p_par[9],digit=0),round(p_par[10],digit=0),round(p_par[11],digit=0),round(p_par[12],digit=0),round(p_par[13],digit=0),round(p_par[14],digit=0),sep=";")
cat( paste(v_module," try to evaluate vector: ", v_vector,sep="") , file=v_logfile, sep="n", append=T)

rc=make_additional_rgroups(opn)
if ( rc!=0 ) {
 cat( paste(v_module,"make_additional_rgroups failed",sep="") , file=v_logfile, sep="n", append=T)
 return (0)
}

v_rc=0
rc=set_db_parameter("log_archive_max_processes", opn$log_archive_max_processes)
if ( rc != 0 ) {  v_rc=1 }
rc=set_db_parameter("commit_logging", opn$commit_logging )
if ( rc != 0 ) {  v_rc=1 }
rc=set_db_parameter("commit_wait", opn$commit_wait )
if ( rc != 0 ) {  v_rc=1 }
rc=set_db_parameter("log_buffer", opn$log_buffer )
if ( rc != 0 ) {  v_rc=1 }
rc=set_db_parameter("log_checkpoint_timeout", opn$log_checkpoint_timeout )
if ( rc != 0 ) {  v_rc=1 }
rc=set_db_parameter("db_writer_processes", opn$db_writer_processes )
if ( rc != 0 ) {  v_rc=1 }
rc=set_db_parameter("undo_retention", opn$undo_retention )
if ( rc != 0 ) {  v_rc=1 }
rc=set_db_parameter("transactions_per_rollback_segment", opn$transactions_per_rollback_segment )
if ( rc != 0 ) {  v_rc=1 }
rc=set_db_parameter("disk_asynch_io", opn$disk_asynch_io )
if ( rc != 0 ) {  v_rc=1 }
rc=set_db_parameter("filesystemio_options", opn$filesystemio_options )
if ( rc != 0 ) {  v_rc=1 }
rc=set_db_parameter("db_block_checking", opn$db_block_checking )
if ( rc != 0 ) {  v_rc=1 }
rc=set_db_parameter("db_block_checksum", opn$db_block_checksum )
if ( rc != 0 ) {  v_rc=1 }

if ( rc!=0 ) {
 cat( paste(v_module," can not startup db with that vector of settings",sep="") , file=v_logfile, sep="n", append=T)
 rc=stop_db("immediate")
 rc=create_spfile()
 rc=start_db("")
 rc=remove_additional_rgroups(opn)
 return (0)
}

rc=stop_db("immediate")
rc=start_db("")
if ( rc!=0 ) {
 cat( paste(v_module," can not startup db with that vector of settings",sep="") , file=v_logfile, sep="n", append=T)
 rc=stop_db("abort")
 rc=create_spfile()
 rc=start_db("")
 rc=remove_additional_rgroups(opn)
 return (0)
}

rc=run_test()
v_metric=getmetric()

rc=stop_db("immediate")
rc=create_spfile()
rc=start_db("")
rc=remove_additional_rgroups(opn)

cat( paste("result: ",v_metric," ",v_vector,sep="") , file=v_logfile, sep="n", append=T)
return (v_metric)
}

ки. тамоми кор: дар вазифаи фитнес ичро карда мешавад.

Га-зеброутин векторҳо, ё дурусттараш, хромосомаҳоро коркард мекунад.
Дар он чизе, ки барои мо аз ҳама муҳим аст, интихоби хромосомаҳо бо генҳост, ки барои онҳо функсияи фитнес арзишҳои калон тавлид мекунад.

Ин аслан раванди ҷустуҷӯи маҷмӯи оптималии хромосомаҳо бо истифода аз вектор дар фазои ҷустуҷӯии N-ченака мебошад.

Хеле равшан, муфассал шарҳ, бо мисолҳои рамзи R, кори як алгоритми генетикӣ.

Ду нуктаи техникиро алохида кайд кардан мехохам.

Зангҳои ёрирасон аз функсия evaluate, масалан, қатъ-оғоз, муқаррар кардани арзиши параметри subd, дар асоси иҷро карда мешавад cran-r вазифахо system2

Бо ёрии он: ягон скрипти bash ё фармон даъват карда мешавад.

Масалан:

set_db_parameter

set_db_parameter=function(p1, p2) {
v_module="set_db_parameter"
v_cmd="/home/oracle/testingredotracе/set_db_parameter.sh"
v_args=paste(p1," ",p2,sep="")

x=system2(v_cmd, args=v_args, stdout=T, stderr=T, wait=T)
if ( length(attributes(x)) > 0 ) {
 cat(paste(v_module," failed with: ",attributes(x)$status," ",v_cmd," ",v_args,sep=""), file=v_logfile, sep="n", append=T)
 return (attributes(x)$status)
}
else {
 cat(paste(v_module," ok: ",v_cmd," ",v_args,sep=""), file=v_logfile, sep="n", append=T)
 return (0)
}
}

Нуқтаи дуюм хат аст, evaluate функсияҳо бо захира кардани арзиши мушаххаси метрикӣ ва вектори танзими мувофиқи он ба файли журнал:

cat( paste("result: ",v_metric," ",v_vector,sep="") , file=v_logfile, sep="n", append=T)

Ин муњим аст, зеро аз ин массиви маълумот маълумоти иловаги гирифтан мумкин аст, ки кадоме аз љузъњои вектори танзимкунанда ба арзиши метрї таъсири бештар ё камтар дорад.

Яъне: таҳлили атрибутӣ-муҳимият имконпазир мегардад.

Пас, чӣ рӯй дода метавонад?

Дар шакли график, агар шумо санҷишҳоро бо тартиби афзоиши метрӣ фармоиш диҳед, расм чунин аст:

Усули илмии поке, ё чӣ гуна интихоб кардани конфигуратсияи пойгоҳи додаҳо бо истифода аз нишондиҳандаҳо ва алгоритми оптимизатсия

Баъзе маълумотҳое, ки ба арзишҳои шадиди метрикӣ мувофиқанд:
Усули илмии поке, ё чӣ гуна интихоб кардани конфигуратсияи пойгоҳи додаҳо бо истифода аз нишондиҳандаҳо ва алгоритми оптимизатсия
Дар ин ҷо, дар скриншот бо натиҷаҳо, ман равшанӣ медиҳам: арзишҳои вектори танзимкунӣ аз рӯи коди функсияи фитнес дода мешаванд, на аз рӯи рӯйхати рақами параметрҳо / диапазони арзишҳои параметр, ки таҳия шудааст дар болои матн.

Хуб. Ин бисёр аст ё кам, ~ 8 ҳазор tps: саволи алоҳида.
Дар доираи корҳои лабораторӣ ин рақам муҳим нест, муҳим он аст, ки динамика, чӣ гуна ин арзиш тағйир меёбад.

Динамика дар ин ҷо хуб аст.
Маълум аст, ки акаллан як омил ба арзиши метрика, га-алгоритм, ки аз руи векторхои хромосома чудо карда мешавад, ба таври чиддй таъсир мерасонад: фаро гирифта шудааст.
Бо назардошти динамикаи хеле пурқуввати арзишҳои каҷ, ҳадди аққал як омили дигар вуҷуд дорад, ки гарчанде ки хеле хурдтар аст, таъсир мерасонад.

Ин ҷоест, ки ба шумо лозим аст attribute-importance таҳлил барои фаҳмидани кадом атрибутҳо (хуб, дар ин ҳолат, ҷузъҳои вектори танзим) ва то чӣ андоза онҳо ба арзиши метрикӣ таъсир мерасонанд.
Ва аз ин маълумот: бифаҳмед, ки ба кадом омилҳо тағирот дар атрибутҳои муҳим таъсир расониданд.

Иҷро кунед attribute-importance бо роҳҳои гуногун имконпазир аст.

Барои ин мақсадҳо ман алгоритмро дӯст медорам randomForest бастаи R бо ҳамон ном (ҳуҷҷатҳо)
randomForest, чунон ки ман дар маҷмӯъ кори ӯ ва муносибати ӯ ба арзёбии аҳамияти хосиятҳоро мефаҳмам, модели муайяни вобастагии тағирёбандаи ҷавобро аз сифатҳо месозад.

Дар ҳолати мо, тағирёбандаи посух як метрикаест, ки аз пойгоҳи додаҳо дар санҷишҳои сарборӣ гирифта шудааст: tps;
Ва атрибутҳо ҷузъҳои вектори танзим мебошанд.

Ҳамин тавр randomForest аҳамияти ҳар як хусусияти моделро бо ду рақам арзёбӣ мекунад: %IncMSE — чӣ гуна мавҷудият/набудани ин атрибут дар модел сифати MSE-и ин моделро тағйир медиҳад (Хатои квадратии миёна);

Ва IncNodePurity рақамест, ки дар асоси арзишҳои ин аттрибутӣ то чӣ андоза хуб нишон медиҳад, ки маҷмӯи додаҳо бо мушоҳидаҳо тақсим карда шаванд, то дар як қисм маълумот бо як арзиши метрика шарҳ дода шавад ва дар қисми дигар бо арзиши дигари метрика.
Хуб, ин аст: то чӣ андоза ин хусусияти таснифкунанда аст (ман шарҳи равшантарин ва русзабониро дар RandomForest дидам. дар ин ҷо).

Р-коди коргару деҳқон барои коркарди маҷмӯаи маълумот бо натиҷаҳои санҷишҳои сарборӣ:

x=NULL
v_data_file=paste('/tmp/data1.dat',sep="")
x=read.table(v_data_file, header = TRUE, sep = ";", dec=",", quote = ""'", stringsAsFactors=FALSE)
colnames(x)=c('metric','rgsize','rgcount','lamp','cmtl','cmtw','lgbffr','lct','dbwrp','undo_retention','tprs','disk_async_io','filesystemio_options','db_block_checking','db_block_checksum')

idxTrain=sample(nrow(x),as.integer(nrow(x)*0.7))
idxNotTrain=which(! 1:nrow(x) %in% idxTrain )
TrainDS=x[idxTrain,]
ValidateDS=x[idxNotTrain,]

library(randomForest)
#mtry=as.integer( sqrt(dim(x)[2]-1) )
rf=randomForest(metric ~ ., data=TrainDS, ntree=40, mtry=3, replace=T, nodesize=2, importance=T, do.trace=10, localImp=F)
ValidateDS$predicted=predict(rf, newdata=ValidateDS[,colnames(ValidateDS)!="metric"], type="response")
sum((ValidateDS$metric-ValidateDS$predicted)^2)
rf$importance

Шумо метавонед мустақиман гиперпараметрҳои алгоритмро бо дастони худ интихоб кунед ва бо таваҷҷӯҳ ба сифати модел моделеро интихоб кунед, ки пешгӯиҳо дар маҷмӯаи додаҳои санҷишро дақиқтар иҷро кунад.
Шумо метавонед як навъ функсияро барои ин кор нависед (дар омади гап, бо истифода аз як алгоритми оптимизатсия).

Шумо метавонед бастаи R-ро истифода баред caret, на нукта муҳим аст.

Дар натиҷа, дар ин ҳолат, барои арзёбии дараҷаи аҳамияти хосиятҳо натиҷаи зерин ба даст оварда мешавад:

Усули илмии поке, ё чӣ гуна интихоб кардани конфигуратсияи пойгоҳи додаҳо бо истифода аз нишондиҳандаҳо ва алгоритми оптимизатсия

Хуб. Ҳамин тариқ, мо метавонем инъикоси глобалиро оғоз кунем:

  1. Маълум мешавад, ки аз ҳама муҳимтарин дар ин шароити санҷиш параметр буд commit_wait
    Аз ҷиҳати техникӣ, он режими иҷрои амалиёти io навиштани маълумоти такрориро аз буфери сабти subdb ба гурӯҳи сабти ҷорӣ муайян мекунад: синхронӣ ё асинхронӣ.
    арзиши nowait ки боиси тақрибан амудӣ ва чандинкаратаи қимати метрикаи tps мегардад: ин дохил кардани режими асинхронии io ба гурӯҳҳои такрорӣ мебошад.
    Саволи алоҳида ин аст, ки оё шумо бояд ин корро дар пойгоҳи додаҳои ғизо иҷро кунед ё не. Дар ин ҷо ман худамро танҳо бо гуфтан маҳдуд мекунам: ин омили муҳим аст.
  2. Мантиқан он аст, ки андозаи буфери журнали subd: омили муҳим мегардад.
    Чӣ қадаре ки андозаи буфери журнал хурд бошад, иқтидори буферии он ҳамон қадар камтар мешавад, ҳамон қадар зиёд пур мешавад ва/ё имконнопазирии ҷудо кардани майдони озод дар он барои як қисми маълумоти нави редокс.
    Ин маънои онро дорад: таъхирҳое, ки бо ҷудо кардани ҷой дар буфери сабт ва/ё партофтани маълумоти такрорӣ аз он ба гурӯҳҳои такрорӣ алоқаманданд.
    Ин таъхирҳо, албатта, бояд ба интиқоли пойгоҳи додаҳо барои транзаксияҳо таъсир расонанд.
  3. Параметр db_block_checksum: хуб, инчунин, дар маҷмӯъ равшан аст - коркарди транзаксия боиси ташаккули блокҳои дарти дар кэши буферии зермаълумотҳо мегардад.
    Ки ҳангоми санҷиши маблағҳои санҷиши блокҳои додаҳо фаъол аст, базаи маълумот бояд коркард кунад - ин маблағҳоро аз бадани блоки додаҳо ҳисоб кунед, онҳоро бо он чизе, ки дар сарлавҳаи блоки додаҳо навишта шудааст, тафтиш кунед: мувофиқат мекунад/мувофиқ нест.
    Чунин кор боз коркарди маълумотро кашол дода наметавонад ва аз ин рӯ, параметр ва механизме, ки ин параметрро муқаррар мекунад, назаррас мешаванд.
    Аз ин рӯ, фурӯшанда дар ҳуҷҷатҳои ин параметр арзишҳои гуногунро барои он (параметр) пешниҳод мекунад ва қайд мекунад, ки ҳа, таъсир хоҳад дошт, аммо, шумо метавонед арзишҳои гуногунро интихоб кунед, то "хомӯш" ва таъсироти гуногун.

Хуб, як хулосаи ҷаҳонӣ.

Муносибат, умуман, хеле коркунанда ба назар мерасад.

Вай ба худ имкон медиҳад, ки дар марҳилаҳои аввали санҷиши сарбории системаи муайяни хидматрасонӣ, то конфигуратсияи (система) оптималии онро барои сарборӣ интихоб кунад, на ба мушаххасоти насб кардани система барои сарборӣ.

Аммо он онро комилан истисно намекунад - ҳадди аққал дар сатҳи фаҳмиш: система бояд дар бораи "тугмаҳои танзим" ва диапазони иҷозатдодаи гардиши ин тугмаҳо маълум бошад.

Он гоҳ равиш метавонад конфигуратсияи оптималии системаро нисбатан зуд пайдо кунад.
Ва дар асоси натиҷаҳои санҷиш метавон дар бораи хусусияти муносибати байни ченакҳои сифат ва арзишҳои параметрҳои конфигуратсияи система маълумот гирифтан мумкин аст.

Ин, албатта, бояд ба пайдоиши ин фаҳмиши хеле амиқи система, фаъолияти он, ҳадди аққал дар зери бори додашуда мусоидат кунад.

Дар амал, ин мубодилаи хароҷот барои фаҳмидани системаи фармоишӣ барои хароҷоти омода кардани чунин санҷиши система мебошад.

Мехоҳам алоҳида қайд намоям: дар ин равиш, дараҷаи мутобиқати санҷиши система ба шароити корӣ, ки он дар амалиёти тиҷоратӣ хоҳад дошт, хеле муҳим аст.

Ташаккур барои таваҷҷӯҳ ва вақтатон.

Манбаъ: will.com

Илова Эзоҳ