Ang pamaagi sa siyentipikanhong poke, o kung giunsa pagpili ang usa ka pagsumpo sa database gamit ang mga benchmark ug usa ka algorithm sa pag-optimize

Здравствуйте.

Nakahukom ko nga ipaambit ang akong nakit-an - ang bunga sa hunahuna, pagsulay ug sayup.
Sa kinatibuk-an: dili kini usa ka pagpangita, siyempre - kining tanan kinahanglan nga nahibal-an sa dugay nga panahon, sa mga nalambigit sa gigamit nga pagproseso sa datos sa istatistika ug pag-optimize sa bisan unsang mga sistema, dili kinahanglan nga espesipiko ang DBMS.
Ug: oo, nahibal-an nila, nagsulat sila mga makapaikag nga artikulo sa ilang panukiduki, usa ka panig-ingnan (UPD.: sa mga komento ilang gipunting ang usa ka makapaikag kaayo nga proyekto: ottertune )
Sa laing bahin: wala koy makita nga kaylap nga paghisgot o pagsabwag niini nga pamaagi sa Internet taliwala sa mga espesyalista sa IT, DBA.

Busa, hangtod sa punto.

Atong hunahunaon nga kita adunay usa ka buluhaton: sa pag-set up sa usa ka piho nga sistema sa pag-alagad sa pag-alagad sa usa ka matang sa trabaho.

Nahibal-an kini bahin sa kini nga trabaho: kung unsa kini, kung giunsa pagsukod ang kalidad sa kini nga trabaho, ug kung unsa ang sukdanan sa pagsukod niini nga kalidad.

Atong isipon usab nga kini mas daghan o dili kaayo nahibal-an ug nasabtan: eksakto kung giunsa ang pagtrabaho sa (o uban) niini nga sistema sa serbisyo.

"More or less" - kini nagpasabot nga posible nga mag-andam (o makuha kini gikan sa usa ka dapit) sa usa ka piho nga himan, utility, serbisyo nga mahimong synthesize ug magamit sa sistema nga adunay test load nga igo nga igo sa kung unsa ang anaa sa produksyon, sa mga kondisyon nga igo nga igo alang sa pagtrabaho sa produksiyon.

Aw, atong hunahunaon nga ang usa ka hugpong sa mga adjustment nga mga parameter alang niini nga sistema sa serbisyo nahibal-an, nga mahimong magamit sa pag-configure niini nga sistema sa mga termino sa pagka-produktibo sa trabaho niini.

Ug unsa ang problema - wala’y igo nga kompleto nga pagsabut sa kini nga sistema sa serbisyo, usa nga nagtugot kanimo nga eksperto nga i-configure ang mga setting sa kini nga sistema alang sa umaabot nga pagkarga sa usa ka gihatag nga plataporma ug makuha ang kinahanglan nga produktibidad sa sistema.

Aw. Kini mao ang hapit kanunay.

Unsay imong mahimo dinhi?

Aw, ang una nga butang nga naa sa hunahuna mao ang pagtan-aw sa dokumentasyon alang sa kini nga sistema. Sabta kung unsa ang madawat nga mga sakup alang sa mga kantidad sa mga parameter sa pag-adjust. Ug, pananglitan, gamit ang coordinate descent method, pilia ang mga kantidad alang sa mga parameter sa sistema sa mga pagsulay.

Mga. hatagi ang sistema sa usa ka matang sa pag-configure, sa porma sa usa ka piho nga hugpong sa mga kantidad alang sa mga parameter sa pagsumpo niini.

Ibutang ang usa ka pagsulay nga load niini, gamit kini nga tool-utility, load generator.
Ug tan-awa ang bili - ang tubag, o usa ka sukatan sa kalidad sa sistema.

Ang ikaduha nga hunahuna tingali mao ang konklusyon nga kini usa ka taas nga panahon.

