An dòigh poke saidheansail, no mar a roghnaicheas tu rèiteachadh stòr-dàta a 'cleachdadh slatan-tomhais agus algorithm optimization

Hello

Cho-dhùin mi mo lorg a cho-roinn - toradh smaoineachaidh, deuchainn agus mearachd.
Gu h-iomlan: chan e lorg a tha seo, gu dearbh - bu chòir seo a bhith air a bhith eòlach airson ùine mhòr, dhaibhsan a tha an sàs ann an giullachd dàta staitistigeil gnìomhaichte agus optimization de shiostaman sam bith, chan e gu riatanach gu sònraichte an DBMS.
Agus: tha, tha fios aca, bidh iad a’ sgrìobhadh artaigilean inntinneach mun rannsachadh aca, eisimpleir (UPD .: anns na beachdan chomharraich iad pròiseact fìor inntinneach: dòbhran )
Air an làimh eile: air falbh chan eil mi a’ faicinn iomradh no sgaoileadh farsaing air an dòigh-obrach seo air an eadar-lìn am measg eòlaichean IT, DBA.

Mar sin, chun na h-ìre.

Gabhamaid ris gu bheil obair againn: siostam seirbheis sònraichte a stèidheachadh gus seirbheis de sheòrsa air choreigin a dhèanamh.

Tha fios mun obair seo: dè a th 'ann, mar a tha càileachd na h-obrach seo air a thomhas, agus dè an slat-tomhais airson a' chàileachd seo a thomhas.

Gabhamaid cuideachd gu bheil e gu ìre mhòr aithnichte agus air a thuigsinn: dìreach mar a tha obair air a choileanadh ann an (no leis) an t-siostam seirbheis seo.

“Barrachd no nas lugha” - tha seo a ’ciallachadh gu bheil e comasach inneal sònraichte, goireasachd, seirbheis ullachadh (no fhaighinn bho àiteigin) a ghabhas a cho-chur agus a chuir an sàs san t-siostam le luchd deuchainn a tha iomchaidh gu leòr airson na bhios ann an cinneasachadh, ann an suidheachaidhean a tha iomchaidh gu leòr airson a bhith ag obair ann an cinneasachadh.

Uill, gabhamaid ris gu bheil fios air seata de pharamadairean atharrachaidh airson an t-siostam seirbheis seo, a dh'fhaodar a chleachdadh gus an siostam seo a rèiteachadh a thaobh cinneasachd na h-obrach aige.

Agus dè an duilgheadas a th ’ann - chan eil tuigse iomlan gu leòr air an t-siostam seirbheis seo, fear a leigeas leat suidheachaidhean an t-siostaim seo a rèiteachadh gu h-eòlach airson luchdan san àm ri teachd air àrd-ùrlar sònraichte agus an cinneasachd riatanach den t-siostam fhaighinn.

Uill. Tha seo cha mhòr an-còmhnaidh fìor.

Dè as urrainn dhut a dhèanamh an seo?

Uill, is e a’ chiad rud a thig gu inntinn coimhead air na sgrìobhainnean airson an t-siostam seo. Tuig dè na raointean iomchaidh a th’ ann airson luachan nam paramadairean atharrachaidh. Agus, mar eisimpleir, a 'cleachdadh an dòigh teàrnaidh co-òrdanachaidh, tagh luachan airson paramadairean siostam ann an deuchainnean.

An fheadhainn sin. thoir seòrsa de rèiteachadh don t-siostam, ann an cruth seata luachan sònraichte airson na paramadairean rèiteachaidh aige.

Cuir eallach deuchainn ris, a’ cleachdadh an fhìor ghoireas inneal seo, gineadair luchdan.
Agus coimhead air an luach - an fhreagairt, no meatrach de chàileachd an t-siostam.

Is dòcha gur e an dàrna beachd an co-dhùnadh gur e ùine glè fhada a tha seo.

