Il-metodu xjentifiku poke, jew kif tagħżel konfigurazzjoni tad-database bl-użu ta 'benchmarks u algoritmu ta' ottimizzazzjoni

Hello

Iddeċidejt li naqsam is-sejba tiegħi - frott tal-ħsieb, prova u żball.
B'mod ġenerali: din mhix sejba, ovvjament - dan kollu kellu jkun magħruf għal żmien twil, għal dawk li huma involuti fl-ipproċessar ta 'data statistika applikata u l-ottimizzazzjoni ta' kwalunkwe sistema, mhux neċessarjament speċifikament id-DBMS.
U: iva, jafu, jiktbu artikli interessanti dwar ir-riċerka tagħhom, eżempju (UPD.: fil-kummenti huma indikaw proġett interessanti ħafna: ottertune )
Min-naħa l-oħra: offhand ma nara l-ebda aċċenn jew tixrid mifrux ta 'dan l-approċċ fuq l-Internet fost speċjalisti tal-IT, DBA.

Allura, sal-punt.

Ejja nassumu li għandna kompitu: li nwaqqfu ċerta sistema ta 'servizz biex isservi xi tip ta' xogħol.

Huwa magħruf dwar dan ix-xogħol: x'inhu, kif titkejjel il-kwalità ta 'dan ix-xogħol, u x'inhu l-kriterju biex titkejjel din il-kwalità.

