An modh poke eolaíoch, nó conas cumraíocht bunachar sonraí a roghnú ag baint úsáide as tagarmharcanna agus algartam leas iomlán a bhaint

Dia duit

Chinn mé mo chuid torthaí a roinnt - torthaí machnaimh, trialach agus earráide.
Tríd is tríd: ní aimsiú é seo, ar ndóigh - ba cheart go mbeadh sé seo ar fad ar eolas le fada an lá, dóibh siúd a bhfuil baint acu le próiseáil feidhmeach sonraí staidrimh agus le leas iomlán a bhaint as aon chórais, ní gá go sonrach an DBMS.
Agus: tá, tá a fhios acu, scríobhann siad ailt shuimiúla ar a gcuid taighde, mar shampla (UPD.: sna tuairimí chuir siad tionscadal an-suimiúil in iúl: dobharchú )
Ar an láimh eile: as láimh a chéile ní fheicim aon tagairt ná scaipeadh forleathan ar an gcur chuige seo ar an Idirlíon i measc speisialtóirí TF, DBA.

Mar sin, go dtí an pointe.

Glacaimid leis go bhfuil tasc againn: córas seirbhíse áirithe a bhunú chun obair de shaghas éigin a sheirbhísiú.

Tá sé ar eolas faoin obair seo: cad é atá ann, conas a dhéantar cáilíocht na hoibre seo a thomhas, agus cad é an critéar chun an cháilíocht seo a thomhas.

Glacaimid leis freisin go bhfuil sé níos mó nó níos lú ar eolas agus intuigthe: go díreach conas a dhéantar obair sa chóras seirbhíse seo (nó leis).

“Níos mó nó níos lú” - ciallaíonn sé seo gur féidir uirlis, fóntais, seirbhís áirithe a ullmhú (nó a fháil ó áit éigin) ar féidir iad a shintéisiú agus a chur i bhfeidhm ar an gcóras le hualach tástála atá leordhóthanach go leor don mhéid a bheidh i dtáirgeadh, faoi ​​dhálaí atá leordhóthanach go leor chun oibriú i dtáirgeadh .

Bhuel, déanaimis glacadh leis go bhfuil sraith paraiméadair choigeartaithe ar eolas don chóras seirbhíse seo, ar féidir a úsáid chun an córas seo a chumrú i dtéarmaí táirgiúlachta a chuid oibre.

Agus cad é an fhadhb - níl tuiscint iomlán go leor ar an gcóras seirbhíse seo, ceann a ligeann duit socruithe an chórais seo a chumrú le haghaidh ualach sa todhchaí ar ardán áirithe agus an táirgiúlacht riachtanach don chóras a fháil.

Bhuel. Tá sé seo beagnach i gcónaí an cás.

Cad is féidir leat a dhéanamh anseo?

Bhuel, is é an chéad rud a thagann chun cuimhne ná breathnú ar na doiciméid don chóras seo. A thuiscint cad iad na raonta inghlactha do luachanna na bparaiméadar coigeartaithe. Agus, mar shampla, ag baint úsáide as an modh shliocht comhordanáidí, roghnaigh luachanna do pharaiméadair an chórais i dtástálacha.

Iad siúd. tabhair cineál éigin cumraíochta don chóras, i bhfoirm sraith luachanna ar leith dá pharaiméadair chumraíochta.

Cuir ualach tástála i bhfeidhm air, ag baint úsáide as an gineadóir ualaigh an-uirlis seo.
Agus féach ar an luach - an freagra, nó méadrach de cháilíocht an chórais.

B’fhéidir gurb é an dara smaoineamh an chonclúid gur tréimhse an-fhada é seo.

Bhuel, is é sin: má tá go leor paraiméadair socraithe, má tá raonta a luachanna atá á reáchtáil mór, má thógann gach tástáil ualaigh aonair go leor ama le cur i gcrích, ansin: tá, d'fhéadfadh sé seo go léir a ghlacadh go neamh-inghlactha. tamall fada.

Bhuel, seo an méid is féidir leat a thuiscint agus a mheabhrú.

Is féidir leat a fháil amach go bhfuil veicteoir i sraith luachanna na paraiméadair socruithe an chórais seirbhíse, mar sheicheamh roinnt luachanna.