Uill, is e sin: ma tha tòrr pharamadairean suidheachaidh ann, ma tha na raointean de na luachan aca a tha air an ruith mòr, ma bheir gach deuchainn luchd fa leth tòrr ùine airson a chrìochnachadh, mar sin: tha, dh ’fhaodadh gun toir seo gu neo-iomchaidh. Ùine mhòr.

Uill, seo na rudan as urrainn dhut a thuigsinn agus a chuimhneachadh.

Gheibh thu a-mach gu bheil vectar ann an seata luachan paramadairean rèiteachaidh an t-siostam seirbheis, mar sreath de chuid de luachan.

Tha a h-uile vectar mar sin, le rudan eile co-ionann (leis nach eil an vectar seo a’ toirt buaidh air), a ’freagairt ri luach iomlan a’ mheatrach - comharra air càileachd gnìomhachd an t-siostaim fo luchd deuchainn.

ie

Beachdaichidh sinn air vectar rèiteachaidh an t-siostaim mar An dòigh poke saidheansail, no mar a roghnaicheas tu rèiteachadh stòr-dàta a 'cleachdadh slatan-tomhais agus algorithm optimizationcàite An dòigh poke saidheansail, no mar a roghnaicheas tu rèiteachadh stòr-dàta a 'cleachdadh slatan-tomhais agus algorithm optimization; Càite An dòigh poke saidheansail, no mar a roghnaicheas tu rèiteachadh stòr-dàta a 'cleachdadh slatan-tomhais agus algorithm optimization - àireamh de pharamadairean rèiteachaidh an t-siostaim, cia mheud de na paramadairean sin a th’ ann.

Agus tha luach a’ mheatrach a’ freagairt air seo An dòigh poke saidheansail, no mar a roghnaicheas tu rèiteachadh stòr-dàta a 'cleachdadh slatan-tomhais agus algorithm optimization ainmich sinn e mar
An dòigh poke saidheansail, no mar a roghnaicheas tu rèiteachadh stòr-dàta a 'cleachdadh slatan-tomhais agus algorithm optimization, an uairsin gheibh sinn gnìomh: An dòigh poke saidheansail, no mar a roghnaicheas tu rèiteachadh stòr-dàta a 'cleachdadh slatan-tomhais agus algorithm optimization

Uill, ma-thà: thig a h-uile càil sa bhad sìos gu, na mo chùis: cha mhòr air a dhìochuimhneachadh bho na làithean oileanach agam, algorithms airson a bhith a’ lorg crìoch gnìomh.

Ceart gu leòr, ach an seo tha ceist eagrachaidh agus gnìomhaichte ag èirigh: dè an algairim a bu chòir a chleachdadh.

  1. Anns an t-seadh - gus an urrainn dhut nas lugha a chòdachadh le làimh.
  2. Agus airson gun obraich e, i.e. lorg an fhìor cheann (ma tha fear ann), gu math, co-dhiù nas luaithe na teàrnadh co-òrdanachaidh.

Tha a’ chiad phuing a’ nochdadh gum feum sinn coimhead a dh’ionnsaigh cuid de àrainneachdan anns a bheil a leithid de dh’ algoirmean air an cur an gnìomh mar-thà, agus a tha, ann an cruth air choreigin, deiseil airson an cleachdadh ann an còd.
Uill, tha fios agam python и cran-r

Tha an dàrna puing a 'ciallachadh gum feum thu leughadh mu na h-algorithms fhèin, dè a th' annta, dè na riatanasan a th 'aca, feartan an cuid obrach.

Agus faodaidh na tha iad a 'toirt seachad a bhith feumail taobh buaidhean - toraidhean, no gu dìreach bhon algairim fhèin.

No gheibhear iad bho thoraidhean an algairim.

Tha tòrr an urra ris na suidheachaidhean cuir a-steach.

Mar eisimpleir, ma dh'fheumas tu, airson adhbhar air choireigin, toradh fhaighinn nas luaithe, uill, feumaidh tu coimhead a dh'ionnsaigh algorithms teàrnaidh caisead agus tagh aon dhiubh.

No, mura h-eil ùine cho cudromach, faodaidh tu, mar eisimpleir, dòighean optimization stochastic a chleachdadh, leithid algorithm ginteil.