Ejja nassumu wkoll li huwa ftit jew wisq magħruf u mifhum: eżattament kif isir ix-xogħol f'din is-sistema ta' servizz (jew ma').

"Iktar jew inqas" - dan ifisser li huwa possibbli li titħejja (jew tikseb minn x'imkien) ċerta għodda, utilità, servizz li jista 'jiġi sintetizzat u applikat għas-sistema b'tagħbija tat-test adegwata biżżejjed għal dak li se jkun fil-produzzjoni, f'kondizzjonijiet adegwati biżżejjed biex jaħdmu fil-produzzjoni.

Ukoll, ejja nassumu li sett ta 'parametri ta' aġġustament għal din is-sistema ta 'servizz huwa magħruf, li jista' jintuża biex jiġi kkonfigurat din is-sistema f'termini tal-produttività tax-xogħol tagħha.

U x'inhi l-problema - m'hemmx fehim sħiħ biżżejjed ta 'din is-sistema ta' servizz, waħda li tippermettilek tikkonfigura b'mod espert is-settings ta 'din is-sistema għal tagħbija futura fuq pjattaforma partikolari u tikseb il-produttività meħtieġa tas-sistema.

Ukoll. Dan huwa kważi dejjem il-każ.

X'tista' tagħmel hawn?

Ukoll, l-ewwel ħaġa li tiġi f'moħħna hija li tħares lejn id-dokumentazzjoni għal din is-sistema. Ifhem x'inhuma l-firxiet aċċettabbli għall-valuri tal-parametri ta 'aġġustament. U, pereżempju, bl-użu tal-metodu ta 'inżul koordinat, agħżel valuri għall-parametri tas-sistema fit-testijiet.

Dawk. agħti lis-sistema xi tip ta 'konfigurazzjoni, fil-forma ta' sett speċifiku ta 'valuri għall-parametri ta' konfigurazzjoni tagħha.

Applika tagħbija tat-test għaliha, billi tuża dan il-ġeneratur tat-tagħbija ta' għodda ta' utilità.
U tħares lejn il-valur - ir-rispons, jew metrika tal-kwalità tas-sistema.

It-tieni ħsieb jista 'jkun il-konklużjoni li dan huwa żmien twil ħafna.

Ukoll, jiġifieri: jekk ikun hemm ħafna parametri ta 'l-issettjar, jekk il-firxiet tal-valuri tagħhom li qed jitmexxew huma kbar, jekk kull test ta' tagħbija individwali jieħu ħafna ħin biex jitlesta, allura: iva, dan kollu jista 'jieħu b'mod inaċċettabbli żmien twil.

Ukoll, hawn dak li tista 'tifhem u tiftakar.

Tista 'ssir taf li fis-sett ta' valuri tal-parametri tas-settings tas-sistema tas-servizz hemm vettur, bħala sekwenza ta 'xi valuri.

Kull vettur bħal dan, affarijiet oħra huma ugwali (sakemm mhuwiex affettwat minn dan il-vettur), jikkorrispondi għal valur kompletament definit tal-metrika - indikatur tal-kwalità tal-operat tas-sistema taħt tagħbija tat-test.

Jiġifieri

Ejja nindikaw il-vettur tal-konfigurazzjoni tas-sistema bħala Il-metodu xjentifiku poke, jew kif tagħżel konfigurazzjoni tad-database bl-użu ta 'benchmarks u algoritmu ta' ottimizzazzjonifejn Il-metodu xjentifiku poke, jew kif tagħżel konfigurazzjoni tad-database bl-użu ta 'benchmarks u algoritmu ta' ottimizzazzjoni; Fejn Il-metodu xjentifiku poke, jew kif tagħżel konfigurazzjoni tad-database bl-użu ta 'benchmarks u algoritmu ta' ottimizzazzjoni — numru ta' parametri ta' konfigurazzjoni tas-sistema, kemm hemm minn dawn il-parametri.

U l-valur tal-metrika li tikkorrispondi għal dan Il-metodu xjentifiku poke, jew kif tagħżel konfigurazzjoni tad-database bl-użu ta 'benchmarks u algoritmu ta' ottimizzazzjoni ejja nindikawh bħala
Il-metodu xjentifiku poke, jew kif tagħżel konfigurazzjoni tad-database bl-użu ta 'benchmarks u algoritmu ta' ottimizzazzjoni, allura jkollna funzjoni: Il-metodu xjentifiku poke, jew kif tagħżel konfigurazzjoni tad-database bl-użu ta 'benchmarks u algoritmu ta' ottimizzazzjoni

Ukoll, allura: kollox immedjatament niżel għal, fil-każ tiegħi: kważi minsija mill-ġranet tal-istudenti tiegħi, algoritmi għat-tiftix għall-extremum ta 'funzjoni.

Tajjeb, imma hawnhekk tqum mistoqsija organizzattiva u applikata: liema algoritmu tuża.

  1. Fis-sens - sabiex tkun tista' tikkodifika inqas bl-idejn.
  2. U biex taħdem, i.e. sabet l-extremum (jekk hemm wieħed), ukoll, mill-inqas aktar mgħaġġla minn dixxendenza koordinata.

L-ewwel punt jagħti ħjiel li rridu nħarsu lejn xi ambjenti li fihom algoritmi bħal dawn diġà ġew implimentati, u huma, f'xi forma, lesti għall-użu fil-kodiċi.
Ukoll, naf python и cran-r

It-tieni punt ifisser li għandek bżonn taqra dwar l-algoritmi nfushom, x'inhuma, x'inhuma r-rekwiżiti tagħhom, u l-karatteristiċi tax-xogħol tagħhom.

U dak li jagħtu jista 'jkun effetti sekondarji utli - riżultati, jew direttament mill-algoritmu innifsu.

Jew jistgħu jinkisbu mir-riżultati tal-algoritmu.

Ħafna jiddependi fuq il-kundizzjonijiet tal-input.

Per eżempju, jekk, għal xi raġuni, għandek bżonn tikseb riżultat aktar malajr, ukoll, għandek bżonn tħares lejn algoritmi ta 'inżul gradjent u tagħżel wieħed minnhom.

Jew, jekk iż-żmien ma jkunx daqshekk importanti, tista ', pereżempju, tuża metodi ta' ottimizzazzjoni stochastic, bħal algoritmu ġenetiku.

Nipproponi li nikkunsidra x-xogħol ta 'dan l-approċċ, billi tagħżel il-konfigurazzjoni tas-sistema, bl-użu ta' algoritmu ġenetiku, fil-li jmiss, biex ngħidu hekk: xogħol tal-laboratorju.

Oriġinali:

  1. Ħalli jkun hemm, bħala sistema ta' servizz: oracle xe 18c
  2. Ħalliha sservi l-attività transazzjonali u l-għan: li tikseb l-ogħla throughput possibbli tas-subdatabase, fi tranżazzjonijiet/sek.
  3. It-tranżazzjonijiet jistgħu jkunu differenti ħafna fin-natura tax-xogħol bid-dejta u l-kuntest tax-xogħol.
    Ejja naqblu li dawn huma tranżazzjonijiet li ma jipproċessawx ammont kbir ta 'dejta tabulari.
    Fis-sens li ma jiġġenerawx aktar dejta undo milli redo u ma jipproċessawx perċentwali kbar ta 'ringieli u tabelli kbar.

Dawn huma tranżazzjonijiet li jbiddlu ringiela waħda f'tabella xi ftit jew wisq kbira, b'numru żgħir ta' indiċi fuq din it-tabella.

F'din is-sitwazzjoni: il-produttività tas-subdatabase għall-ipproċessar tat-tranżazzjonijiet se, b'riżerva, tkun iddeterminata mill-kwalità tal-ipproċessar mid-database redox.

Ċaħda - jekk nitkellmu speċifikament dwar is-settings tas-subdb.

Minħabba li, fil-każ ġenerali, jista 'jkun hemm, pereżempju, serraturi transazzjonali bejn sessjonijiet SQL, minħabba d-disinn tax-xogħol tal-utent b'dejta tabulari u/jew il-mudell tabulari.

Li, ovvjament, se jkollu effett deprimenti fuq il-metrika TPS u dan se jkun fattur eżoġenu, relattiv għas-subdatabase: ukoll, dan huwa kif il-mudell tabulari kien iddisinjat u x-xogħol bid-dejta fiha li jseħħu l-imblukkar.

Għalhekk, għall-purità tal-esperiment, aħna se neskludu dan il-fattur, u hawn taħt ser niċċara eżattament kif.

  1. Ejja nassumu, għal definizzjoni, li 100% tal-kmandi SQL sottomessi għad-database huma kmandi DML.
    Ħalli l-karatteristiċi tax-xogħol tal-utent mas-subdatabase ikunu l-istess fit-testijiet.
    Jiġifieri: in-numru ta 'sessjonijiet skl, data tabulari, kif is-sessjonijiet skl jaħdmu magħhom.
  2. Subd jaħdem fi FORCE LOGGING, ARCHIVELOG mods. Il-modalità flashback-database hija mitfija, fil-livell subd.
  3. Redo logs: jinsabu f'sistema ta 'fajls separata, fuq "disk" separat;
    Il-bqija tal-komponent fiżiku tad-database: f'sistema oħra ta' fajls separata, fuq "disk" separat:

Aktar dettalji dwar l-apparat fiżiku. komponenti tad-database tal-laboratorju

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

Inizjalment, taħt dawn il-kundizzjonijiet tat-tagħbija, ridt nuża transazzjoni subd SLOB-utilità
Għandu karatteristika tant mill-isbaħ, ser nikkwota lill-awtur:

Fil-qalba ta’ SLOB hemm il-“metodu SLOB”. Il-Metodu SLOB għandu l-għan li jittestja pjattaformi
mingħajr kontestazzjoni ta’ applikazzjoni. Wieħed ma jistax isuq il-prestazzjoni massima tal-ħardwer
bl-użu tal-kodiċi tal-applikazzjoni li huwa, pereżempju, marbut b'illokkjar tal-applikazzjoni jew saħansitra
qsim ta' blokki ta' Database Oracle. Dak id-dritt—hemm overhead meta taqsam id-dejta
fi blokki tad-data! Iżda SLOB—fl-iskjerament awtomatiku tiegħu—huwa immuni għal tali allegazzjoni.

Din id-dikjarazzjoni: tikkorrispondi, hija.
Huwa konvenjenti li tirregola l-grad ta 'paralleliżmu tas-sessjonijiet cl, din hija ċ-ċavetta -t tniedi l-utilità runit.sh minn SLOB
Il-perċentwal ta 'kmandi DML huwa regolat, fin-numru ta' messaġġi li jintbagħtu lis-subd, kull sessjoni ta 'test, parametru UPDATE_PCT
Separatament u konvenjenti ħafna: SLOB innifsu, qabel u wara s-sessjoni tat-tagħbija - jipprepara statspack, jew awr-snapshots (dak li huwa stabbilit li jiġi ppreparat).

Madankollu, irriżulta li SLOB ma jappoġġjax sessjonijiet SQL b'tul ta 'inqas minn 30 sekonda.
Għalhekk, l-ewwel ikkodifikajt il-verżjoni tiegħi stess, ħaddiem-raħħala tal-loader, u mbagħad baqgħet taħdem.

Ħa niċċara x'jagħmel il-loader u kif jagħmel, għal ċarezza.
Essenzjalment il-loader jidher bħal dan:

Kodiċi tal-ħaddiem

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

Il-ħaddiema huma mnedija b'dan il-mod:

Ħaddiema running

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

U t-tabelli għall-ħaddiema huma ppreparati hekk:

Ħolqien ta' tabelli

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"

Dawk. Għal kull ħaddiem (prattikament: sessjoni SQL separata fid-DB) tinħoloq tabella separata, li magħha jaħdem il-ħaddiem.

Dan jiżgura n-nuqqas ta' serraturi transazzjonali bejn is-sessjonijiet tal-ħaddiema.
Kull ħaddiem: jagħmel l-istess ħaġa, bil-mejda tiegħu, l-imwejjed huma kollha l-istess.
Il-ħaddiema kollha jwettqu xogħol għall-istess ammont ta' ħin.
Barra minn hekk, għal żmien twil biżżejjed sabiex, pereżempju, swiċċ tal-ġurnal definittivament iseħħ, u aktar minn darba.
Ukoll, għalhekk, qamu spejjeż u effetti assoċjati.
Fil-każ tiegħi, kkonfigurajt it-tul tax-xogħol tal-ħaddiema fi 8 minuti.

Biċċa minn rapport statspack li tiddeskrivi l-operat tas-subd taħt tagħbija

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

Ritorn għax-xogħol tal-laboratorju.
Aħna, jekk affarijiet oħra jkunu ugwali, se nvarjaw il-valuri tal-parametri li ġejjin tas-subdatabase tal-laboratorju:

  1. Daqs tal-gruppi ta' log tad-database. firxa ta' valur: [32, 1024] MB;
  2. Numru ta' gruppi ta' ġurnali fid-database. firxa ta' valur: [2,32];
  3. log_archive_max_processes firxa ta' valur: [1,8];
  4. commit_logging żewġ valuri huma permessi: batch|immediate;
  5. commit_wait żewġ valuri huma permessi: wait|nowait;
  6. log_buffer firxa ta' valur: [2,128] MB.
  7. log_checkpoint_timeout firxa ta' valur: [60,1200] sekondi
  8. db_writer_processes firxa ta' valur: [1,4]
  9. undo_retention firxa ta' valur: [30;300] sekondi
  10. transactions_per_rollback_segment firxa ta' valur: [1,8]
  11. disk_asynch_io żewġ valuri huma permessi: true|false;
  12. filesystemio_options il-valuri li ġejjin huma permessi: none|setall|directIO|asynch;
  13. db_block_checking il-valuri li ġejjin huma permessi: OFF|LOW|MEDIUM|FULL;
  14. db_block_checksum il-valuri li ġejjin huma permessi: OFF|TYPICAL|FULL;

Persuna b'esperjenza fiż-żamma tad-databases Oracle tista' ċertament diġà tgħid liema u għal liema valuri għandhom jiġu stabbiliti, mill-parametri speċifikati u l-valuri aċċettabbli tagħhom, sabiex tikseb produttività akbar tad-database għax-xogħol b'data li hija indikata minn il-kodiċi tal-applikazzjoni, hawn fuq.

Imma.

Il-punt tax-xogħol tal-laboratorju huwa li juri li l-algoritmu ta 'ottimizzazzjoni innifsu se jiċċara dan għalina relattivament malajr.

Għalina, dak kollu li jibqa 'huwa li nħarsu lejn id-dokument, permezz tas-sistema customizable, biss biżżejjed biex issir taf liema parametri nibdlu u f'liema firxiet.
U wkoll: ikkodifika l-kodiċi li se jintuża biex jaħdem mas-sistema tad-dwana tal-algoritmu ta 'ottimizzazzjoni magħżul.

Allura, issa dwar il-kodiċi.
Tkellimt hawn fuq dwar cran-r, jiġifieri: il-manipulazzjonijiet kollha bis-sistema personalizzata huma orkestrati fil-forma ta 'skript R.

Il-kompitu attwali, l-analiżi, l-għażla bil-valur metriku, il-vettori tal-istat tas-sistema: dan huwa pakkett GA (dokumentazzjoni)
Il-pakkett, f'dan il-każ, mhuwiex adattat ħafna, fis-sens li jistenna li l-vettori (kromożomi, jekk f'termini tal-pakkett) jiġu speċifikati fil-forma ta 'spag ta' numri b'parti frazzjonali.

U l-vettur tiegħi, mill-valuri tal-parametri tal-issettjar: dawn huma 14-il kwantitajiet - interi u valuri ta 'sekwenza.

Il-problema, ovvjament, tiġi evitata faċilment billi jiġu assenjati xi numri speċifiċi għal valuri ta' string.

Għalhekk, fl-aħħar, il-biċċa ewlenija tal-iskrittura R tidher bħal din:

Ċempel 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

Hawnhekk, bl-għajnuna lower и upper attributi tas-subrutina ga essenzjalment, żona tal-ispazju tat-tfittxija hija speċifikata, li fiha ssir tfittxija għal tali vettur (jew vectors) li għalihom se jinkiseb il-valur massimu tal-funzjoni tal-fitness.

Is-subrutina ga twettaq tfittxija li timmassimizza l-funzjoni tal-fitness.

Ukoll, allura, jirriżulta li, f'dan il-każ, huwa meħtieġ li l-funzjoni tal-fitness, li tifhem il-vettur bħala sett ta 'valuri għal ċerti parametri tas-subd, tirċievi metrika mis-subd.

Jiġifieri: kemm, b'setup ta 'subd partikolari u tagħbija partikolari fuq is-subd: is-subd tipproċessa tranżazzjonijiet kull sekonda.

Jiġifieri, meta tiżvolġi, il-passi multipli li ġejjin għandhom jitwettqu ġewwa l-funzjoni tal-fitness:

  1. Ipproċessa l-vettur tad-dħul tan-numri - jikkonvertih f'valuri għall-parametri tas-subdata.
  2. Tentattiv biex jinħoloq numru partikolari ta' gruppi ta' redo ta' daqs partikolari. Barra minn hekk, l-attentat jista’ ma jirnexxix.
    Gruppi ta’ rivista li diġà kienu jeżistu fis-subd, f’xi kwantità u ta’ xi daqs, għall-purità tal-esperiment - d.b. imħassra.
  3. Jekk il-punt preċedenti jirnexxi: tispeċifika l-valuri tal-parametri tal-konfigurazzjoni fid-database (għal darb'oħra: jista 'jkun hemm falliment)
  4. Jekk il-pass preċedenti jirnexxi: twaqqaf is-subd, tibda s-subd sabiex il-valuri tal-parametri speċifikati ġodda jidħlu fis-seħħ. (għal darb'oħra: jista' jkun hemm xi glitch)
  5. Jekk il-pass preċedenti jirnexxi: wettaq test tat-tagħbija. tikseb metriċi minn subd.
  6. Irritorna s-subd għall-istat oriġinali tiegħu, i.e. ħassar gruppi ta 'log addizzjonali, erġa' lura l-konfigurazzjoni oriġinali tas-subdatabase biex taħdem.

Kodiċi tal-funzjoni tal-fitness

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)
}