Freagraíonn gach veicteoir den sórt sin, agus rudaí eile ar cóimhéid (sa mhéid is nach ndéanann an veicteoir seo difear dó), do luach iomlán cinnte an mhéadrach - táscaire ar cháilíocht oibriú an chórais faoi ualach tástála.

Ie

Léirímid veicteoir cumraíochta an chórais mar An modh poke eolaíoch, nó conas cumraíocht bunachar sonraí a roghnú ag baint úsáide as tagarmharcanna agus algartam leas iomlán a bhaintI gcás ina An modh poke eolaíoch, nó conas cumraíocht bunachar sonraí a roghnú ag baint úsáide as tagarmharcanna agus algartam leas iomlán a bhaint; Cá An modh poke eolaíoch, nó conas cumraíocht bunachar sonraí a roghnú ag baint úsáide as tagarmharcanna agus algartam leas iomlán a bhaint — líon na bparaiméadar cumraíochta córais, cé mhéad de na paraiméadair atá ann.

Agus luach an mhéadrach a fhreagraíonn dó seo An modh poke eolaíoch, nó conas cumraíocht bunachar sonraí a roghnú ag baint úsáide as tagarmharcanna agus algartam leas iomlán a bhaint cuirimis in iúl é mar
An modh poke eolaíoch, nó conas cumraíocht bunachar sonraí a roghnú ag baint úsáide as tagarmharcanna agus algartam leas iomlán a bhaint, ansin faigheann muid feidhm: An modh poke eolaíoch, nó conas cumraíocht bunachar sonraí a roghnú ag baint úsáide as tagarmharcanna agus algartam leas iomlán a bhaint

Bhuel, mar sin: tagann gach rud síos láithreach, i mo chás: beagnach dearmadta ó mo laethanta mac léinn, halgartaim chun cuardach a dhéanamh ar fhoirceann feidhme.

Ceart go leor, ach tagann ceist eagrúcháin agus fheidhmeach chun cinn anseo: cén algartam is cóir a úsáid.

  1. Sa chiall - ionas gur féidir leat cód níos lú de láimh.
  2. Agus chun go n-oibreoidh sé, i.e. fuair an extremum (má tá ceann), go maith, ar a laghad níos tapúla ná chomhordú shliocht.

Tugann an chéad phointe le tuiscint go gcaithfimid féachaint i dtreo roinnt timpeallachtaí ina bhfuil algartaim den sórt sin curtha i bhfeidhm cheana féin, agus go bhfuil siad, i bhfoirm éigin, réidh le húsáid i gcód.
Bhuel, tá a fhios agam python и cran-r

Ciallaíonn an dara pointe go gcaithfidh tú léamh faoi na halgartaim iad féin, cad iad, cad iad na riachtanais atá acu, agus gnéithe a gcuid oibre.

Agus is féidir leis an méid a thugann siad a bheith ina fo-iarsmaí úsáideacha - torthaí, nó go díreach ón algartam féin.

Nó is féidir iad a fháil ó thorthaí an algartam.

Braitheann go leor ar na coinníollacha ionchuir.

Mar shampla, más rud é, ar chúis éigin, go gcaithfidh tú toradh a fháil níos tapúla, go maith, ní mór duit breathnú i dtreo halgartaim shliocht grádáin agus ceann acu a roghnú.

Nó, mura bhfuil an t-am chomh tábhachtach, is féidir leat, mar shampla, modhanna leas iomlán a bhaint stochastic a úsáid, mar algartam géiniteach.

Molann mé breithniú a dhéanamh ar obair an chur chuige seo, ag roghnú cumraíocht an chórais, ag baint úsáide as algartam géiniteach, sa chéad cheann eile, mar a déarfá: obair saotharlainne.

Bunaidh:

  1. Bíodh, mar chóras seirbhíse: oracle xe 18c
  2. Lig dó freastal ar ghníomhaíocht idirbheartaíochta agus ar an sprioc: an tréchur is airde agus is féidir den fho-bhunachar sonraí a fháil, in idirbhearta/soic.
  3. Is féidir le hidirbhearta a bheith an-difriúil sa nádúr a bhaineann le bheith ag obair le sonraí agus i gcomhthéacs na hoibre.
    Aontaímid gur idirbhearta iad seo nach bpróiseálann cuid mhór sonraí táblaí.
    Sa chiall nach ngineann siad níos mó sonraí cealaithe ná mar a athdhéantar agus nach bpróiseálann siad céatadáin mhóra sraitheanna agus táblaí móra.