Tha mi a 'moladh beachdachadh air obair an dòigh-obrach seo, a' taghadh rèiteachadh an t-siostaim, a 'cleachdadh algairim ginteil, anns an ath fhear, mar sin a bhruidhinn: obair obair-lann.

tùsail:

  1. Biodh, mar shiostam seirbheis: oracle xe 18c
  2. Leig leis a bhith a’ frithealadh gnìomhachd malairt agus an amas: an toradh as àirde fhaighinn den fho-stòr-dàta, ann an gnothaichean/diog.
  3. Faodaidh gnìomhan a bhith glè eadar-dhealaichte ann an nàdar obrachadh le dàta agus co-theacsa na h-obrach.
    Aontaichidh sinn gur e gnothaichean a tha seo nach bi a’ làimhseachadh mòran de dhàta clàir.
    Anns an fhaireachdainn nach eil iad a 'gineadh barrachd dàta neo-dhèanamh na ath-dhèanamh agus nach bi iad a' làimhseachadh ceudadan mòra de shreathan agus de chlàran mòra.

Is iad sin gnothaichean a bhios ag atharrachadh aon sreath ann an clàr mòr no nas lugha, le àireamh bheag de chlàran-amais air a’ chlàr seo.

Anns an t-suidheachadh seo: bidh cinneasachd an fho-stòr-dàta airson gnothaichean giullachd, le glèidheadh, air a dhearbhadh le càileachd a’ ghiollachd leis an stòr-dàta redox.

Àicheadh ​​- ma bhruidhneas sinn gu sònraichte mu na roghainnean subdb.

Air sgàth 's gu bheil, anns a' chùis choitcheann, dh'fhaodadh gum bi, mar eisimpleir, glasan malairt eadar seiseanan SQL, mar thoradh air dealbhadh obair luchd-cleachdaidh le dàta clàr agus / no am modail clàr.

A bheir, gu dearbh, buaidh dubhach air meatrach TPS agus bidh seo na fheart exogenous, an coimeas ris an fho-stòr-dàta: uill, seo mar a chaidh am modal clàr a dhealbhadh agus an obair leis an dàta ann a bhios bacaidhean a’ tachairt.

Mar sin, airson purrachd an deuchainn, cuiridh sinn a-mach am bàillidh seo, agus gu h-ìosal mìnichidh mi ciamar.

  1. Gabhamaid ris, airson cinnt, gur e òrdughan DML a th’ ann an 100% de na h-òrdughan SQL a chaidh a chuir a-steach don stòr-dàta.
    Leig le feartan obair luchd-cleachdaidh leis an fho-stòr-dàta a bhith mar an ceudna ann an deuchainnean.
    Is e sin: an àireamh de sheiseanan skl, dàta clàr, mar a bhios seiseanan skl ag obair leotha.
  2. Bidh Subd ag obair ann an FORCE LOGGING, ARCHIVELOG mòdan. Tha modh Flashback-data-data air a chuir dheth, aig an ìre fo-dhuilleag.
  3. Logaichean ath-dhèanamh: suidhichte ann an siostam faidhle air leth, air “diosg” air leth;
    An còrr den phàirt fiosaigeach den stòr-dàta: ann an siostam faidhle eile, air leth, air “diosg” air leth:

Barrachd mion-fhiosrachaidh mun inneal corporra. co-phàirtean stòr-dàta obair-lann

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

An toiseach, fo na cumhaichean luchd seo, bha mi airson subd malairt a chleachdadh SLOB-goireas
Tha feart cho iongantach aige, bheir mi luaidh air an ùghdar:

Aig cridhe SLOB tha an “dòigh SLOB.” Tha Modh SLOB ag amas air àrd-ùrlaran deuchainn
gun aimhreit tagraidh. Chan urrainn dha aon coileanadh bathar-cruaidh as àirde a stiùireadh
a’ cleachdadh còd tagraidh a tha, mar eisimpleir, ceangailte le glasadh tagraidh no eadhon
a’ roinneadh bhlocaichean Stòr-dàta Oracle. Tha sin ceart - tha cosgais ann nuair a bhios tu a’ roinneadh dàta
ann am blocaichean dàta! Ach tha SLOB - na chleachdadh bunaiteach - saor bho chonnspaid mar sin.