Dik. ix-xogħol kollu: imwettaq fil-funzjoni tal-fitness.

Il-ga-subroutine tipproċessa vettori, jew, b'mod aktar korrett, kromożomi.
F'liema, dak li huwa l-aktar importanti għalina hija l-għażla ta 'kromożomi b'ġeni li għalihom il-funzjoni tal-fitness tipproduċi valuri kbar.

Dan, essenzjalment, huwa l-proċess ta 'tiftix għall-aħjar sett ta' kromożomi bl-użu ta 'vettur fi spazju ta' tfittxija N-dimensjonali.

Ċar ħafna, dettaljat spjegazzjoni, b'eżempji ta 'R-code, ix-xogħol ta' algoritmu ġenetiku.

Nixtieq ninnota separatament żewġ punti tekniċi.

Sejħiet awżiljarji mill-funzjoni evaluate, per eżempju, stop-start, l-issettjar tal-valur tal-parametru subd, huma mwettqa bbażati fuq cran-r funzjonijiet system2

Bl-għajnuna tiegħu: xi bash script jew kmand jissejjaħ.

Per eżempju:

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)
}
}

It-tieni punt huwa l-linja, evaluate funzjonijiet, bl-iffrankar ta’ valur metriku speċifiku u l-vettur tal-irfinar korrispondenti tiegħu għal fajl ta’ log:

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