Aw, kana mao: kung adunay daghang mga setting sa mga parameter, kung ang mga sakup sa ilang mga kantidad nga gipadagan dako, kung ang matag indibidwal nga pagsulay sa pagkarga nagkinahanglan og daghang oras aron makompleto, nan: oo, kining tanan mahimo’g dili madawat. dugay na.

Bueno, ania ang imong masabtan ug mahinumduman.

Mahibal-an nimo nga sa set sa mga kantidad sa mga parameter sa setting sa sistema sa serbisyo adunay usa ka vector, ingon usa ka han-ay sa pipila nga mga kantidad.

Ang matag ingon nga vector, ang uban nga mga butang managsama (nga dili kini apektado sa kini nga vector), katumbas sa usa ka hingpit nga tino nga kantidad sa metric - usa ka timailhan sa kalidad sa operasyon sa sistema sa ilawom sa usa ka pagsulay nga pagkarga.

ie

Atong itudlo ang sistema sa configuration vector ingon Ang pamaagi sa siyentipikanhong poke, o kung giunsa pagpili ang usa ka pagsumpo sa database gamit ang mga benchmark ug usa ka algorithm sa pag-optimizediin Ang pamaagi sa siyentipikanhong poke, o kung giunsa pagpili ang usa ka pagsumpo sa database gamit ang mga benchmark ug usa ka algorithm sa pag-optimize; asa Ang pamaagi sa siyentipikanhong poke, o kung giunsa pagpili ang usa ka pagsumpo sa database gamit ang mga benchmark ug usa ka algorithm sa pag-optimize — gidaghanon sa mga parameter sa pagsumpo sa sistema, pila niini nga mga parameter ang anaa.

Ug ang bili sa metric nga katumbas niini Ang pamaagi sa siyentipikanhong poke, o kung giunsa pagpili ang usa ka pagsumpo sa database gamit ang mga benchmark ug usa ka algorithm sa pag-optimize ipaila nato kini nga
Ang pamaagi sa siyentipikanhong poke, o kung giunsa pagpili ang usa ka pagsumpo sa database gamit ang mga benchmark ug usa ka algorithm sa pag-optimize, unya makakuha kami usa ka function: Ang pamaagi sa siyentipikanhong poke, o kung giunsa pagpili ang usa ka pagsumpo sa database gamit ang mga benchmark ug usa ka algorithm sa pag-optimize

Aw, unya: ang tanan diha-diha dayon moabut ngadto sa, sa akong kaso: hapit nakalimtan gikan sa akong mga adlaw sa estudyante, algorithms alang sa pagpangita alang sa extremum sa usa ka function.

Okay, apan dinhi mitungha ang usa ka organisasyonal ug gipadapat nga pangutana: unsang algorithm ang gamiton.

  1. Sa diwa - aron dili ka maka-code pinaagi sa kamot.
  2. Ug aron kini molihok, i.e. nakit-an ang extremum (kung adunay usa), maayo, labing menos mas paspas kay sa coordinate nga kagikan.

Ang unang punto nagpakita nga kinahanglan natong tan-awon ang pipila ka mga palibot diin ang maong mga algorithm gipatuman na, ug, sa usa ka porma, andam na nga gamiton sa code.
Aw, kabalo ko python и cran-r

Ang ikaduha nga punto nagpasabut nga kinahanglan nimo nga basahon ang bahin sa mga algorithm mismo, kung unsa sila, kung unsa ang ilang mga kinahanglanon, ug ang mga bahin sa ilang trabaho.

Ug kung unsa ang ilang gihatag mahimong mapuslanon nga mga epekto - mga resulta, o direkta gikan sa algorithm mismo.

O sila mahimong makuha gikan sa mga resulta sa algorithm.

Daghan ang nagdepende sa mga kondisyon sa pag-input.

Pananglitan, kung, sa usa ka hinungdan, kinahanglan nimo nga makakuha usa ka resulta nga mas paspas, maayo, kinahanglan nimo nga tan-awon ang mga algorithm sa gradient descent ug pilia ang usa niini.