Is idirbhearta iad seo a athraíonn sraith amháin i dtábla mór níos mó nó níos lú, le líon beag innéacsanna ar an tábla seo.

Sa chás seo: cinnfear táirgiúlacht an fho-bhunachar sonraí le haghaidh idirbheart próiseála, le forchoimeádas, ag cáilíocht na próiseála de réir bhunachar sonraí redox.

Séanadh - má labhraímid go sonrach faoi na socruithe subdb.

Toisc, go ginearálta, d’fhéadfadh go mbeadh, mar shampla, glais idirbheartaíochta idir seisiúin SQL, mar gheall ar dhearadh obair úsáideora le sonraí táblaí agus/nó leis an tsamhail táblach.

A mbeidh, ar ndóigh, tionchar dubhach ar an méadrach TPS agus beidh sé seo ina fhachtóir exogenous, i gcoibhneas leis an bhfo-bhunachar sonraí: go maith, seo mar a dearadh an tsamhail táblaí agus an obair le sonraí ann go dtarlaíonn blocálacha.

Dá bhrí sin, le haghaidh íonachta an turgnaimh, déanfaimid an fachtóir seo a eisiamh, agus thíos soiléireoidh mé go díreach conas.

  1. Glacaimid leis, go cinnte, gur orduithe DML iad 100% de na horduithe SQL a chuirtear isteach sa bhunachar sonraí.
    Bíodh tréithe obair na n-úsáideoirí leis an bhfo-bhunachar sonraí mar an gcéanna i dtástálacha.
    Eadhon: líon na seisiún skl, sonraí táblaí, conas a oibríonn seisiúin skl leo.
  2. Oibríonn Subd i FORCE LOGGING, ARCHIVELOG mods. Tá mód an bhunachair shonraí flashback múchta, ag an leibhéal subd.
  3. Logs athdhéan: suite i gcóras comhaid ar leith, ar “diosca” ar leith;
    An chuid eile den chomhpháirt fhisiciúil den bhunachar sonraí: i gcóras comhaid ar leith eile, ar “diosca” ar leith:

Tuilleadh sonraí faoin bhfeiste fisiceach. comhpháirteanna bunachar sonraí saotharlainne

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

Ar dtús, faoi na coinníollacha ualaigh seo, bhí mé ag iarraidh subd idirbheart a úsáid SLOB-fóntais
Tá gné chomh iontach aige, luafaidh mé an t-údar:

Ag croílár SLOB tá an “modh SLOB.” Tá sé mar aidhm ag Modh SLOB ardáin a thástáil
gan argóint iarratais. Ní féidir uasfheidhmíocht crua-earraí a thiomáint
ag baint úsáide as cód iarratais atá, mar shampla, faoi cheangal ag glasáil feidhmchlár nó fiú
ag roinnt bloic Bunachar Sonraí Oracle. Sin ceart - tá forchostais ann nuair a bhíonn sonraí á roinnt
i mbloic sonraí! Ach tá SLOB - ina imscaradh réamhshocraithe - díolmhaithe ó chonspóid den sórt sin.

An dearbhú seo: Freagraíonn, tá sé.
Tá sé áisiúil méid comhthreomhar na seisiún cl a rialáil, is é seo an eochair -t seoladh an fóntais runit.sh ó SLOB
Rialaítear céatadán na n-orduithe DML, i líon na dteachtaireachtaí téacs a sheoltar chuig an subd, gach seisiún téacs, paraiméadar UPDATE_PCT
Ar leithligh agus an-áisiúil: SLOB é féin, roimh agus tar éis an tseisiúin ualaigh - ullmhaíonn sé statspack, nó aistí grianghraif (cad atá le bheith ullmhaithe).

Mar sin féin, d'éirigh sé amach go SLOB ní thacaíonn sé le seisiúin SQL ar feadh tréimhse níos lú ná 30 soicind.
Dá bhrí sin, códaigh mé mo leagan féin, oibrithe-tuathánach den lódóir ar dtús, agus ansin d'fhan sé i bhfeidhm.

Lig dom a shoiléiriú cad a dhéanann an lódóir agus conas a dhéanann sé é, ar mhaithe le soiléireacht.
Go bunúsach tá cuma mar seo ar an lódóir:

Cóid oibrithe

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

Seoltar oibrithe ar an mbealach seo:

Oibrithe reatha

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