Dan huwa importanti, għaliex minn din il-firxa tad-dejta, ikun possibbli li tinkiseb informazzjoni addizzjonali dwar liema mill-komponenti tal-vettur tal-irfinar għandu effett akbar jew inqas fuq il-valur metriku.

Jiġifieri: se jkun possibbli li titwettaq analiżi tal-attributi-importanza.

Allura x'jista' jiġri?

F'forma ta' graff, jekk tordna t-testijiet f'ordni metrika axxendenti, l-istampa hija kif ġej:

Il-metodu xjentifiku poke, jew kif tagħżel konfigurazzjoni tad-database bl-użu ta 'benchmarks u algoritmu ta' ottimizzazzjoni

Xi dejta li tikkorrispondi għall-valuri estremi tal-metrika:
Il-metodu xjentifiku poke, jew kif tagħżel konfigurazzjoni tad-database bl-użu ta 'benchmarks u algoritmu ta' ottimizzazzjoni
Hawnhekk, fil-screenshot bir-riżultati, ser niċċara: il-valuri tal-vettur tal-irfinar huma mogħtija f'termini tal-kodiċi tal-funzjoni tal-fitness, mhux f'termini tal-lista tan-numri tal-parametri/firxiet tal-valuri tal-parametri, li ġiet ifformulata hawn fuq fit-test.

