Metòd pike syantifik la, oswa ki jan yo chwazi yon konfigirasyon baz done lè l sèvi avèk referans ak yon algorithm optimize

Alo

Mwen deside pataje jwenn mwen an - fwi a nan panse, esè ak erè.
An jeneral: sa a se pa yon jwenn, nan kou - tout bagay sa yo ta dwe li te ye pou yon tan long, nan moun ki patisipe nan aplike pwosesis done estatistik ak optimize nan nenpòt ki sistèm, pa nesesèman espesyalman DBMS la.
Epi: wi, yo konnen, yo ekri atik enteresan sou rechèch yo, egzanp (UPD.: nan kòmantè yo, yo fè remake yon pwojè trè enteresan: ottertune )
Nan lòt men an: offhand mwen pa wè okenn mansyone toupatou oswa difizyon apwòch sa a sou entènèt la nan mitan espesyalis IT, DBA.

Se konsa, nan pwen an.

Ann sipoze ke nou gen yon travay: yo mete kanpe yon sistèm sèvis sèten nan sèvis kèk kalite travay.

Li konnen sou travay sa a: kisa li ye, ki jan kalite travay sa a mezire, ak ki kritè pou mezire kalite sa a.

Ann sipoze tou ke li se plis oswa mwens li te ye ak konprann: egzakteman ki jan travay yo fèt nan (oswa avèk) sistèm sèvis sa a.

"Plis oswa mwens" - sa vle di ke li posib pou prepare (oswa jwenn li soti nan yon kote) yon sèten zouti, sèvis piblik, sèvis ki ka sentèz ak aplike nan sistèm nan ak yon chaj tès ase adekwa pou sa ki pral nan pwodiksyon an, nan kondisyon ase ase pou travay nan pwodiksyon.

Oke, an n sipoze ke yon seri paramèt ajisteman pou sistèm sèvis sa a li te ye, ki ka itilize yo konfigirasyon sistèm sa a an tèm de pwodiktivite nan travay li.

Ak sa ki pwoblèm nan - pa gen yon konpreyansyon konplè sou sistèm sèvis sa a, yon sèl ki pèmèt ou konfigirasyon èkspèrt anviwònman yo nan sistèm sa a pou chaj nan lavni sou yon platfòm bay epi jwenn pwodiktivite ki nesesè nan sistèm nan.

Oke. Sa a se prèske toujou ka a.

Kisa ou ka fè la a?

Oke, premye bagay ki vin nan tèt ou se gade nan dokiman an pou sistèm sa a. Konprann ki ranje akseptab yo pou valè paramèt ajisteman yo. Epi, pou egzanp, lè l sèvi avèk metòd desandan kowòdone, chwazi valè pou paramèt sistèm nan tès yo.

Moun sa yo. bay sistèm nan yon kalite konfigirasyon, nan fòm lan nan yon seri valè espesifik pou paramèt konfigirasyon li yo.

Aplike yon chaj tès sou li, lè l sèvi avèk sa a trè zouti-utilite, dèlko chaj.
Epi gade nan valè a - repons lan, oswa yon metrik nan bon jan kalite a nan sistèm nan.

Dezyèm panse a ka konklizyon ke sa a se yon tan trè long.

Oke, se sa ki: si gen yon anpil nan paramèt akor, si chenn yo nan valè yo kouvri yo gwo, si chak tès chaj endividyèl pran anpil tan pou konplete, lè sa a: wi, tout bagay sa yo ka pran yon kantite lajan akseptab. nan tan.

Oke, men sa ou ka konprann epi sonje.

Ou ka jwenn ke nan seri a nan paramèt anviwònman sistèm sèvis gen yon vektè, kòm yon sekans nan kèk valè.

Chak vektè sa yo, lòt bagay yo egal (nan ke li pa afekte pa vektè sa a), koresponn ak yon valè konplètman defini nan metrik la - yon endikatè nan bon jan kalite a nan operasyon sistèm nan anba yon chaj tès.

I.e.

Se pou nou endike vektè konfigirasyon sistèm lan kòm Metòd pike syantifik la, oswa ki jan yo chwazi yon konfigirasyon baz done lè l sèvi avèk referans ak yon algorithm optimizekote Metòd pike syantifik la, oswa ki jan yo chwazi yon konfigirasyon baz done lè l sèvi avèk referans ak yon algorithm optimize; Ki kote Metòd pike syantifik la, oswa ki jan yo chwazi yon konfigirasyon baz done lè l sèvi avèk referans ak yon algorithm optimize — kantite paramèt konfigirasyon sistèm, konbyen nan paramèt sa yo genyen.