Tha an dearbhadh seo: a 'freagairt, tha e.
Tha e goireasach an ìre de cho-shìnteachd seiseanan cl a riaghladh, is e seo an iuchair -t cuir air bhog an goireas runit.sh bho SLOB
Tha an àireamh sa cheud de òrdughan DML air a riaghladh, anns an àireamh de theachdaireachdan teacsa a thèid a chuir chun fho-roinn, gach seisean teacsa, paramadair UPDATE_PCT
Air leth agus gu math goireasach: SLOB fhèin, ro agus às deidh an t-seisein luchdan - ag ullachadh statspack, no awr-snapshots (na tha gu bhith deiseil).

Ach, thionndaidh e a-mach sin SLOB chan eil e a’ toirt taic do sheiseanan SQL le ùine nas lugha na 30 diog.
Mar sin, chòdaich mi an dreach agam fhìn, neach-obrach-tuath den luchdan, agus an uairsin dh'fhuirich e ag obair.

Leig leam soilleireachadh dè a bhios an luchdan a ’dèanamh agus mar a bhios e ga dhèanamh, airson soilleireachd.
Gu bunaiteach tha an luchdan a’ coimhead mar seo:

Còd luchd-obrach

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

Tha luchd-obrach air an cur air bhog san dòigh seo:

Luchd-obrach ruith

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 tha bùird airson luchd-obrach air an ullachadh mar seo:

A 'cruthachadh chlàran

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"

An fheadhainn sin. Airson gach neach-obrach (gu practaigeach: seisean SQL air leth anns an DB) tha clàr air leth air a chruthachadh, leis am bi an neach-obrach ag obair.

Bidh seo a’ dèanamh cinnteach nach bi glasan malairt eadar seiseanan luchd-obrach.
Bidh gach neach-obrach: a’ dèanamh an aon rud, le a bhòrd fhèin, tha na bùird uile mar an ceudna.
Bidh gach neach-obrach a 'dèanamh obair airson an aon ùine.
A bharrachd air an sin, airson ùine gu leòr gus am biodh, mar eisimpleir, tionndadh log gu cinnteach a ’tachairt, agus barrachd air aon uair.
Uill, a rèir sin, dh'èirich cosgaisean agus buaidhean co-cheangailte.
Anns a 'chùis agam, shuidhich mi fad obair an luchd-obrach aig 8 mionaidean.

Pìos de dh'aithisg statspack a' toirt cunntas air obrachadh an fho-luchd-obrach

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

A 'tilleadh gu obair-lann.
Bidh sinn, le rudan eile co-ionann, ag atharrachadh luachan nam paramadairean a leanas ann an stòr-dàta an obair-lann:

  1. Meud bhuidhnean log an stòr-dàta. raon luach: [32, 1024] MB;
  2. An àireamh de bhuidhnean iris anns an stòr-dàta. raon luach: [2,32];
  3. log_archive_max_processes raon luach: [1,8];
  4. commit_logging tha dà luach ceadaichte: batch|immediate;
  5. commit_wait tha dà luach ceadaichte: wait|nowait;
  6. log_buffer raon luach: [2,128] MB.
  7. log_checkpoint_timeout raon luach: [60,1200] diogan
  8. db_writer_processes raon luach: [1,4]
  9. undo_retention raon luach: [30; 300] diogan
  10. transactions_per_rollback_segment raon luach: [1,8]
  11. disk_asynch_io tha dà luach ceadaichte: true|false;
  12. filesystemio_options tha na luachan a leanas ceadaichte: none|setall|directIO|asynch;
  13. db_block_checking tha na luachan a leanas ceadaichte: OFF|LOW|MEDIUM|FULL;
  14. db_block_checksum tha na luachan a leanas ceadaichte: OFF|TYPICAL|FULL;