O, kung ang oras dili kaayo hinungdanon, mahimo nimo, pananglitan, mogamit mga pamaagi sa pag-optimize sa stochastic, sama sa genetic algorithm.

Gisugyot ko nga ikonsiderar ang buhat niini nga pamaagi, pagpili sa pagsumpo sa sistema, gamit ang usa ka genetic algorithm, sa sunod, aron isulti: buhat sa laboratoryo.

Orihinal:

  1. Himoa nga adunay, ingon nga usa ka sistema sa pag-alagad: oracle xe 18c
  2. Himoa nga kini magsilbi nga transactional nga kalihokan ug ang tumong: aron makuha ang pinakataas nga posible nga throughput sa subdatabase, sa mga transaksyon/sec.
  3. Ang mga transaksyon mahimong lahi kaayo sa kinaiya sa pagtrabaho sa datos ug sa konteksto sa trabaho.
    Mag-uyon ta nga kini mga transaksyon nga wala magproseso sa daghang mga datos sa tabular.
    Sa diwa nga dili sila makamugna ug dugang undo data kay sa redo ug dili moproseso ug dagkong porsyento sa mga laray ug dagkong mga lamesa.

Kini ang mga transaksyon nga nagbag-o sa usa ka laray sa usa o dili kaayo dako nga lamesa, nga adunay gamay nga gidaghanon sa mga indeks sa kini nga lamesa.

Niini nga sitwasyon: ang pagka-produktibo sa subdatabase alang sa pagproseso sa mga transaksyon, nga adunay reserbasyon, matino pinaagi sa kalidad sa pagproseso sa redox database.

Disclaimer - kung maghisgot ta bahin sa mga setting sa subdb.

Tungod kay, sa kinatibuk-ang kaso, mahimo nga adunay, pananglitan, mga transactional lock tali sa mga sesyon sa SQL, tungod sa disenyo sa trabaho sa user nga adunay tabular data ug/o ang tabular nga modelo.

Nga, siyempre, adunay usa ka makapaguol nga epekto sa tps metric ug kini mahimong usa ka exogenous nga butang, nga may kalabotan sa subdatabase: maayo, mao kini ang paagi nga ang tabular nga modelo gidisenyo ug ang trabaho nga adunay mga datos niini nga ang mga blockage mahitabo.

Busa, alang sa kaputli sa eksperimento, kita dili iapil niini nga butang, ug sa ubos akong ipatin-aw sa tukma kon sa unsang paagi.

  1. Atong hunahunaon, alang sa pagkatino, nga 100% sa mga SQL nga mga sugo nga gisumite sa database kay DML nga mga sugo.
    Himoa nga ang mga kinaiya sa user magtrabaho uban sa subdatabase nga managsama sa mga pagsulay.
    Nga mao: ang gidaghanon sa mga sesyon sa skl, datos sa tabular, kung giunsa ang mga sesyon sa skl nagtrabaho uban kanila.
  2. Subd nagtrabaho sa FORCE LOGGING, ARCHIVELOG mga mod. Ang flashback-database mode gipalong, sa subd level.
  3. Pag-usab sa mga troso: nahimutang sa usa ka bulag nga sistema sa file, sa usa ka bulag nga "disk";
    Ang nahabilin nga pisikal nga bahin sa database: sa lain, lahi nga sistema sa file, sa usa ka lahi nga "disk":

Dugang nga mga detalye bahin sa pisikal nga aparato. mga sangkap sa database sa laboratoryo

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

Sa sinugdan, ubos niining mga kondisyon sa pagkarga, gusto nakong gamiton ang transaction subd SLOB-utility
Kini adunay usa ka talagsaon nga bahin, akong kutloon ang tagsulat:

Sa kasingkasing sa SLOB mao ang "SLOB nga pamaagi." Ang Pamaagi sa SLOB nagtumong sa pagsulay sa mga plataporma
walay panagbingkil sa aplikasyon. Ang usa dili makamaneho sa labing taas nga pasundayag sa hardware
gamit ang code sa aplikasyon nga, pananglitan, gigapos sa pag-lock sa aplikasyon o bisan
pagpaambit sa mga bloke sa Oracle Database. Husto kana—adunay overhead sa pagpaambit sa datos
sa mga bloke sa datos! Apan ang SLOB—sa default nga pag-deploy niini—wala’y mahimo sa ingon nga panagbingkil.

Kini nga deklarasyon: katumbas, kini mao.
Kombenyente ang pag-regulate sa lebel sa parallelism sa mga sesyon sa cl, kini ang yawe -t ilunsad ang utility runit.sh gikan sa SLOB
Ang porsyento sa mga sugo sa DML gi-regulate, sa gidaghanon sa mga text message nga gipadala sa subd, matag text session, parameter UPDATE_PCT
Gilain ug dali kaayo: SLOB mismo, sa wala pa ug pagkahuman sa sesyon sa pagkarga - nag-andam usa ka statspack, o awr-snapshots (unsay gitakda nga andamon).

Apan, kini nahimo nga SLOB wala nagsuporta sa mga sesyon sa SQL nga adunay gidugayon nga ubos sa 30 segundos.
Busa, una nakong gi-code ang akong kaugalingon, mamumuo-mag-uuma nga bersyon sa loader, ug dayon kini nagpabilin sa operasyon.

Patin-aw nako ang bahin sa loader - kung unsa ug giunsa kini, alang sa katin-awan.
Sa tinuud, ang loader ingon niini:

Kodigo sa trabahante

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

Ang mga trabahante gilunsad niining paagiha:

Nagdagan nga mga trabahante

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

Ug ang mga lamesa alang sa mga trabahante giandam sama niini:

Paghimo og mga lamesa

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"

Mga. Alang sa matag trabahante (sa praktikal: usa ka bulag nga sesyon sa SQL sa DB) usa ka lahi nga lamesa ang gihimo, diin ang trabahante nagtrabaho.

Gisiguro niini ang pagkawala sa mga kandado sa transaksyon tali sa mga sesyon sa mamumuo.
Ang matag mamumuo: nagbuhat sa samang butang, sa iyang kaugalingong lamesa, ang mga lamesa managsama ra.
Ang tanan nga mga trabahante naghimo sa trabaho sa parehas nga gidugayon sa oras.
Dugang pa, alang sa usa ka taas nga igo nga panahon aron nga, pananglitan, ang usa ka log switch siguradong mahitabo, ug labaw pa sa kausa.
Aw, sumala niana, mitungha ang kaubang mga gasto ug epekto.
Sa akong kaso, akong gi-configure ang gidugayon sa trabaho sa mga trabahante sa 8 minuto.

Usa ka piraso sa report sa statspack nga naghulagway sa operasyon sa subd ubos sa load

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

Pagbalik sa trabaho sa laboratoryo.
Kami, ang ubang mga butang nga managsama, magbag-o sa mga kantidad sa mga mosunud nga mga parameter sa subdatabase sa laboratoryo:

  1. Gidak-on sa database log nga mga grupo. sakup sa kantidad: [32, 1024] MB;
  2. Gidaghanon sa mga grupo sa journal sa database. sakup sa kantidad: [2,32];
  3. log_archive_max_processes sakup sa kantidad: [1,8];
  4. commit_logging duha ka kantidad ang gitugotan: batch|immediate;
  5. commit_wait duha ka kantidad ang gitugotan: wait|nowait;
  6. log_buffer sakup sa kantidad: [2,128] MB.
  7. log_checkpoint_timeout sakup sa kantidad: [60,1200] segundos
  8. db_writer_processes sakup sa kantidad: [1,4]
  9. undo_retention sakup sa kantidad: [30;300] segundos
  10. transactions_per_rollback_segment sakup sa kantidad: [1,8]
  11. disk_asynch_io duha ka kantidad ang gitugotan: true|false;
  12. filesystemio_options gitugotan ang mosunod nga mga kantidad: none|setall|directIO|asynch;
  13. db_block_checking gitugotan ang mosunod nga mga kantidad: OFF|LOW|MEDIUM|FULL;
  14. db_block_checksum gitugotan ang mosunod nga mga kantidad: OFF|TYPICAL|FULL;

