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,
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 fejn ; Fejn — numru ta' parametri ta' konfigurazzjoni tas-sistema, kemm hemm minn dawn il-parametri.
U l-valur tal-metrika li tikkorrispondi għal dan ejja nindikawh bħala
, allura jkollna funzjoni:
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.
- Fis-sens - sabiex tkun tista' tikkodifika inqas bl-idejn.
- 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:
- Ħalli jkun hemm, bħala sistema ta' servizz:
oracle xe 18c
- Ħalliha sservi l-attività transazzjonali u l-għan: li tikseb l-ogħla throughput possibbli tas-subdatabase, fi tranżazzjonijiet/sek.
- 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.
- 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. - Subd jaħdem fi
FORCE LOGGING
,ARCHIVELOG
mods. Il-modalità flashback-database hija mitfija, fil-livell subd. - 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
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:
- Daqs tal-gruppi ta' log tad-database. firxa ta' valur: [32, 1024] MB;
- Numru ta' gruppi ta' ġurnali fid-database. firxa ta' valur: [2,32];
log_archive_max_processes
firxa ta' valur: [1,8];commit_logging
żewġ valuri huma permessi:batch|immediate
;commit_wait
żewġ valuri huma permessi:wait|nowait
;log_buffer
firxa ta' valur: [2,128] MB.log_checkpoint_timeout
firxa ta' valur: [60,1200] sekondidb_writer_processes
firxa ta' valur: [1,4]undo_retention
firxa ta' valur: [30;300] sekonditransactions_per_rollback_segment
firxa ta' valur: [1,8]disk_asynch_io
żewġ valuri huma permessi:true|false
;filesystemio_options
il-valuri li ġejjin huma permessi:none|setall|directIO|asynch
;db_block_checking
il-valuri li ġejjin huma permessi:OFF|LOW|MEDIUM|FULL
;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
(
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:
- Ipproċessa l-vettur tad-dħul tan-numri - jikkonvertih f'valuri għall-parametri tas-subdata.
- 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. - 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)
- 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)
- Jekk il-pass preċedenti jirnexxi: wettaq test tat-tagħbija. tikseb metriċi minn subd.
- 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
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:
Xi dejta li tikkorrispondi għall-valuri estremi tal-metrika:
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 (
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
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:
Ukoll. Għalhekk, nistgħu nibdew riflessjoni globali:
- 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.
Valurnowait
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. - 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. - 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