Faodaidh neach le eòlas air cumail suas stòran-dàta Oracle a ràdh gu cinnteach dè agus dè na luachan a bu chòir a shuidheachadh, bho na paramadairean ainmichte agus na luachan iomchaidh aca, gus barrachd cinneasachd fhaighinn bhon stòr-dàta airson an obair le dàta a tha air a chomharrachadh le an còd tagraidh, an seo gu h-àrd.

Ach.

Is e adhbhar obair an obair-lann sealltainn gum bi an algairim optimization fhèin a’ soilleireachadh seo dhuinn gu ìre mhath luath.

Dhuinne, chan eil air fhàgail ach coimhead a-steach don sgrìobhainn, tron ​​​​t-siostam gnàthaichte, dìreach gu leòr gus faighinn a-mach dè na paramadairean a dh’ atharraicheas agus dè na raointean.
Agus cuideachd: còd a 'chòd a thèid a chleachdadh gus obrachadh le siostam àbhaisteach an algairim optimization taghte.

Mar sin, a-nis mun chòd.
Bhruidhinn mi gu h-àrd mu dheidhinn cran-r, ie: tha a h-uile làimhseachadh leis an t-siostam gnàthaichte air a chuir air dòigh ann an cruth sgriobt R.

An fhìor ghnìomh, mion-sgrùdadh, taghadh a rèir luach meatrach, vectaran stàite siostam: is e pasgan a tha seo GA (na sgrìobhainnean)
Chan eil am pasgan, anns a 'chùis seo, gu math freagarrach, anns an fhaireachdainn gu bheil e an dùil gum bi vectaran (cromosomes, ma tha a' phacaid) air an sònrachadh ann an cruth sreathan de àireamhan le pàirt bloighteach.

Agus an vectar agam, bho luachan paramadairean an t-suidheachaidh: is iad sin meudan 14 - àireamhan iomlan agus luachan sreang.

Tha an duilgheadas, gu dearbh, furasta a sheachnadh le bhith a’ sònrachadh àireamhan sònraichte gu luachan sreang.

Mar sin, aig a’ cheann thall, tha am prìomh phìos den sgriobt R a’ coimhead mar seo:

Cuir fòn gu 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

An seo, le cuideachadh lower и upper feartan fo-riaghailteach ga gu bunaiteach, tha raon den àite sgrùdaidh air a shònrachadh, anns an tèid sgrùdadh a dhèanamh airson a leithid de vectar (no vectaran) far am faighear an luach as àirde den ghnìomh fallaineachd.

Bidh an ga subroutine a’ dèanamh sgrùdadh a’ meudachadh a’ ghnìomh fallaineachd.

Uill, an uairsin, tha e a 'tionndadh a-mach, anns a' chùis seo, gu bheil e riatanach gum bi an gnìomh fallaineachd, a 'tuigsinn an vectar mar sheata de luachan airson cuid de chrìochan an fho-roinn, a' faighinn meatrach bhon fho-roinn.

Is e sin: cia mheud, le suidheachadh subd sònraichte agus luchd sònraichte air an subd: bidh an subd a’ pròiseasadh ghnothaichean gach diog.

Is e sin, nuair a nochdas e, feumar na h-ioma-cheuman a leanas a choileanadh taobh a-staigh gnìomh fallaineachd:

  1. A’ giullachd vectar inntrigidh àireamhan - ga thionndadh gu luachan airson paramadairean fo-dàta.
  2. Oidhirp air àireamh shònraichte de bhuidhnean ath-dhèanamh de mheud sònraichte a chruthachadh. A bharrachd air an sin, is dòcha nach bi an oidhirp soirbheachail.
    Buidhnean iris a bha mar-thà anns an fho-roinn, ann an cuid de mheud agus de mheud, airson purrachd an deuchainn - d.b. air a sguabadh às.
  3. Ma tha a’ phuing roimhe soirbheachail: a’ sònrachadh luachan nam paramadairean rèiteachaidh don stòr-dàta (a-rithist: dh’ fhaodadh fàilligeadh a bhith ann)
  4. Ma tha an ceum roimhe soirbheachail: stad air an subd, a 'tòiseachadh air an subd gus am bi na luachan paramadair a tha air ùr shònrachadh a' tighinn gu buil. (a-rithist: is dòcha gu bheil glitch ann)
  5. Ma tha an ceum roimhe soirbheachail: dèan deuchainn luchd. faigh metrics bho subd.
  6. Till an subd chun a staid thùsail, i.e. cuir às do bhuidhnean log a bharrachd, till an rèiteachadh tùsail fo-stòr-dàta gu obair.