Ang usa ka tawo nga adunay kasinatian sa pagpadayon sa mga database sa Oracle siguradong makasulti na kung unsa ug kung unsa nga mga kantidad ang kinahanglan itakda, gikan sa gitakda nga mga parameter ug ang ilang madawat nga mga kantidad, aron makuha ang labi ka produktibo sa database alang sa trabaho nga adunay datos nga gipakita sa ang code sa aplikasyon, dinhi sa ibabaw.

Apan.

Ang punto sa buhat sa laboratoryo mao ang pagpakita nga ang algorithm sa pag-optimize mismo ang magpatin-aw niini alang kanato nga dali.

Alang kanamo, ang nahabilin mao ang pagtan-aw sa dokumento, pinaagi sa napasadya nga sistema, igo ra aron mahibal-an kung unsang mga parameter ang usbon ug kung unsang mga sakup.
Ug usab: code sa code nga gamiton sa pagtrabaho uban sa naandan nga sistema sa pinili nga optimization algorithm.

Busa, karon mahitungod sa code.
Akong gihisgutan sa ibabaw cran-r, i.e.: ang tanan nga mga manipulasyon sa customized nga sistema gi-orkestra sa porma sa usa ka R script.

Ang aktuwal nga buluhaton, pagtuki, pagpili pinaagi sa metric nga kantidad, sistema sa estado vectors: kini usa ka pakete GA (dokumentasyon)
Ang pakete, sa kini nga kaso, dili kaayo angay, sa diwa nga kini nagpaabut sa mga vectors (chromosome, kung sa mga termino sa pakete) nga ipiho sa porma sa mga kuldas sa mga numero nga adunay fractional nga bahin.

Ug ang akong vector, gikan sa mga kantidad sa mga parameter sa setting: kini ang 14 nga gidaghanon - mga integer ug mga kantidad sa string.

Ang problema, siyempre, dali nga malikayan pinaagi sa pag-assign sa pipila ka piho nga mga numero sa mga kantidad sa string.

Busa, sa katapusan, ang nag-unang piraso sa R ​​script ingon niini:

Tawag sa 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

Dinhi, uban sa tabang lower и upper subroutine nga mga hiyas ga esensya, usa ka lugar sa search space ang gipiho, diin ang usa ka pagpangita ipahigayon alang sa ingon nga usa ka vector (o mga vector) diin ang labing taas nga kantidad sa fitness function makuha.

Ang ga subroutine naghimo sa usa ka pagpangita nga nagpadako sa fitness function.

Aw, unya, kini nahimo nga, sa kini nga kaso, kinahanglan nga ang fitness function, nga masabtan ang vector ingon usa ka hugpong sa mga kantidad alang sa pipila nga mga parameter sa subd, makadawat usa ka metric gikan sa subd.

Kana mao: pila, nga adunay gihatag nga subd setup ug usa ka gihatag nga load sa subd: ang subd nagproseso sa mga transaksyon kada segundo.