Ukoll. Huwa ħafna jew ftit, ~ 8 elf tps: mistoqsija separata.
Fi ħdan il-qafas tax-xogħol tal-laboratorju, din il-figura mhix importanti, dak li huwa importanti huwa d-dinamika, kif jinbidel dan il-valur.

Id-dinamika hawnhekk hija tajba.
Huwa ovvju li mill-inqas fattur wieħed jinfluwenza b'mod sinifikanti l-valur tal-metrika, il-ga-algoritmu, issortjar permezz tal-vettori tal-kromożomi: kopert.
Meta wieħed jiġġudika mid-dinamika pjuttost qawwija tal-valuri tal-kurva, hemm mill-inqas fattur ieħor li, għalkemm iżgħar b'mod sinifikanti, għandu influwenza.

Dan huwa fejn għandek bżonnha attribute-importance analiżi biex tifhem liema attributi (ukoll, f'dan il-każ, komponenti tal-vettur tal-irfinar) u kemm jinfluwenzaw il-valur metriku.
U minn din l-informazzjoni: tifhem liema fatturi ġew affettwati minn bidliet fl-attributi sinifikanti.

Mexxi attribute-importance possibbli b'modi differenti.

Għal dawn l-iskopijiet, jogħġobni l-algoritmu randomForest Pakkett R tal-istess isem (dokumentazzjoni)
randomForest, kif nifhem ix-xogħol tiegħu b'mod ġenerali u l-approċċ tiegħu biex jivvaluta l-importanza tal-attributi b'mod partikolari, jibni ċertu mudell tad-dipendenza tal-varjabbli tar-rispons fuq l-attributi.

Fil-każ tagħna, il-varjabbli tar-rispons hija metrika miksuba mid-database fit-testijiet tat-tagħbija: tps;
U l-attributi huma komponenti tal-vettur tal-irfinar.

Mela hawn randomForest jevalwa l-importanza ta' kull attribut tal-mudell b'żewġ numri: %IncMSE — kif il-preżenza/assenza ta’ dan l-attribut f’mudell tibdel il-kwalità MSE ta’ dan il-mudell (Mean Squared Error);

U IncNodePurity huwa numru li jirrifletti kemm, ibbażat fuq il-valuri ta 'dan l-attribut, sett ta' dejta b'osservazzjonijiet jista 'jinqasam, sabiex f'parti waħda jkun hemm dejta b'valur wieħed tal-metrika li qed tiġi spjegata, u fl-oħra b' valur ieħor tal-metrika.
Ukoll, jiġifieri: sa liema punt dan huwa attribut ta 'klassifikazzjoni (rajt l-aktar spjegazzjoni ċara, bil-lingwa Russa fuq RandomForest hawn).

Kodiċi R tal-ħaddiem-raħħal għall-ipproċessar ta' sett ta' dejta bir-riżultati tat-testijiet tat-tagħbija:

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

Tista 'tagħżel direttament l-iperparametri tal-algoritmu b'idejk u, billi tiffoka fuq il-kwalità tal-mudell, tagħżel mudell li jissodisfa b'mod aktar preċiż it-tbassir fuq is-sett tad-dejta tal-validazzjoni.
Tista 'tikteb xi tip ta' funzjoni għal dan ix-xogħol (mill-mod, għal darb'oħra, billi tuża xi tip ta 'algoritmu ta' ottimizzazzjoni).

Tista 'tuża pakkett R caret, mhux il-punt huwa importanti.

Bħala riżultat, f'dan il-każ, jinkiseb ir-riżultat li ġej biex jiġi vvalutat il-grad ta 'importanza tal-attributi:

Il-metodu xjentifiku poke, jew kif tagħżel konfigurazzjoni tad-database bl-użu ta 'benchmarks u algoritmu ta' ottimizzazzjoni

Ukoll. Għalhekk, nistgħu nibdew riflessjoni globali:

  1. Jirriżulta li l-aktar sinifikanti, taħt dawn il-kundizzjonijiet tal-ittestjar, kien il-parametru commit_wait
    Teknikament, jispeċifika l-mod ta 'eżekuzzjoni tal-operazzjoni io tal-kitba ta' data redo mill-buffer tal-log subdb għall-grupp ta 'log attwali: sinkroniku jew mhux sinkroniku.
    Valur nowait li jirriżulta f'żieda kważi vertikali, multipla fil-valur tal-metrika tps: din hija l-inklużjoni tal-modalità io mhux sinkroniku fi gruppi redo.
    Mistoqsija separata hija jekk għandekx tagħmel dan jew le f'database tal-ikel. Hawnhekk nillimita ruħi biex ngħid biss: dan huwa fattur sinifikanti.
  2. Huwa loġiku li d-daqs tal-buffer tal-ġurnal tas-subd: jirriżulta li jkun fattur sinifikanti.
    Iktar ma jkun żgħir id-daqs tal-buffer tal-ġurnal, inqas il-kapaċità tal-buffering tiegħu, aktar spiss tfur u/jew l-inkapaċità li talloka żona ħielsa fiha għal porzjon ta 'dejta redox ġdida.
    Dan ifisser: dewmien assoċjat mal-allokazzjoni tal-ispazju fil-buffer tal-ġurnal u/jew id-dumping tad-data redo minnha fi gruppi redo.
    Dan id-dewmien, ovvjament, għandu u jaffettwa l-fluss tad-database għat-tranżazzjonijiet.
  3. Parametru db_block_checksum: ukoll, ukoll, b'mod ġenerali huwa ċar - l-ipproċessar tat-tranżazzjonijiet iwassal għall-formazzjoni ta 'blokki darty fil-cache tal-buffer tas-subdatabase.
    Li, meta l-iċċekkjar ta 'checksums ta' datablocks tkun attivata, id-database trid tipproċessa - tikkalkula dawn is-checksums mill-korp tad-datablock, iċċekkjahom b'dak li hemm miktub fl-header tal-datablock: taqbel/ma taqbilx.
    Xogħol bħal dan, għal darb'oħra, ma jistax ma jdewwem l-ipproċessar tad-dejta, u għalhekk, il-parametru u l-mekkaniżmu li jistabbilixxi dan il-parametru jirriżultaw li huma sinifikanti.
    Huwa għalhekk li l-bejjiegħ joffri, fid-dokumentazzjoni għal dan il-parametru, valuri differenti għalih (il-parametru) u jinnota li iva, se jkun hemm impatt, iżda, ukoll, tista 'tagħżel valuri differenti, sa "mitfi" u impatti differenti.

Ukoll, konklużjoni globali.

L-approċċ, b'mod ġenerali, jirriżulta li jaħdem pjuttost.

Huwa pjuttost jippermetti lilu nnifsu, fl-istadji bikrija tal-ittestjar tat-tagħbija ta 'ċerta sistema ta' servizz, sabiex jagħżel il-konfigurazzjoni ottimali tiegħu (sistema) għat-tagħbija, biex ma jidħolx wisq fl-ispeċifiċitajiet tat-twaqqif tas-sistema għat-tagħbija.

Iżda ma teskludihiex kompletament - għall-inqas fil-livell ta 'fehim: is-sistema trid tkun magħrufa dwar il-"pumi ta' aġġustament" u l-firxiet permissibbli ta 'rotazzjoni ta' dawn il-pumi.

L-approċċ jista 'mbagħad relattivament malajr isib l-aħjar konfigurazzjoni tas-sistema.
U abbażi tar-riżultati tal-ittestjar, huwa possibbli li tinkiseb informazzjoni dwar in-natura tar-relazzjoni bejn il-metriċi tal-prestazzjoni tas-sistema u l-valuri tal-parametri tal-issettjar tas-sistema.

Li, ovvjament, għandu jikkontribwixxi għall-ħolqien ta 'dan il-fehim profond ħafna tas-sistema, it-tħaddim tagħha, għall-inqas taħt tagħbija partikolari.

Fil-prattika, dan huwa skambju tal-ispejjeż tal-fehim tas-sistema personalizzata għall-ispejjeż tat-tħejjija ta' tali ttestjar tas-sistema.

Nixtieq ninnota separatament: f'dan l-approċċ, il-grad ta 'adegwatezza tal-ittestjar tas-sistema għall-kundizzjonijiet operattivi li se jkollu fl-operat kummerċjali huwa ta' importanza kritika.

Grazzi għall-attenzjoni u l-ħin tiegħek.

Sors: www.habr.com

Żid kumment