Còd airson 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)
}

Sin. obair gu lèir: air a dhèanamh ann an gnìomh fallaineachd.

Bidh an ga-subroutine a’ pròiseasadh vectaran, no, nas ceart, chromosomes.
Anns a bheil, is e an rud as cudromaiche dhuinn an taghadh de chromosomes le ginean airson a bheil an gnìomh fallaineachd a’ toirt a-mach luachan mòra.

Is e seo, gu dearbh, am pròiseas a bhith a’ lorg an t-seata chromosomes as fheàrr a’ cleachdadh vectar ann an àite sgrùdaidh N-mheudach.

Gu math soilleir, mionaideach mìneachadh, le eisimpleirean de chòd-R, obair algairim ginteil.

Bu mhath leam dà phuing theicnigeach fa leth a thoirt fa-near.

Gairmean cuideachail bhon ghnìomh evaluate, mar eisimpleir, stad-tòiseachaidh, a’ suidheachadh luach a’ pharamadair subd, air an coileanadh stèidhichte air cran-r gnìomhan system2

Le cuideachadh: tha cuid de sgriobt bash no àithne air an ainmeachadh.

Mar eisimpleir:

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

Is e an dàrna puing an loidhne, evaluate gnìomhan, le bhith a’ sàbhaladh luach meatrach sònraichte agus an vectar gleusaidh co-fhreagarrach ri faidhle log:

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

Tha seo cudromach, oir bhon raon dàta seo, bidh e comasach fiosrachadh a bharrachd fhaighinn mu dè na pàirtean den vectar gleusaidh aig a bheil buaidh nas motha no nas lugha air an luach meatrach.

Is e sin: bidh e comasach mion-sgrùdadh buadh-chudromach a dhèanamh.

Mar sin dè as urrainn tachairt?

Ann an cruth graf, ma dh’ òrduicheas tu na deuchainnean ann an òrdugh meatrach dìreadh, tha an dealbh mar a leanas:

An dòigh poke saidheansail, no mar a roghnaicheas tu rèiteachadh stòr-dàta a 'cleachdadh slatan-tomhais agus algorithm optimization

Cuid de dhàta a fhreagras air fìor luachan na meatrach:
An dòigh poke saidheansail, no mar a roghnaicheas tu rèiteachadh stòr-dàta a 'cleachdadh slatan-tomhais agus algorithm optimization
An seo, anns an ath-dhealbh leis na toraidhean, nì mi soilleireachadh: tha luachan an vectar gleusaidh air an toirt seachad a thaobh còd gnìomh fallaineachd, chan ann a thaobh liosta àireamh nam paramadairean / raointean de luachan paramadair, a chaidh a dhealbhadh gu h-àrd anns an teacsa.

Uill. Am bheil e mòr no beag, ~8 mìle tps: ceist air leth.
Taobh a-staigh frèam obair obair-lann, chan eil am figear seo cudromach, is e an rud a tha cudromach an daineamaigs, mar a dh’ atharraicheas an luach seo.

Tha an dinamics an seo math.
Tha e follaiseach gu bheil co-dhiù aon fhactar a’ toirt buaidh mhòr air luach a’ mheatrach, an ga-algorithm, a’ rèiteach tro na vectaran cromosoma: còmhdaichte.
A’ breithneachadh air daineamaigs an ìre mhath làidir de luachan lùbte, tha co-dhiù aon fheart eile ann a tha, ged a tha e gu math nas lugha, a’ toirt buaidh.