Kana mao, kung gibuksan, ang mosunod nga multi-step kinahanglan nga himuon sa sulod sa fitness function:

  1. Pagproseso sa input vector sa mga numero - pagbag-o kini sa mga kantidad alang sa mga parameter sa subdata.
  2. Usa ka pagsulay sa paghimo sa usa ka gihatag nga gidaghanon sa mga redo nga grupo sa usa ka gihatag nga gidak-on. Dugang pa, ang pagsulay mahimong dili molampos.
    Mga grupo sa magasin nga anaa na sa subd, sa pipila ka gidaghanon ug sa pipila ka gidak-on, alang sa kaputli sa eksperimento - d.b. gipapas.
  3. Kung malampuson ang miaging punto: pagtino sa mga kantidad sa mga parameter sa pagsumpo sa database (pag-usab: mahimong adunay kapakyasan)
  4. Kung malampuson ang miaging lakang: paghunong sa subd, pagsugod sa subd aron ang bag-ong gipiho nga mga kantidad sa parameter molihok. (pag-usab: tingali adunay glitch)
  5. Kung malampuson ang miaging lakang: paghimo usa ka pagsulay sa pagkarga. pagkuha metrics gikan sa subd.
  6. Ibalik ang subd sa orihinal nga kahimtang niini, i.e. kuhaa ang dugang nga mga grupo sa log, ibalik ang orihinal nga pagsumpo sa subdatabase aron molihok.

Fitness function code

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

Nga. tanan nga trabaho: gihimo sa fitness function.

Ang ga-subroutine nagproseso sa mga vector, o, sa mas tukma, mga chromosome.
Diin, ang labing hinungdanon alang kanamo mao ang pagpili sa mga chromosome nga adunay mga gene diin ang function sa kabaskog nagpatunghag daghang mga kantidad.

Kini, sa esensya, mao ang proseso sa pagpangita sa labing maayo nga set sa mga chromosome gamit ang usa ka vector sa usa ka N-dimensional nga wanang sa pagpangita.

Klaro kaayo, detalyado pagpasabut, uban ang mga pananglitan sa R-code, ang buhat sa usa ka genetic algorithm.

Gusto nakong ibulag ang duha ka teknikal nga punto.

Auxiliary nga mga tawag gikan sa function evaluate, pananglitan, paghunong-pagsugod, pagtakda sa bili sa subd parameter, gihimo base sa cran-r mga gimbuhaton system2

Uban sa tabang niini: ang pipila ka bash script o sugo gitawag.

Pananglitan:

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

Ang ikaduhang punto mao ang linya, evaluate functions, uban ang pagtipig sa usa ka piho nga metric nga kantidad ug ang katugbang nga tuning vector sa usa ka log file:

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

Mahinungdanon kini, tungod kay gikan sa kini nga han-ay sa datos, mahimo’g makuha ang dugang nga kasayuran kung kinsa sa mga sangkap sa tuning vector ang adunay labi ka dako o gamay nga epekto sa metric nga kantidad.

Sa ato pa: mahimong posible ang pagpahigayon ug attribute-importamce analysis.

Busa unsay mahitabo?

Sa graph nga porma, kung mag-order ka sa mga pagsulay sa pagsaka sa metric order, ang hulagway mao ang mosunod:

Ang pamaagi sa siyentipikanhong poke, o kung giunsa pagpili ang usa ka pagsumpo sa database gamit ang mga benchmark ug usa ka algorithm sa pag-optimize

Ang pila ka datos nga katumbas sa grabe nga mga kantidad sa sukatan:
Ang pamaagi sa siyentipikanhong poke, o kung giunsa pagpili ang usa ka pagsumpo sa database gamit ang mga benchmark ug usa ka algorithm sa pag-optimize
Dinhi, sa screenshot nga adunay mga resulta, akong ipatin-aw: ang mga kantidad sa tuning vector gihatag sa mga termino sa fitness function code, dili sa mga termino sa lista sa numero sa mga parameter / range sa mga kantidad sa parameter, nga giporma. sa ibabaw sa teksto.

Aw. Daghan ba o gamay, ~8 mil tps: lahi nga pangutana.
Sulod sa gambalay sa buhat sa laboratoryo, kini nga numero dili importante, unsa ang importante mao ang dynamics, sa unsa nga paagi kini nga bili kausaban.