Ak valè metrik ki koresponn ak sa a Metòd pike syantifik la, oswa ki jan yo chwazi yon konfigirasyon baz done lè l sèvi avèk referans ak yon algorithm optimize ann endike li kòm
Metòd pike syantifik la, oswa ki jan yo chwazi yon konfigirasyon baz done lè l sèvi avèk referans ak yon algorithm optimize, Lè sa a, nou jwenn yon fonksyon: Metòd pike syantifik la, oswa ki jan yo chwazi yon konfigirasyon baz done lè l sèvi avèk referans ak yon algorithm optimize

Oke, lè sa a: tout bagay imedyatman vini desann nan, nan ka mwen an: prèske bliye nan epòk etidyan mwen an, algoritm pou chèche ekstrèm nan yon fonksyon.

Oke, men isit la yon kesyon òganizasyon ak aplike rive: ki algorithm yo sèvi ak.

  1. Nan sans - pou ou ka kode mwens alamen.
  2. E pou li travay, i.e. jwenn ekstrèm nan (si gen youn), byen, omwen pi vit pase desandan kowòdone.

Premye pwen an sijesyon ke nou bezwen gade nan direksyon pou kèk anviwònman kote algoritm sa yo te deja aplike, epi yo, nan kèk fòm, pare pou itilize nan kòd.
Oke, mwen konnen python и cran-r

Dezyèm pwen an vle di ke ou bezwen li sou algorithm yo tèt yo, ki sa yo ye, ki kondisyon yo ye, ak karakteristik yo nan travay yo.

Ak sa yo bay ka itil efè segondè - rezilta, oswa dirèkteman nan algorithm nan tèt li.

Oswa yo ka jwenn nan rezilta algorithm la.

Anpil depann sou kondisyon yo antre.

Pou egzanp, si, pou kèk rezon, ou bezwen jwenn yon rezilta pi vit, byen, ou bezwen gade nan direksyon algoritm desandan gradyan epi chwazi youn nan yo.

Oswa, si tan pa tèlman enpòtan, ou ka, pou egzanp, itilize metòd optimize stochastic, tankou yon algorithm jenetik.

Mwen pwopoze yo konsidere travay la nan apwòch sa a, chwazi konfigirasyon sistèm lan, lè l sèvi avèk yon algorithm jenetik, nan pwochen an, se konsa pale: travay laboratwa.

Orijinal:

  1. Se pou genyen, kòm yon sistèm sèvis: oracle xe 18c
  2. Kite li sèvi aktivite tranzaksyon ak objektif la: jwenn pi gwo debi posib nan subdatabase a, nan tranzaksyon/sec.
  3. Tranzaksyon yo ka trè diferan nan nati travay ak done ak kontèks travay la.
    Ann dakò ke sa yo se tranzaksyon ki pa trete yon gwo kantite done tabul.
    Nan sans ke yo pa jenere plis done defèt pase refè epi yo pa trete gwo pousantaj nan ranje ak tab gwo.

Sa yo se tranzaksyon ki chanje yon ranje nan yon tab plis oswa mwens gwo, ak yon ti kantite endèks sou tablo sa a.

Nan sitiyasyon sa a: pwodiktivite nan subdatabase a pou trete tranzaksyon yo pral, ak yon rezèvasyon, dwe detèmine pa bon jan kalite a nan pwosesis pa baz done a redox.

Limit responsabilite nou - si nou pale espesyalman sou anviwònman yo subdb.

Paske, nan ka jeneral la, ka gen, pou egzanp, kadna tranzaksyon ant sesyon SQL, akòz konsepsyon an nan travay itilizatè ak done tabular ak / oswa modèl la tabular.

Ki, nan kou, pral gen yon efè depresyon sou metrik TPS la ak sa a pral yon faktè ekzojèn, relatif nan subdatabase a: byen, sa a se ki jan modèl la tabular yo te fèt ak travay la ak done nan li ki bloke rive.