Seo far a bheil feum agad air attribute-importance mion-sgrùdadh gus tuigsinn dè na buadhan (uill, sa chùis seo, co-phàirtean den vectar gleusaidh) agus dè a’ bhuaidh a bheir iad air an luach meatrach.
Agus bhon fhiosrachadh seo: tuig dè na factaran air an tug atharrachaidhean ann am buadhan cudromach buaidh.

Cuir gu bàs attribute-importance comasach ann an diofar dhòighean.

Airson na h-adhbharan sin, is toil leam an algairim randomForest pasgan R den aon ainm (na sgrìobhainnean)
randomForest, mar a tha mi a’ tuigsinn na h-obrach aige san fharsaingeachd agus an dòigh-obrach aige a thaobh a bhith a’ measadh cho cudromach sa tha buadhan gu sònraichte, a’ togail modail sònraichte de eisimeileachd an caochladair freagairt air na buadhan.

Anns a’ chùis againn, tha an caochladair freagairt na mheatrach a gheibhear bhon stòr-dàta ann an deuchainnean luchd: tps;
Agus tha buadhan nam pàirtean den vectar gleusaidh.

Mar sin an seo randomForest a’ measadh cudromachd gach feart modail le dà àireamh: %IncMSE - mar a tha làthaireachd / neo-làthaireachd a’ bhuadh seo ann am modail ag atharrachadh càileachd MSE a’ mhodail seo (Mearachd Ceàrnagach Meadhanach);

Agus is e àireamh a th’ ann an IncNodePurity a tha a’ nochdadh cho math, stèidhichte air luachan na feart seo, a dh’ fhaodar seata dàta le beachdan a roinn, gus am bi dàta ann an aon phàirt le aon luach den mheatrach air a mhìneachadh, agus anns an fhear eile le luach eile den mheatrach.
Uill, is e sin: gu dè an ìre gu bheil seo na fheart seòrsachaidh (chunnaic mi am mìneachadh as soilleire ann an cànan na Ruis air RandomForest an seo).

Còd-R neach-obrach-tuath airson a bhith a’ giullachd dàta le toraidhean deuchainnean luchdan:

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