Agus ullmhaítear táblaí d’oibrithe mar seo:

Ag cruthú táblaí

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"

Iad siúd. Do gach oibrí (go praiticiúil: seisiún SQL ar leith sa DB) cruthaítear tábla ar leith, lena n-oibríonn an t-oibrí.

Cinntíonn sé seo nach bhfuil glais idirbheartaíochta idir seisiúin oibrithe.
Gach oibrí: a dhéanann an rud céanna, lena tábla féin, tá na táblaí go léir mar an gcéanna.
Déanann gach oibrí obair ar feadh an méid céanna ama.
Thairis sin, ar feadh i bhfad go leor ionas go mbeidh, mar shampla, lasc log tarlú cinnte, agus níos mó ná uair amháin.
Bhuel, dá réir sin, tháinig costais agus éifeachtaí gaolmhara chun cinn.
I mo chás, chumraigh mé fad oibre na n-oibrithe ag 8 nóiméad.

Píosa de thuarascáil statspack ag cur síos ar oibriú an fhodhroma faoi ualach

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

Ag filleadh ar an obair saotharlainne.
Athróimid, agus rudaí eile comhionann, luachanna na bparaiméadar seo a leanas de bhunachar sonraí na saotharlainne:

  1. Méid na ngrúpaí loga bunachar sonraí. raon luach: [32, 1024] MB;
  2. Líon na ngrúpaí irisleabhair sa bhunachar sonraí. raon luacha: [2,32];
  3. log_archive_max_processes raon luacha: [1,8];
  4. commit_logging ceadaítear dhá luach: batch|immediate;
  5. commit_wait ceadaítear dhá luach: wait|nowait;
  6. log_buffer raon luacha: [2,128] MB.
  7. log_checkpoint_timeout raon luacha: [60,1200] soicind
  8. db_writer_processes raon luachanna: [1,4]
  9. undo_retention raon luach: [30; 300] soicind
  10. transactions_per_rollback_segment raon luachanna: [1,8]
  11. disk_asynch_io ceadaítear dhá luach: true|false;
  12. filesystemio_options ceadaítear na luachanna seo a leanas: none|setall|directIO|asynch;
  13. db_block_checking ceadaítear na luachanna seo a leanas: OFF|LOW|MEDIUM|FULL;
  14. db_block_checksum ceadaítear na luachanna seo a leanas: OFF|TYPICAL|FULL;

Is féidir le duine a bhfuil taithí aige ar bhunachair shonraí Oracle a chothabháil a rá go cinnte cheana féin cad é agus cad iad na luachanna ba cheart a shocrú, ó na paraiméadair shonraithe agus a luachanna inghlactha, d'fhonn táirgiúlacht níos mó a fháil sa bhunachar sonraí don obair le sonraí atá léirithe ag an cód iarratais , anseo thuas.

Ach.

Is é pointe na hoibre saotharlainne a thaispeáint go soiléireoidh an algartam barrfheabhsaithe é seo dúinn sách tapa.

Maidir linne, níl le déanamh ach féachaint isteach sa doiciméad, tríd an gcóras inoiriúnaithe, díreach go leor chun a fháil amach cad iad na paraiméadair atá le hathrú agus cad iad na raonta.
Agus freisin: cód an cód a úsáidfear chun oibriú le córas saincheaptha an algartam optamaithe roghnaithe.

Mar sin, anois mar gheall ar an gcód.
Labhair mé thuas faoi cran-r, i.e.: is i bhfoirm script R a ordaítear gach ionramháil leis an gcóras saincheaptha.

An tasc iarbhír, anailís, roghnú de réir luach méadrach, veicteoirí stáit an chórais: is pacáiste é seo GA (an doiciméadú)
Níl an pacáiste, sa chás seo, an-oiriúnach, sa chiall go bhfuil sé ag súil le veicteoirí (crómasóim, más rud é i dtéarmaí an phacáiste) a shonrú i bhfoirm teaghráin uimhreacha le cuid codánach.

Agus mo veicteoir, ó luachanna na paraiméadair a leagan síos: is iad seo 14 cainníocht - slánuimhreacha agus luachanna teaghrán.

Is furasta an fhadhb, ar ndóigh, a sheachaint trí roinnt uimhreacha sonracha a shannadh do luachanna teaghrán.

Mar sin, sa deireadh, is mar seo a bhíonn an príomhphíosa den script R:

Glaoigh ar 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

Anseo, le cabhair lower и upper tréithe fo-riachtanas ga go bunúsach, sonraítear achar den spás cuardaigh, ar laistigh di a dhéanfar cuardach ar veicteoir (nó veicteoirí) den sórt sin a bhfaighfear uasluach na feidhme folláine ina leith.

Déanann an fo-riachtanas ga cuardach a uasmhéadaíonn an fheidhm aclaíochta.

Bhuel, mar sin, sa chás seo, tá sé riachtanach go bhfaighidh an fheidhm folláine, ag tuiscint an veicteoir mar shraith luachanna do pharaiméadair áirithe den subd, méadrach ón subd.

Is é sin: cé mhéad, le socrú subd tugtha agus ualach tugtha ar an subd: próiseálann an subd idirbhearta in aghaidh an tsoicind.

Is é sin, nuair a bhíonn sé gan fillte, ní mór an ilchéim seo a leanas a dhéanamh laistigh den fheidhm aclaíochta:

  1. Veicteoir ionchuir na n-uimhreacha a phróiseáil - é a thiontú ina luachanna do pharaiméadair na bhfoshonraí.
  2. Iarracht ar líon áirithe grúpaí athdhéanta de mhéid áirithe a chruthú. Ina theannta sin, d’fhéadfadh nár éirigh leis an iarracht.
    Grúpaí irisleabhair a bhí ann cheana féin sa subd, i gcainníocht éigin agus de mhéid áirithe, le haghaidh íonachta an turgnaimh - d.b. scriosta.
  3. Má éiríonn leis an bpointe roimhe seo: luachanna na bparaiméadar cumraíochta a shonrú don bhunachar sonraí (arís: d'fhéadfadh teip a bheith ann)
  4. Má éiríonn leis an gcéim roimhe seo: stop a chur leis an subd, ag tosú an subd ionas go mbeidh na luachanna paraiméadar nua-shonraithe i bhfeidhm. (arís: seans go bhfuil glitch ann)
  5. Má éiríonn leis an gcéim roimhe seo: déan tástáil ualaigh. méadracht a fháil ó subd.
  6. Fill ar ais go dtí a staid bhunaidh, i.e. scrios grúpaí logála breise, cuir cumraíocht an bhunbhunachar sonraí ar ais ag obair.

Cód le haghaidh aclaíochta

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

Sin. gach obair: a dhéantar sa fheidhm aclaíochta.

Próiseálann an ga-fhoroutine veicteoirí, nó, níos cruinne, crómasóim.
Ina bhfuil, is é an rud is tábhachtaí dúinn ná crómasóim a roghnú le géinte as a dtáirgeann an fheidhm aclaíochta luachanna móra.

Is é seo, go bunúsach, an próiseas chun an tacar crómasóm is fearr a chuardach ag baint úsáide as veicteoir i spás cuardaigh N-tríthoiseach.

An-soiléir, mionsonraithe míniú, le samplaí de R-cód, obair algartam géiniteach.

Ba mhaith liom dhá phointe theicniúla a thabhairt faoi deara ar leithligh.

Glaonna cúnta ón bhfeidhm evaluate, mar shampla, stop-tús, ag socrú an luach an paraiméadar subd, a dhéantar bunaithe ar cran-r feidhmeanna system2

Le cabhair ó: tugtar script nó ordú bash éigin.

Mar shampla:

socraithe_db_paraiméadar

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

Is é an dara pointe an líne, evaluate feidhmeanna, le luach méadrach sonrach agus a veicteoir tiúnta comhfhreagrach a shábháil ar logchomhad:

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

Tá sé seo tábhachtach, mar gheall ar an eagar sonraí seo, beifear in ann faisnéis bhreise a fháil faoi cé acu de na comhpháirteanna den veicteoir tiúnta a bhfuil éifeacht is mó nó is lú acu ar an luach méadrach.

Is é sin: beifear in ann anailís ar thábhacht aitreabúide a dhéanamh.

Mar sin, cad is féidir a tharlóidh?

I bhfoirm ghraif, má ordaíonn tú na tástálacha in ord méadrach ardaitheach, is é seo a leanas an pictiúr:

An modh poke eolaíoch, nó conas cumraíocht bunachar sonraí a roghnú ag baint úsáide as tagarmharcanna agus algartam leas iomlán a bhaint

Roinnt sonraí a fhreagraíonn do luachanna foircneacha na méadrach:
An modh poke eolaíoch, nó conas cumraíocht bunachar sonraí a roghnú ag baint úsáide as tagarmharcanna agus algartam leas iomlán a bhaint
Anseo, sa screenshot leis na torthaí, soiléireoidh mé: tugtar luachanna an veicteora tiúnta i dtéarmaí an chóid fheidhm aclaíochta, ní i dtéarmaí liosta uimhreacha na bparaiméadar/raonta luachanna na bparaiméadar, a foirmíodh thuas sa téacs.

Bhuel. An bhfuil sé go leor nó beagán, ~8 míle tps: ceist ar leith.
Faoi chuimsiú na hoibre saotharlainne, níl an figiúr seo tábhachtach, is é an rud atá tábhachtach ná an dinimic, conas a athraíonn an luach seo.

Tá an dinimic anseo go maith.
Is léir go mbíonn tionchar suntasach ag fachtóir amháin ar a laghad ar luach an mhéadrach, an ga-algartam, ag sórtáil trí na veicteoirí crómasóim: clúdaithe.
Ag breithniú ag dinimic measartha bríomhar na luachanna cuar, tá fachtóir amháin eile ar a laghad ann a bhfuil tionchar aige, cé go bhfuil sé i bhfad níos lú.

Seo an áit a dteastaíonn uait é attribute-importance anailís chun tuiscint a fháil ar cad iad na tréithe (bhuel, sa chás seo, comhpháirteanna an veicteoir tiúnta) agus cé mhéad tionchar acu ar an luach méadrach.
Agus ón eolas seo: a thuiscint cad iad na fachtóirí a raibh tionchar ag athruithe ar tréithe suntasacha.

Rith attribute-importance féidir ar bhealaí éagsúla.

Chun na gcríoch sin, is maith liom an algartam randomForest pacáiste R den ainm céanna (an doiciméadú)
randomForest, de réir mar a thuigim a chuid oibre i gcoitinne agus a chur chuige maidir le measúnú a dhéanamh ar thábhacht tréithe go háirithe, tógann sé samhail áirithe de spleáchas an athróg freagartha ar na tréithe.

Inár gcás, is méadrach í an athróg freagartha a fhaightear ón mbunachar sonraí i dtástálacha ualaigh: tps;
Agus is comhpháirteanna den veicteoir tiúnta iad tréithe.

Agus mar sin de randomForest déanann sé luacháil ar thábhacht gach aitreabúide samhalta le dhá uimhir: %IncMSE — conas a athraíonn láithreacht/neamhláithreacht na tréithe seo i múnla cáilíocht MSE na samhla seo (Earráid Chearnógach Mheánach);

Agus is uimhir é IncNodePurity a léiríonn cé chomh maith, bunaithe ar luachanna an tréith seo, is féidir tacar sonraí le tuairimí a roinnt, ionas go mbeidh sonraí i gcuid amháin le luach amháin den mhéadrach á mhíniú, agus sa cheann eile le luach eile den mhéadrach.
Bhuel, is é sin: cé chomh mór agus is tréith rangaithe é seo (chonaic mé an míniú is soiléire sa Rúisis ar RandomForest anseo).

R-chód oibrí-tuathánach chun tacar sonraí a phróiseáil le torthaí tástálacha ualaigh:

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

Is féidir leat hipearpharaiméadair an algartam a roghnú go díreach le do lámha agus, ag díriú ar cháilíocht an mhúnla, roghnaigh múnla a chomhlíonann na réamh-mheastacháin ar an tacar sonraí bailíochtaithe ar bhealach níos cruinne.
Is féidir leat feidhm de chineál éigin a scríobh don obair seo (dála an scéil, arís, ag baint úsáide as cineál éigin de algartam leas iomlán a bhaint).

Is féidir leat pacáiste R a úsáid caret, nach bhfuil an pointe tábhachtach.

Mar thoradh air sin, sa chás seo, faightear an toradh seo a leanas chun leibhéal tábhachta na tréithe a mheas:

An modh poke eolaíoch, nó conas cumraíocht bunachar sonraí a roghnú ag baint úsáide as tagarmharcanna agus algartam leas iomlán a bhaint

Bhuel. Mar sin, is féidir linn tús a chur le machnamh domhanda:

  1. Tharlaíonn sé go raibh an ceann is suntasaí, faoi na coinníollacha tástála, an paraiméadar commit_wait
    Go teicniúil, sonraíonn sé modh forghníomhaithe na hoibríochta io de scríobh sonraí athdhéanta ón maolán loga subdb go dtí an logghrúpa reatha: sioncrónach nó asincrónach.
    Luach nowait as a dtagann méadú beagnach ingearach iolrach ar luach na méadrach tps: is é seo an modh io asincrónach a áireamh i ngrúpaí athdhéanta.
    Ceist ar leith is ea ar cheart duit é seo a dhéanamh i mbunachar sonraí bia. Anseo ní theorainn mé féin ach a rá: is fachtóir suntasach é seo.
  2. Tá sé loighciúil go bhfuil an méid de na maolán log an subd: casadh amach a bheith ina fhachtóir suntasach.
    Dá lú méid an mhaoláin loga, is ea is lú a chumas maolánacha, is minice a tharluíonn sé agus/nó an neamhábaltacht limistéar saor a leithdháileadh ann do chuid de shonraí nua redox.
    Ciallaíonn sé seo: moilleanna a bhaineann le spás a leithdháileadh sa mhaolán loga agus/nó sonraí athdhéanta a dhumpáil ina ngrúpaí athdhéanta.
    Ar ndóigh, ba cheart go ndéanfadh na moilleanna seo difear do thréchur an bhunachair shonraí le haghaidh idirbhearta.
  3. Paraiméadar db_block_checksum: bhuel, freisin, go ginearálta tá sé soiléir - cruthaítear bloic shaighideacha i dtaisce maolánach an fho-bhunachar sonraí mar thoradh ar phróiseáil idirbheart.
    Cé acu, nuair a bhíonn seiceálacha de bhlocanna sonraí cumasaithe, caithfidh an bunachar sonraí a phróiseáil - na seiceálacha seo a ríomh ó chorp an bhloic sonraí, iad a sheiceáil leis an méid atá scríofa i gceanntásc an bhloc sonraí: meaitseálann/ní mheaitseálann.
    Arís, ní féidir le hobair den sórt sin ach moill a chur ar phróiseáil sonraí, agus dá réir sin is suntasach an paraiméadar agus an mheicníocht a shocraíonn an paraiméadar seo.
    Sin an fáth go dtugann an díoltóir, i gcáipéisíocht an pharaiméadar seo, luachanna difriúla dó (an paraiméadar) agus tugann sé faoi deara go mbeidh tionchar, ach, bhuel, is féidir leat luachanna éagsúla a roghnú, suas go dtí “as” agus tionchair éagsúla.

Bhuel, conclúid dhomhanda.

Go ginearálta, tá an cur chuige ag obair go maith.

Ligeann sé go leor dó féin, sna céimeanna tosaigh de thástáil ualaigh ar chóras seirbhíse áirithe, chun a (córas) a chumraíocht is fearr don ualach a roghnú, gan dul i ngleic leis na saintréithe a bhaineann le bunú an chórais don ualach ró-mhór.

Ach ní chuireann sé as an áireamh go hiomlán é - ar a laghad ag an leibhéal tuisceana: ní mór go mbeadh an córas ar an eolas faoi na "snaidhmeanna coigeartaithe" agus na raonta uainíochta incheadaithe de na snaidhmeanna sin.

Is féidir leis an gcur chuige ansin an chumraíocht córais is fearr a aimsiú go réasúnta tapa.
Agus bunaithe ar thorthaí na tástála, is féidir faisnéis a fháil faoi nádúr an chaidrimh idir méadracht feidhmíochta an chórais agus luachanna paraiméadair socruithe an chórais.

Ba chóir, ar ndóigh, cur le teacht chun cinn an tuiscint an-domhain ar an gcóras, a oibriú, ar a laghad faoi ualach ar leith.

Go praiticiúil, is malartú é seo ar na costais a bhaineann le tuiscint a fháil ar an gcóras saincheaptha do na costais a bhaineann le tástáil den sórt sin ar an gcóras a ullmhú.

Ba mhaith liom a thabhairt faoi deara go leithleach: sa chur chuige seo, tá sé ríthábhachtach cé chomh leordhóthanach is atá an tástáil córais do na coinníollacha oibriúcháin a bheidh aici in oibríocht tráchtála.

Go raibh maith agat as do aire agus am.

Foinse: will.com

Add a comment