Se poutèt sa, pou pite nan eksperyans la, nou pral eskli faktè sa a, ak anba a mwen pral klarifye egzakteman ki jan.

  1. Se pou nou sipoze, pou defini, ke 100% nan kòmandman SQL yo soumèt nan baz done a se kòmandman DML.
    Kite karakteristik itilizatè yo travay ak subdatabase a menm nan tès yo.
    Savwa: kantite sesyon skl, done tabul, ki jan sesyon skl travay avèk yo.
  2. Subd travay nan FORCE LOGGING, ARCHIVELOG mods. Mòd Flashback-baz done etenn, nan nivo subd.
  3. Refè mòso bwa: sitiye nan yon sistèm fichye separe, sou yon "disk" separe;
    Rès eleman fizik baz done a: nan yon lòt, sistèm dosye separe, sou yon "disk" separe:

Plis detay sou aparèy fizik la. eleman baz done laboratwa

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

Okòmansman, anba kondisyon chaj sa yo, mwen te vle sèvi ak tranzaksyon subd SLOB-utilite
Li gen yon karakteristik bèl bagay, mwen pral site otè a:

Nan kè SLOB se "metòd SLOB." Metòd SLOB la gen pou objaktif pou teste platfòm yo
san diskisyon aplikasyon. Yon moun pa ka kondwi maksimòm pèfòmans pyès ki nan konpitè
lè l sèvi avèk kòd aplikasyon ki, pou egzanp, mare nan aplikasyon bloke oswa menm
pataje Oracle Database blòk. Sa a dwat-gen anlè lè pataje done
nan blòk done! Men, SLOB-nan deplwaman default li-yo iminize kont diskisyon sa yo.

Deklarasyon sa a: koresponn, li ye.
Li se pratik kontwole degre nan paralelis nan sesyon cl, sa a se kle a -t lanse sèvis piblik la runit.sh soti nan SLOB
Pousantaj kòmandman DML reglemante, nan kantite mesaj tèks yo voye bay subd la, chak sesyon tèks, paramèt. UPDATE_PCT
Separeman ak trè pratik: SLOB tèt li, anvan ak apre sesyon chaj la - prepare yon statspack, oswa awr-snapshots (sa ki mete yo dwe prepare).

Sepandan, li te tounen soti ke SLOB pa sipòte sesyon SQL ki dire mwens pase 30 segonn.
Se poutèt sa, mwen premye kode pwòp mwen, vèsyon travayè-peyizan nan loader a, ak Lè sa a, li te rete nan operasyon.

Kite m 'klarifye sa loader a fè ak ki jan li fè li, pou klè.
Esansyèlman loader a sanble sa a:

Kòd travayè

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

Travayè yo lanse fason sa a:

Kouri travayè yo

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

Ak tab pou travayè yo prepare tankou sa a:

Kreye tab

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"

Moun sa yo. Pou chak travayè (pratikman: yon sesyon SQL separe nan DB a) yo kreye yon tab separe, ak ki travayè a ap travay.

Sa a asire absans la nan kadna tranzaksyon ant sesyon travayè yo.
Chak travayè: fè menm bagay la, ak pwòp tab li, tab yo tout se menm.
Tout travayè yo fè travay pou menm kantite tan.
Anplis, pou yon tan ase lontan pou ke, pou egzanp, yon switch boutèy demi lit ta definitivman rive, ak plis pase yon fwa.
Oke, kòmsadwa, depans ki asosye ak efè leve.
Nan ka mwen an, mwen configuré dire travay travayè yo nan 8 minit.

Yon moso nan yon rapò statspack ki dekri operasyon an nan subd la anba chaj

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

Retounen nan travay laboratwa a.
Nou pral, lòt bagay egal, varye valè paramèt sa yo nan subdatabase laboratwa a:

  1. Gwosè gwoup boutèy demi lit baz done yo. ranje valè: [32, 1024] MB;
  2. Kantite gwoup jounal nan baz done a. ranje valè: [2,32];
  3. log_archive_max_processes ranje valè: [1,8];
  4. commit_logging de valè yo gen dwa: batch|immediate;
  5. commit_wait de valè yo gen dwa: wait|nowait;
  6. log_buffer ranje valè: [2,128] MB.
  7. log_checkpoint_timeout ranje valè: [60,1200] segonn
  8. db_writer_processes ranje valè: [1,4]
  9. undo_retention ranje valè: [30; 300] segonn
  10. transactions_per_rollback_segment ranje valè: [1,8]
  11. disk_asynch_io de valè yo gen dwa: true|false;
  12. filesystemio_options valè sa yo gen dwa: none|setall|directIO|asynch;
  13. db_block_checking valè sa yo gen dwa: OFF|LOW|MEDIUM|FULL;
  14. db_block_checksum valè sa yo gen dwa: OFF|TYPICAL|FULL;