Ang dynamics dinhi maayo.
Dayag nga labing menos usa ka butang ang dakog impluwensya sa bili sa metric, ang ga-algorithm, paghan-ay sa mga chromosome vectors: gitabonan.
Sa paghukom sa medyo kusog nga dinamika sa mga kantidad sa kurba, adunay labing menos usa pa ka hinungdan nga, bisan kung labi ka gamay, adunay impluwensya.

Dinhi kinahanglan nimo kini attribute-importance pagtuki aron masabtan kung unsa nga mga hiyas (maayo, sa kini nga kaso, mga sangkap sa tuning vector) ug kung unsa ka dako ang ilang impluwensya sa metric nga kantidad.
Ug gikan sa kini nga kasayuran: sabta kung unsang mga hinungdan ang naapektuhan sa mga pagbag-o sa hinungdanon nga mga kinaiya.

run attribute-importance posible sa lainlaing paagi.

Alang niini nga mga katuyoan, ganahan ko sa algorithm randomForest R nga pakete sa parehas nga ngalan (dokumentasyon)
randomForest, ingon nga akong nasabtan ang iyang trabaho sa kinatibuk-an ug ang iyang pamaagi sa pagtimbang-timbang sa kamahinungdanon sa mga hiyas sa partikular, nagtukod sa usa ka piho nga modelo sa pagsalig sa tubag variable sa mga hiyas.

Sa among kaso, ang tubag nga variable usa ka metric nga nakuha gikan sa database sa mga pagsulay sa pagkarga: tps;
Ug ang mga hiyas mao ang mga sangkap sa tuning vector.

Busa dinhi randomForest nagtimbang-timbang sa kamahinungdanon sa matag modelo nga hiyas nga adunay duha ka numero: %IncMSE — kung giunsa ang presensya / pagkawala niini nga hiyas sa usa ka modelo nagbag-o sa kalidad sa MSE niini nga modelo (Mean Squared Error);

Ug ang IncNodePurity usa ka numero nga nagpakita kung unsa ka maayo, base sa mga kantidad sa kini nga hiyas, ang usa ka dataset nga adunay mga obserbasyon mahimong bahinon, aron sa usa ka bahin adunay datos nga adunay usa ka kantidad sa metric nga gipatin-aw, ug sa lain adunay laing bili sa metric.
Aw, kana mao: kung unsa kini ka klasipikasyon nga hiyas (Nakita nako ang labing tin-aw, Ruso-pinulongan nga katin-awan sa RandomForest dinhi).

Worker-peasant R-code para sa pagproseso sa usa ka dataset nga adunay mga resulta sa load tests:

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

Mahimo nimong direkta nga mapili ang mga hyperparameter sa algorithm gamit ang imong mga kamot ug, nga nagpunting sa kalidad sa modelo, pagpili usa ka modelo nga mas tukma nga nagtuman sa mga panagna sa dataset sa validation.
Mahimo nimong isulat ang usa ka matang sa function alang niini nga trabaho (sa paagi, usab, gamit ang usa ka matang sa algorithm sa pag-optimize).

Mahimo nimong gamiton ang R nga pakete caret, dili ang punto ang importante.

Ingon usa ka sangputanan, sa kini nga kaso, ang mosunud nga resulta makuha aron masusi ang lebel sa kamahinungdanon sa mga hiyas:

Ang pamaagi sa siyentipikanhong poke, o kung giunsa pagpili ang usa ka pagsumpo sa database gamit ang mga benchmark ug usa ka algorithm sa pag-optimize