Faodaidh tu hyperparameters an algairim a thaghadh gu dìreach le do làmhan agus, le fòcas air càileachd a’ mhodail, tagh modail a choileanas nas cinntiche na ro-innse air an dàta dearbhaidh.
Faodaidh tu seòrsa de dhleastanas a sgrìobhadh airson na h-obrach seo (co-dhiù, a-rithist, a 'cleachdadh seòrsa de algorithm optimization).

Faodaidh tu pasgan R a chleachdadh caret, chan eil am puing cudromach.

Mar thoradh air an sin, sa chùis seo, gheibhear an toradh a leanas gus ìre cho cudromach sa tha na feartan a mheasadh:

An dòigh poke saidheansail, no mar a roghnaicheas tu rèiteachadh stòr-dàta a 'cleachdadh slatan-tomhais agus algorithm optimization

Uill. Mar sin, is urrainn dhuinn tòiseachadh air meòrachadh cruinneil:

  1. Tha e a ’tionndadh a-mach gur e am paramadair am fear as cudromaiche, fo na cumhaichean deuchainn sin commit_wait
    Gu teicnigeach, tha e a’ sònrachadh modh cur an gnìomh io obrachadh sgrìobhaidh ath-dhèanamh dàta bhon bhufair log subdb chun bhuidheann log gnàthach: sioncronaich no asyncronach.
    luach nowait a tha a’ leantainn gu àrdachadh cha mhòr dìreach, ioma-fhillte ann an luach a’ mheatrach tps: is e seo a bhith a’ toirt a-steach am modh io asyncronach ann am buidhnean ath-dhèanamh.
    Is e ceist air leth am bu chòir dhut seo a dhèanamh ann an stòr-dàta bìdh. An seo tha mi gam chuingealachadh fhèin gu dìreach ag ràdh: tha seo na adhbhar cudromach.
  2. Tha e loidsigeach gu bheil meud bufair log an fho-roinn: a 'tionndadh a-mach gu bhith na fheart cudromach.
    Mar as lugha meud bufair an loga, mar as lugha a chomas bufair, is ann as trice a bhios e a’ cur thairis agus/no cho neo-chomas àite saor a riarachadh ann airson cuibhreann de dhàta redox ùr.
    Tha seo a’ ciallachadh: dàil co-cheangailte ri bhith a’ riarachadh àite anns a’ bhufair loga agus/no a’ dumpadh dàta ath-dhèanamh bhuaithe gu buidhnean ath-dhèanamh.
    Bu chòir agus bheir na dàil sin buaidh, gu dearbh, air gluasad an stòr-dàta airson gnothaichean.
  3. Parameter db_block_checksum: uill, cuideachd, san fharsaingeachd tha e soilleir - bidh giullachd malairt a’ leantainn gu cruthachadh bhlocaichean darty ann an tasgadan bufair an fho-stòr-dàta.
    A tha, nuair a thèid sgrùdadh a dhèanamh air àireamhan bacaidhean dàta a bhith air a chomasachadh, feumaidh an stòr-dàta obrachadh a-mach - obrachadh a-mach na sgrùdaidhean sin bho chorp a’ bhacaidh dàta, thoir sùil orra leis na tha sgrìobhte ann am bann-cinn datablock: maidsean / chan eil e a’ maidseadh.
    Chan urrainn don leithid de dh’ obair, a-rithist, dàil a chuir air giollachd dàta, agus a rèir sin, tha am paramadair agus an uidheamachd a tha a ’suidheachadh am paramadair seo cudromach.
    Sin as coireach gu bheil an neach-reic a 'tabhann, anns na sgrìobhainnean airson a' pharamadair seo, luachan eadar-dhealaichte air a shon (am paramadair) agus a 'toirt fa-near gu bheil, bidh buaidh ann, ach, uill, faodaidh tu luachan eadar-dhealaichte a thaghadh, suas gu "dheth" agus buaidhean eadar-dhealaichte.

Uill, co-dhùnadh cruinneil.

Tha an dòigh-obrach, san fharsaingeachd, a 'tionndadh a-mach gu bhith gu math ag obair.

Tha e gu tur a 'toirt cothrom dha fhèin, anns na tràth ìrean de dheuchainn luchd air siostam seirbheis sònraichte, gus an rèiteachadh (siostam) as fheàrr a thaghadh airson an luchd, gun a bhith a' faighinn cus a-steach do na mion-fhiosrachadh mu bhith a 'stèidheachadh an t-siostam airson an luchd.

Ach chan eil e a 'dùnadh a-mach gu tur - co-dhiù aig ìre tuigse: feumaidh fios a bhith aig an t-siostam mu na "snaidhmeannan rèiteachaidh" agus na raointean ceadaichte de chuairteachadh nan snaidhmeannan sin.

Faodaidh an dòigh-obrach an uairsin an rèiteachadh siostam as fheàrr a lorg gu ìre mhath luath.
Agus stèidhichte air toraidhean deuchainn, tha e comasach fiosrachadh fhaighinn mu nàdar a ’chàirdeis eadar meatrach coileanadh an t-siostaim agus luachan crìochan suidheachadh an t-siostaim.

A bu chòir, gu dearbh, cur ri nochdadh an tuigse fìor dhomhainn seo den t-siostam, a ghnìomhachd, co-dhiù fo luchd sònraichte.

Ann an cleachdadh, is e seo iomlaid de na cosgaisean airson tuigse fhaighinn air an t-siostam gnàthaichte airson cosgaisean ullachadh leithid de dheuchainn air an t-siostam.

Bu mhath leam a thoirt fa-near air leth: anns an dòigh-obrach seo, tha an ìre de fhreagarrachd deuchainn siostam a rèir nan suidheachaidhean obrachaidh a bhios aige ann an gnìomhachd malairteach air leth cudromach.

Tapadh leibh airson an aire agus an ùine agad.

Source: www.habr.com

Cuir beachd ann