Yon moun ki gen eksperyans nan kenbe baz done Oracle ka sètènman deja di ki sa ak ki valè yo ta dwe mete, soti nan paramèt yo espesifye ak valè akseptab yo, yo nan lòd yo jwenn pi gwo pwodiktivite nan baz done a pou travay la ak done ki endike nan kòd aplikasyon an, isit la pi wo a.

Men.

Pwen nan travay laboratwa a se montre ke algorithm nan optimize tèt li pral klarifye sa a pou nou relativman byen vit.

Pou nou, tout sa ki rete se gade nan dokiman an, atravè sistèm nan customizable, jis ase yo chèche konnen ki paramèt chanje ak nan ki chenn.
Epi tou: kòd kòd ki pral itilize pou travay ak sistèm koutim algorithm optimize chwazi a.

Se konsa, kounye a sou kòd la.
Mwen te pale pi wo a sou cran-r, sa vle di: tout manipilasyon ak sistèm nan Customized yo òkestre nan fòm lan nan yon script R.

Travay aktyèl la, analiz, seleksyon pa valè metrik, vektè eta sistèm: sa a se yon pake GA (dokiman an)
Pake a, nan ka sa a, pa trè apwopriye, nan sans ke li espere vektè (kwomozòm, si an tèm de pake a) yo dwe espesifye nan fòm lan nan fisèl nan nimewo ak yon pati fraksyon.

Ak vektè mwen an, ki soti nan valè yo nan paramèt yo anviwònman: sa yo se 14 kantite - nonm antye relatif ak valè fisèl.

Pwoblèm nan, nan kou, fasil evite lè w bay kèk nimewo espesifik nan valè fisèl.

Kidonk, nan fen a, moso prensipal la nan script R la sanble sa a:

Rele 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

Isit la, avèk èd la lower и upper atribi souroutine yo ga esansyèlman, yo espesifye yon zòn nan espas rechèch la, kote yo pral fè rechèch pou yon vektè sa yo (oswa vektè) pou yo pral jwenn valè maksimòm fonksyon fizik la.

Souroutine ga fè yon rechèch ki maksimize fonksyon fizik la.

Oke, Lè sa a, li sanble ke, nan ka sa a, li nesesè ke fonksyon an Fitness, konprann vektè a kòm yon seri valè pou sèten paramèt nan subd la, resevwa yon metrik nan subd la.

Sa vle di: konbyen, ak yon konfigirasyon subd bay ak yon chaj bay sou subd la: subd la trete tranzaksyon pou chak segonn.

Sa vle di, lè w ap dewoule, yo dwe fè plizyè etap sa yo andedan fonksyon Fitness la:

  1. Pwosesis vektè opinyon nimewo yo - konvèti li an valè pou paramèt subdata yo.
  2. Yon tantativ pou kreye yon kantite gwoup refè nan yon gwosè bay yo. Anplis, tantativ la ka pa reyisi.
    Gwoup magazin ki te deja egziste nan subd la, nan kèk kantite ak nan kèk gwosè, pou pite a nan eksperyans la - d.b. efase.
  3. Si pwen anvan an gen siksè: espesifye valè yo nan paramèt konfigirasyon nan baz done a (ankò: ka gen yon echèk)
  4. Si etap anvan an reyisi: sispann subd la, kòmanse subd la pou valè paramèt ki fèk espesifye yo pran efè. (ankò: ka gen yon pwoblèm)
  5. Si etap anvan an reyisi: fè yon tès chaj. jwenn mezi nan subd.
  6. Retounen subd la nan eta orijinal li, i.e. efase lòt gwoup boutèy demi lit, retounen konfigirasyon orijinal subdatabase a pou travay.

Kòd fonksyon Fòm

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

Sa. tout travay: fè nan fonksyon kapasite a.

ga-subroutine a trete vektè, oswa, pi kòrèkteman, kwomozòm.
Nan ki, sa ki pi enpòtan pou nou se seleksyon an nan kwomozòm ak jèn pou ki fonksyon an kapasite pwodui gwo valè.

Sa a, nan sans, se pwosesis pou chèche seri optimal nan kwomozòm lè l sèvi avèk yon vektè nan yon espas rechèch N-dimansyon.