Aw. Sa ingon, makasugod kita sa global nga pagpamalandong:

  1. Kini nahimo nga ang labing hinungdanon, sa ilawom sa kini nga mga kondisyon sa pagsulay, mao ang parameter commit_wait
    Sa teknikal, gipiho niini ang execution mode sa io operation sa pagsulat redo data gikan sa subdb log buffer ngadto sa kasamtangang log group: synchronous o asynchronous.
    bili nowait nga moresulta sa halos bertikal, daghang pagtaas sa bili sa tps metric: kini ang paglakip sa asynchronous io mode sa redo groups.
    Ang usa ka lahi nga pangutana mao kung kinahanglan ba nimo o dili kini buhaton sa usa ka database sa pagkaon. Dinhi gilimitahan nako ang akong kaugalingon sa pagsulti lang: kini usa ka hinungdanon nga hinungdan.
  2. Makataronganon nga ang gidak-on sa log buffer sa subd: nahimo nga hinungdanon nga hinungdan.
    Ang mas gamay nga gidak-on sa log buffer, mas gamay ang buffering nga kapasidad niini, mas kanunay kini moawas ug/o ang kawalay katakus sa paggahin ug libre nga lugar niini alang sa usa ka bahin sa bag-ong redox data.
    Kini nagpasabot: mga paglangay nga nalangkit sa paggahin og luna sa log buffer ug/o paglabay sa redo data gikan niini ngadto sa redo nga mga grupo.
    Kini nga mga paglangan, siyempre, kinahanglan ug makaapekto sa throughput sa database alang sa mga transaksyon.
  3. Parameter db_block_checksum: maayo, usab, sa kinatibuk-an kini klaro - ang pagproseso sa transaksyon modala ngadto sa pagporma sa darty blocks sa buffer cache sa subdatabase.
    Nga, kung ang pagsusi sa mga checksum sa mga datablock gipalihok, ang database kinahanglan nga magproseso - kuwentaha kini nga mga checksum gikan sa lawas sa datablock, susihon kini kung unsa ang nahisulat sa header sa datablock: mga tugma / wala magkatugma.
    Ang ingon nga trabaho, pag-usab, dili mahimo nga maglangan sa pagproseso sa datos, ug sa ingon, ang parameter ug ang mekanismo nga nagtakda niini nga parameter nahimo nga hinungdanon.
    Mao nga ang vendor nagtanyag, sa dokumentasyon alang sa kini nga parameter, lainlaing mga kantidad ug mga nota nga oo, adunay epekto, apan mahimo nimong pilion ang lainlaing mga kantidad, bisan ang "off" ug lainlaing mga epekto.

Aw, usa ka global nga konklusyon.

Ang pamaagi, sa kinatibuk-an, nahimo nga epektibo kaayo.

Gitugotan niya ang iyang kaugalingon, sa unang mga yugto sa pagsulay sa pagkarga sa usa ka sistema sa serbisyo, aron mapili ang (sistema) nga labing kaayo nga pag-configure alang sa pagkarga, nga dili mag-usisa pag-ayo sa mga detalye sa pag-set up sa sistema alang sa pagkarga.

Apan dili kini hingpit nga iapil - labing menos sa lebel sa pagsabut: ang sistema kinahanglan mahibal-an bahin sa "adjustment knobs" ug ang gitugotan nga mga sakup sa pagtuyok sa kini nga mga knobs.

Ang pamaagi mahimong dali nga makit-an ang kamalaumon nga pag-configure sa sistema.
Ug base sa mga resulta sa pagsulay, posible nga makakuha og kasayuran mahitungod sa kinaiya sa relasyon tali sa mga sukatan sa performance sa sistema ug sa mga bili sa mga parameter sa mga setting sa sistema.

Nga, siyempre, kinahanglan nga makatampo sa pagtunga niining lawom nga pagsabot sa sistema, sa iyang operasyon, sa labing menos ubos sa usa ka gihatag nga load.

Sa praktis, kini usa ka pagbayloay sa mga gasto sa pagsabut sa gipahiangay nga sistema alang sa mga gasto sa pag-andam sa ingon nga pagsulay sa sistema.

Gusto nako nga timan-an nga gilain: sa kini nga pamaagi, ang lebel sa pagkaigo sa pagsulay sa sistema sa mga kondisyon sa pag-opera nga naa sa komersyal nga operasyon hinungdanon kaayo.

Salamat sa imong pagtagad ug oras.

Source: www.habr.com

Idugang sa usa ka comment