Trè klè, detaye eksplikasyon, ak egzanp R-kod, travay yon algorithm jenetik.

Mwen ta renmen note separeman de pwen teknik.

Apèl oksilyè soti nan fonksyon an evaluate, pou egzanp, sispann-kòmanse, mete valè a nan paramèt la subd, yo fèt ki baze sou cran-r fonksyon system2

Avèk èd nan ki: kèk bash script oswa kòmand yo rele.

Pou egzanp:

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

Dezyèm pwen an se liy lan, evaluate fonksyon, ak ekonomize yon valè metrik espesifik ak vektè akor korespondan li yo nan yon dosye log:

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

Sa a enpòtan, paske nan etalaj done sa a, li pral posib jwenn plis enfòmasyon sou kilès nan eleman yo nan vektè a akor ki gen yon efè pi gwo oswa pi piti sou valè metrik la.

Sa vle di: li pral posib pou fè analiz atribi-importamce.

Se konsa, sa ki ka rive?

Nan fòm graf, si w bay lòd tès yo nan lòd metrik monte, foto a se jan sa a:

Metòd pike syantifik la, oswa ki jan yo chwazi yon konfigirasyon baz done lè l sèvi avèk referans ak yon algorithm optimize

Gen kèk done ki koresponn ak valè ekstrèm metrik la:
Metòd pike syantifik la, oswa ki jan yo chwazi yon konfigirasyon baz done lè l sèvi avèk referans ak yon algorithm optimize
Isit la, nan ekran an ak rezilta yo, mwen pral klarifye: valè yo nan vektè a akor yo bay an tèm de kòd la fonksyon Fitness, pa an tèm de lis nimewo a nan paramèt / chenn nan valè paramèt, ki te fòmile. pi wo a nan tèks la.

Oke. Èske se yon anpil oswa yon ti kras, ~ 8 mil tps: yon kesyon separe.
Nan kad travay laboratwa a, figi sa a pa enpòtan, sa ki enpòtan se dinamik yo, ki jan valè sa a chanje.

Dinamik isit la bon.
Li evidan ke omwen yon faktè siyifikativman enfliyanse valè metrik la, ga-algorithm, klasman nan vektè kwomozòm yo: kouvri.
Jije pa dinamik yo jistis wòdpòte nan valè yo koub, gen omwen yon lòt faktè ki, byenke siyifikativman pi piti, gen yon enfliyans.

Sa a se kote ou bezwen li attribute-importance analiz pou konprann ki atribi (byen, nan ka sa a, eleman nan vektè akor) ak konbyen yo enfliyanse valè metrik la.
Ak nan enfòmasyon sa a: konprann ki faktè ki te afekte pa chanjman nan atribi enpòtan.

kouri attribute-importance posib nan diferan fason.

Pou rezon sa yo, mwen renmen algorithm la randomForest Pake R ki gen menm non (dokiman an)
randomForest, jan mwen konprann travay li an jeneral ak apwòch li nan evalye enpòtans ki genyen nan atribi an patikilye, bati yon modèl sèten nan depandans nan varyab repons lan sou atribi yo.

Nan ka nou an, varyab repons lan se yon metrik yo jwenn nan baz done a nan tès chaj: tps;
Ak atribi yo se eleman nan vektè a akor.

Se konsa, isit la randomForest evalye enpòtans chak atribi modèl ak de nimewo: %IncMSE — ki jan prezans/absans atribi sa a nan yon modèl chanje kalite MSE modèl sa a (Mean Squared Error);

Ak IncNodePurity se yon nimewo ki reflete ki jan byen, ki baze sou valè yo nan atribi sa a, yon seri done ak obsèvasyon ka divize, se konsa ke nan yon pati gen done ki gen yon valè nan metrik yo eksplike, ak nan lòt la ak yon lòt valè metrik la.
Oke, sa vle di: nan ki pwen sa a se yon atribi klasifikasyon (mwen te wè eksplikasyon ki pi klè, nan lang Ris sou RandomForest isit la).

Kòd R travayè-peyizan pou trete yon seri done ak rezilta tès chaj yo:

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

Ou ka dirèkteman chwazi hyperparameters yo nan algorithm la ak men ou epi, konsantre sou bon jan kalite a nan modèl la, chwazi yon modèl ki pi byen ranpli prediksyon yo sou dataset la validation.
Ou ka ekri kèk kalite fonksyon pou travay sa a (nan chemen an, ankò, lè l sèvi avèk kèk kalite algorithm optimize).

Ou ka itilize pake R caret, pa pwen an enpòtan.

Kòm yon rezilta, nan ka sa a, yo jwenn rezilta sa a pou evalye degre nan enpòtans atribi yo:

Metòd pike syantifik la, oswa ki jan yo chwazi yon konfigirasyon baz done lè l sèvi avèk referans ak yon algorithm optimize

Oke. Kidonk, nou ka kòmanse refleksyon mondyal:

  1. Li sanble ke pi enpòtan an, anba kondisyon tès sa yo, se te paramèt la commit_wait
    Teknikman, li presize mòd nan ekzekisyon nan operasyon an io nan ekri done refè soti nan tanpon nan boutèy demi lit subdb nan gwoup aktyèl la boutèy demi lit: synchrone oswa asynchrone.
    Valè nowait ki rezilta nan yon ogmantasyon prèske vètikal, miltip nan valè a nan metrik tps la: sa a se enklizyon de mòd nan asynchrone io nan gwoup refè.
    Yon kesyon separe se si wi ou non ou ta dwe fè sa nan yon baz done manje. Isit la mwen limite tèt mwen jis deklare: sa a se yon faktè enpòtan.
  2. Li lojik ke gwosè a nan tanpon nan boutèy demi lit nan subd: vire soti nan yon faktè enpòtan.
    Pi piti gwosè a nan tanpon boutèy la, mwens kapasite tanpon li yo, pi souvan li debòde ak/oswa enkapasite pou asiyen yon zòn gratis nan li pou yon pòsyon nan nouvo done redox.
    Sa vle di: reta ki asosye ak alokasyon espas nan tanpon boutèy la ak/oswa jete done refè ki soti nan li nan gwoup refè.
    Reta sa yo, nan kou, ta dwe ak afekte debi baz done a pou tranzaksyon yo.
  3. Paramèt db_block_checksum: byen, tou, an jeneral li klè - pwosesis tranzaksyon mennen nan fòmasyon nan blòk darty nan kachèt tanpon subdatabase a.
    Ki, lè tcheke checksums de datablocks pèmèt, baz done a gen pou trete - kalkile checksums sa yo nan kò datablock la, tcheke yo ak sa ki ekri nan tèt datablock: matche/pa matche.
    Travay sa a, ankò, pa ka pa retade pwosesis done, epi kòmsadwa, paramèt la ak mekanis ki fikse paramèt sa a vin enpòtan.
    Se poutèt sa vandè a ofri, nan dokiman an pou paramèt sa a, diferan valè pou li (paramèt la) ak nòt ke wi, pral gen yon enpak, men, byen, ou ka chwazi valè diferan, jiska "off" ak enpak diferan.

Oke, yon konklizyon mondyal.

Apwòch la, an jeneral, vire soti yo dwe byen travay.

Li byen pèmèt tèt li, nan premye etap yo byen bonè nan tès chaj nan yon sistèm sèvis sèten, yo nan lòd yo chwazi (sistèm) konfigirasyon optimal li yo pou chaj la, pa fouye twòp nan spesifik yo nan mete kanpe sistèm nan pou chaj la.

Men, li pa eskli li konplètman - omwen nan nivo konpreyansyon yo genyen: yo dwe konnen sistèm lan sou "bouton ajisteman yo" ak ranje yo akseptab nan wotasyon bouton sa yo.

Apwòch la ka Lè sa a, relativman byen vit jwenn konfigirasyon sistèm nan pi bon.
Ak baze sou rezilta tès yo, li posib pou jwenn enfòmasyon sou nati relasyon ki genyen ant mezi pèfòmans sistèm yo ak valè paramèt anviwònman sistèm yo.

Ki, nan kou, ta dwe kontribye nan Aparisyon nan konpreyansyon sa a trè gwo twou san fon nan sistèm nan, operasyon li yo, omwen anba yon chaj bay yo.

Nan pratik, sa a se yon echanj nan depans yo nan konpreyansyon sistèm nan Customized pou depans yo nan prepare tès sa yo nan sistèm nan.

Mwen ta renmen remake separeman: nan apwòch sa a, degre nan konpetans nan tès sistèm nan kondisyon yo opere ke li pral genyen nan operasyon komèsyal yo enpòtan anpil.

Mèsi pou atansyon ou ak tan ou.

Sous: www.habr.com

Add nouvo kòmantè