Ny fomba siantifika poketra, na ny fomba hifidianana ny fikirakirana angon-drakitra amin'ny alàlan'ny benchmarks sy algorithm optimization

Hello

Nanapa-kevitra ny hizara ny zavatra hitako aho - ny vokatry ny eritreritra, ny fitsapana ary ny fahadisoana.
Amin'ny ankapobeny: tsy hita izany, mazava ho azy - tokony ho fantatra hatry ny ela izany rehetra izany, ho an'ireo izay mandray anjara amin'ny fanodinana angon-drakitra momba ny statistika sy ny fanatsarana ny rafitra rehetra, fa tsy ny DBMS manokana.
Ary: eny, fantatr'izy ireo, manoratra lahatsoratra mahaliana momba ny fikarohana nataony, ohatra (UPD.: tao amin'ny fanehoan-kevitra dia nanondro tetikasa tena mahaliana izy ireo: ottertune )
Amin'ny lafiny iray: tsy hitako izay fitenenana na fanaparitahana an'io fomba fiasa io amin'ny Internet eo amin'ireo manam-pahaizana manokana momba ny IT, DBA.

Noho izany, amin'ny teboka.

Andeha hatao hoe manana andraikitra isika: manangana rafitra serivisy iray mba hanompoana karazana asa.

Fantatra ny momba ity asa ity: inona izany, ahoana no fandrefesana ny kalitaon'ity asa ity, ary inona no fepetra handrefesana izany kalitao izany.

Andeha hojerentsika ihany koa fa tsy dia fantatra loatra na tsy takatry ny saina izany: ahoana marina ny fanatanterahana ny asa ao amin'ity rafitra serivisy ity.

"Mihoatra na latsaka" - midika izany fa azo atao ny manomana (na mahazo azy avy any amin'ny toerana iray) fitaovana, fitaovana, serivisy izay azo atambatra sy ampiharina amin'ny rafitra miaraka amin'ny enta-mavesatra ampy amin'ny famokarana, amin'ny toe-javatra sahaza ho an'ny fiasana amin'ny famokarana.

Eny ary, andeha hojerentsika fa fantatra ny mari-pamantarana fanitsiana ho an'ity rafitra serivisy ity, izay azo ampiasaina hanamboarana an'io rafitra io amin'ny resaka famokarana ny asany.

Ary inona no olana - tsy misy fahatakarana feno an'ity rafitra serivisy ity, izay ahafahanao manitsy ny toe-javatra amin'ity rafitra ity ho an'ny entana ho avy amin'ny sehatra iray ary mahazo ny vokatra ilaina amin'ny rafitra.

Eny ary. Saika mitranga foana izany.

Inona no azonao atao eto?

Eny, ny zavatra voalohany tonga ao an-tsaina dia ny mijery ny antontan-taratasy momba ity rafitra ity. Fantaro hoe inona ny elanelana azo ekena ho an'ny sandan'ny mari-pamantarana fanitsiana. Ary, ohatra, amin'ny fampiasana ny fomba fiaina mandrindra, mifidiana soatoavina ho an'ny mari-pamantarana rafitra amin'ny fitsapana.

Ireo. omeo karazana fanamafisam-peo ny rafitra, amin'ny endriky ny soatoavina manokana ho an'ny mari-pamantarana fanamafisana azy.

Ampiharo enta-mavesatra izany, amin'ny fampiasana ity fitaovana ity, mpamokatra entana.
Ary jereo ny sanda - ny valiny, na ny metric ny kalitaon'ny rafitra.

Ny eritreritra faharoa dia mety ho fehin-kevitra fa fotoana lava be izao.

Eny, izany hoe: raha be dia be ny mari-pamantarana, raha lehibe ny salan'ny soatoavin'izy ireo, raha mila fotoana be ny fitsapana entana tsirairay, dia: eny, mety haka fotoana tsy ekena izany rehetra izany. fotoana ela.

Eny, ity no azonao takarina sy tadidinao.

Azonao atao ny mahita fa ao amin'ny andiana soatoavina amin'ny mari-pamantarana firafitry ny rafitra serivisy dia misy vector, toy ny filaharan'ny soatoavina sasany.

Ny vector tsirairay toy izany, ny zavatra hafa mitovy (amin'ny hoe tsy misy fiantraikany amin'ity vector ity), dia mifanitsy amin'ny sanda metrika voafaritra tanteraka - famantarana ny kalitaon'ny fiasan'ny rafitra eo ambanin'ny enta-mavesatra.

izany hoe

Andeha hojerentsika ny vector configuration system ho Ny fomba siantifika poketra, na ny fomba hifidianana ny fikirakirana angon-drakitra amin'ny alàlan'ny benchmarks sy algorithm optimizationizay Ny fomba siantifika poketra, na ny fomba hifidianana ny fikirakirana angon-drakitra amin'ny alàlan'ny benchmarks sy algorithm optimization; AIZA Ny fomba siantifika poketra, na ny fomba hifidianana ny fikirakirana angon-drakitra amin'ny alàlan'ny benchmarks sy algorithm optimization - isan'ny masontsivana fanamafisam-peo, firy amin'ireo masontsivana ireo no misy.

Ary ny sandan'ny metrika mifanaraka amin'izany Ny fomba siantifika poketra, na ny fomba hifidianana ny fikirakirana angon-drakitra amin'ny alàlan'ny benchmarks sy algorithm optimization andao holazaina amin'ny hoe
Ny fomba siantifika poketra, na ny fomba hifidianana ny fikirakirana angon-drakitra amin'ny alàlan'ny benchmarks sy algorithm optimization, dia mahazo asa isika: Ny fomba siantifika poketra, na ny fomba hifidianana ny fikirakirana angon-drakitra amin'ny alàlan'ny benchmarks sy algorithm optimization

Eny ary: avy hatrany dia tonga amin'ny zava-drehetra, raha ny amiko: saika adino tamin'ny andron'ny mpianatra, ny algorithm amin'ny fitadiavana ny faran'ny asa iray.

Eny ary, fa eto misy fanontaniana momba ny fandaminana sy ampiharina: inona ny algorithm ampiasaina.

  1. Amin'ny heviny - mba hahafahanao mametraka code kely kokoa amin'ny tanana.
  2. Ary mba hiasa, i.e. nahita ny extremum (raha misy iray), tsara, fara fahakeliny haingana kokoa noho ny mandrindra fidinana.

Ny teboka voalohany dia manondro fa mila mijery ny tontolo sasany izay efa nampiharina ny algorithm toy izany, ary, amin'ny endrika sasany, vonona hampiasaina amin'ny code.
Eny, fantatro python и cran-r

Ny teboka faharoa dia midika fa mila mamaky momba ny algorithms manokana ianao, inona izy ireo, inona ny fepetra takian'izy ireo, ary ny endriky ny asany.

Ary ny zavatra omeny dia mety ho voka-dratsiny mahasoa - vokatra, na mivantana avy amin'ny algorithm mihitsy.

Na azo alaina avy amin'ny vokatry ny algorithm.

Miankina betsaka amin'ny fepetra fampidirana.

Ohatra, raha mila mahazo valiny haingana kokoa ianao noho ny antony iray, dia mila mijery ny algorithm gradient descent ianao ary misafidy ny iray amin'izy ireo.

Na, raha tsy dia zava-dehibe loatra ny fotoana, azonao atao, ohatra, ny mampiasa fomba fanatsarana stochastic, toy ny algorithm génétique.

Manolo-kevitra ny handinika ny asan'ity fomba ity aho, amin'ny fisafidianana ny rafitry ny rafitra, amin'ny fampiasana algorithm génétique, amin'ny manaraka, izany hoe: asa laboratoara.

Original:

  1. Aoka hisy, toy ny rafitra serivisy: oracle xe 18c
  2. Avelao izy hanao hetsika ara-barotra sy tanjona: hahazoana ny fidirana ambony indrindra amin'ny subdatabase, amin'ny transactions/sec.
  3. Mety ho samy hafa be ny fifampiraharahana amin'ny toetry ny fiasan'ny angona sy ny tontolon'ny asa.
    Andao hanaiky fa ireo dia fifampiraharahana izay tsy manodina angon-drakitra marobe.
    Amin'ny heviny hoe tsy mamokatra angona manafoana bebe kokoa noho ny mamerina izy ireo ary tsy manodina isan-jaton'ny andalana sy latabatra lehibe.

Ireo dia fifampiraharahana izay manova andalana iray amin'ny latabatra lehibe kokoa na latsaka, miaraka amin'ny fanondroana kely amin'ity latabatra ity.

Amin'ity toe-javatra ity: ny vokatra azo avy amin'ny subdatabase ho an'ny fanodinana ny fifampiraharahana dia, miaraka amin'ny famandrihana, dia hofaritan'ny kalitaon'ny fanodinana amin'ny angon-drakitra redox.

Disclaimer - raha miresaka manokana momba ny toe-javatra subdb isika.

Satria, amin'ny tranga ankapobeny, dia mety hisy, ohatra, ny fanakatonana transactional eo anelanelan'ny fotoam-pivoriana SQL, noho ny famolavolana ny asan'ny mpampiasa miaraka amin'ny angona tabilao sy/na ny modely tabilao.

Izay, mazava ho azy, dia hisy fiantraikany mahakivy amin'ny metrika TPS ary izany dia ho anton-javatra ivelany, raha oharina amin'ny subdatabase: eny, izany no fomba namolavolana ny modelin'ny tabilao sy ny asa miaraka amin'ny angon-drakitra ao anatiny izay misy fanakanana.

Noho izany, ho an'ny fahadiovan'ny fanandramana, dia hanaisotra ity lafin-javatra ity isika, ary eto ambany dia hazavaiko tsara ny fomba.

  1. Andeha hojerentsika fa ny 100% amin'ny baiko SQL napetraka ao amin'ny tahiry dia baiko DML.
    Avelao hitovy ny toetran'ny mpampiasa amin'ny subdatabase amin'ny fitsapana.
    Izany hoe: ny isan'ny session skl, data tabular, ny fomba fiasan'ny sessions skl miaraka aminy.
  2. Subd miasa ao FORCE LOGGING, ARCHIVELOG mods. Ny maodely flashback-database dia maty, amin'ny ambaratonga subd.
  3. Redo logs: hita ao amin'ny rafitra fichier misaraka, amin'ny "disk" misaraka;
    Ny sisa amin'ny singa ara-batana amin'ny angon-drakitra: amin'ny rafitra fichier iray hafa, amin'ny "disk" misaraka:

Fanazavana bebe kokoa momba ny fitaovana ara-batana. laboratoara tahirin-kevitra singa

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

Tamin'ny voalohany, tao anatin'ireo fepetra enta-mavesatra ireo dia naniry ny hampiasa subd transaction aho SLOB-utility
Manana endri-javatra mahafinaritra toy izany, holazaiko ny mpanoratra:

Ao am-pon'ny SLOB ny "fomba SLOB." Ny fomba SLOB dia mikendry ny hizaha sehatra
tsy misy fifandirana fampiharana. Tsy afaka mitondra ny fahombiazan'ny hardware ambony indrindra ny olona iray
mampiasa kaody fampiharana izay, ohatra, mifamatotra amin'ny fanidy fampiharana na koa
mizara sakana Oracle Database. Marina izany—misy vola be rehefa mizara angona
amin'ny data blocks! Saingy ny SLOB — amin'ny fametrahana azy ho default — dia tsy voaaro amin'ny fifandirana toy izany.

Ity fanambarana ity: mifanaraka, izany.
Tsara ny mifehy ny haavon'ny parallèle amin'ny fotoam-pivoriana cl, izany no fanalahidy -t manomboka ny utility runit.sh avy amin'ny SLOB
Ny isan-jaton'ny baiko DML dia fehezina, amin'ny isan'ny hafatra an-tsoratra izay alefa any amin'ny subd, isaky ny fivoriana an-tsoratra, parameter UPDATE_PCT
Misaraka ary tena mety: SLOB ny tenany, alohan'ny sy aorian'ny fotoam-pivoriana - dia manomana statspack, na awr-snapshots (izay natao homanina).

Hita anefa izany SLOB tsy manohana ny fivoriana SQL miaraka amin'ny faharetan'ny latsaky ny 30 segondra.
Noho izany, nomeko voalohany ny dikan-tsarimihetsika manokana, mpiasa sy tantsaha amin'ny loader, ary avy eo dia nijanona izy io.

Avelao aho hanazava ny ataon'ny loader sy ny fomba anaovany azy, mba hazava.
Amin'ny ankapobeny, ny loader dia toy izao manaraka izao:

Kaody mpiasa

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

Ny mpiasa dia manomboka amin'ny fomba toy izao:

Mpiasa mihazakazaka

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

Ary ny latabatra ho an'ny mpiasa dia voaomana toy izao:

Famoronana tabilao

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"

Ireo. Ho an'ny mpiasa tsirairay (raha ny marina: fivoriana SQL misaraka ao amin'ny DB) dia misy latabatra mitokana, izay iasan'ny mpiasa.

Izany dia miantoka ny tsy fisian'ny fanakatonana ara-barotra eo amin'ny fotoam-pivorian'ny mpiasa.
Ny mpiasa tsirairay: manao zavatra mitovy, amin'ny latabany avy, ny latabatra dia mitovy avokoa.
Ny mpiasa rehetra dia manao asa mandritra ny fotoana mitovy.
Ankoatr'izay, mandritra ny fotoana maharitra, ohatra, dia mety hitranga ny fiovan'ny log, ary mihoatra ny indray mandeha.
Eny ary, araka izany, dia nipoitra ny fandaniana sy ny vokany.
Raha ny zava-niainako dia nanamboatra ny faharetan'ny asan'ny mpiasa tamin'ny 8 minitra aho.

Sombiny amin'ny tatitra statspack milazalaza ny fiasan'ny subd eo ambany entana

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

Hiverina any amin'ny laboratoire.
Hanova ny soatoavin'ireto mari-pamantarana manaraka ireto amin'ny subdatabase laboratoara izahay, raha mitovy ny zavatra hafa:

  1. Haben'ny vondrona diarin'ny database. sanda sanda: [32, 1024] MB;
  2. Isan'ny vondrona diary ao amin'ny tahiry. sanda isan-karazany: [2,32];
  3. log_archive_max_processes sanda isan-karazany: [1,8];
  4. commit_logging sanda roa no azo atao: batch|immediate;
  5. commit_wait sanda roa no azo atao: wait|nowait;
  6. log_buffer sanda isan-karazany: [2,128] MB.
  7. log_checkpoint_timeout sandany: [60,1200] segondra
  8. db_writer_processes sanda isan-karazany: [1,4]
  9. undo_retention sanda sanda: [30;300] segondra
  10. transactions_per_rollback_segment sanda isan-karazany: [1,8]
  11. disk_asynch_io sanda roa no azo atao: true|false;
  12. filesystemio_options ireto soatoavina ireto dia avela: none|setall|directIO|asynch;
  13. db_block_checking ireto soatoavina ireto dia avela: OFF|LOW|MEDIUM|FULL;
  14. db_block_checksum ireto soatoavina ireto dia avela: OFF|TYPICAL|FULL;

Ny olona iray manana traikefa amin'ny fikojakojana ny angon-drakitra Oracle dia azo antoka fa efa afaka milaza hoe inona sy inona ny soatoavina tokony hapetraka, avy amin'ny mari-pamantarana voafaritra sy ny soatoavina azo ekena, mba hahazoana vokatra bebe kokoa amin'ny angon-drakitra ho an'ny asa miaraka amin'ny angon-drakitra izay asehon'ny ny kaody fampiharana, eto ambony.

Fa.

Ny tanjon'ny asa laboratoara dia ny mampiseho fa ny algorithm optimization mihitsy no hanazava izany ho antsika haingana.

Ho anay, ny hany sisa tavela dia ny mijery ny antontan-taratasy, amin'ny alàlan'ny rafitra azo amboarina, ampy hahitana hoe inona ny mason-tsivana tokony hovaina sy ny salan'isa.
Ary koa: kaody ny kaody izay hampiasaina hiasa amin'ny rafitra manokana amin'ny algorithm optimization voafantina.

Noho izany, izao momba ny kaody.
Noresahiko etsy ambony cran-r, izany hoe: ny fanodinkodinana rehetra miaraka amin'ny rafitra namboarina dia voarindra amin'ny endrika R script.

Ny asa tena izy, ny famakafakana, ny fifantenana amin'ny sanda metrika, ny vectors state system: fonosana ity GA (tahirin-kevitra)
Ny fonosana, amin'ity tranga ity, dia tsy dia mety loatra, amin'ny heviny fa manantena ny vectors (chromosomes, raha ny fonosana) ho voafaritra amin'ny endriky ny tadin'ny isa misy ampahany ampahany.

Ary ny vector ahy, avy amin'ny soatoavin'ny mari-pamantarana: 14 isa ireo - integers sy soatoavin'ny tady.

Ny olana, mazava ho azy, dia azo alaina mora foana amin'ny fametrahana isa manokana amin'ny soatoavin'ny tady.

Noho izany, amin'ny farany, ny ampahany lehibe amin'ny script R dia toy izao:

Antsoy 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

Eto, miaraka amin'ny fanampiana lower и upper toetra subroutine ga Amin'ny ankapobeny, faritra iray amin'ny habaka fikarohana dia voafaritra, izay hanaovana fikarohana ho an'ny vector (na vectors) toy izany izay hahazoana ny sanda ambony indrindra amin'ny fiasa ara-batana.

Ny subroutine ga dia manao fikarohana izay mampitombo ny fiasan'ny vatana.

Eny ary, hita fa, amin'ity tranga ity, dia ilaina ny fampandehanana ara-batana, ny fahatakarana ny vector ho fitambarana soatoavina ho an'ny masontsivana sasany amin'ny subd, dia mahazo metrika avy amin'ny subd.

Izany hoe: firy, miaraka amin'ny fametrahana subd nomena sy enta-mavesatra omena amin'ny subd: ny subd dia manao fifampiraharahana isan-tsegondra.

Izany hoe, rehefa mivelatra dia tsy maintsy atao ao anatin'ny fiasa ara-batana ireto dingana maromaro manaraka ireto:

  1. Fanodinana ny véktorin'ny isa - mamadika azy ho sanda ho an'ny mari-pamantarana subdata.
  2. Fiezahana hamorona vondrona avereno isa nomena habe iray. Ankoatra izany, ny andrana dia mety tsy hahomby.
    Vondrona gazetiboky efa nisy tao amin'ny subd, amin'ny habetsahana sy habe sasany, ho an'ny fahadiovan'ny fanandramana - d.b. voafafa.
  3. Raha mahomby ny teboka teo aloha: mamaritra ny soatoavin'ny mari-pamantarana fanamafisana amin'ny angon-drakitra (indray: mety hisy ny tsy fahombiazana)
  4. Raha mahomby ny dingana teo aloha: atsaharo ny subd, atombohy ny subd mba hanan-kery ny soatoavin'ny mari-pamantarana vaovao. (indray: mety misy glitch)
  5. Raha mahomby ny dingana teo aloha: manaova fitsapana entana. mahazo metrika avy amin'ny subd.
  6. Avereno amin'ny endriny voalohany ny subd, i.e. fafao ny vondrona log fanampiny, avereno amin'ny asa ny fandrindrana subdatabase tany am-boalohany.

Kaody fiasa ara-batana

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

Izany. asa rehetra: natao tao amin'ny fiasan'ny Fitness.

Ny ga-subroutine dia manao vectors, na, raha ny marina kokoa, chromosomes.
Ao anatin'izany, ny zava-dehibe indrindra amintsika dia ny fifantenana ireo krômôzôma misy fototarazo izay ahafahan'ny fiasan'ny vatana mamokatra sanda lehibe.

Izany, raha ny tena izy, dia ny dingan'ny fitadiavana ny krômôzôma tsara indrindra amin'ny fampiasana vector ao amin'ny habaka fikarohana N-dimensional.

Tena mazava, antsipirihany fanazavana, miaraka amin'ny ohatra R-code, asan'ny algorithm génétique.

Te-hanamarika hevitra teknika roa aho.

Antso fanampiny avy amin'ny asa evaluate, ohatra, ny fiatoana, ny fametrahana ny sandan'ny mari-pamantarana subd, dia atao mifototra amin'ny cran-r asa system2

Miaraka amin'ny fanampian'izany: misy script na baiko bash antsoina.

Ohatra:

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

Ny teboka faharoa dia ny tsipika, evaluate fonctions, miaraka amin'ny fitahirizana sanda metrika manokana sy ny zezika fandrindrana mifanaraka aminy amin'ny rakitra log:

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

Zava-dehibe izany, satria avy amin'ity laharan'ny angon-drakitra ity dia azo atao ny mahazo fampahalalana fanampiny momba ny hoe iza amin'ireo singa ao amin'ny zezika fametahana no misy fiantraikany lehibe kokoa na kely kokoa amin'ny sanda metrika.

Izany hoe: azo atao ny manao analyse attribute-importamce.

Inona àry no mety hitranga?

Amin'ny endrika grafika, raha manafatra ny fitsapana amin'ny filaharana metrika miakatra ianao, dia toy izao ny sary:

Ny fomba siantifika poketra, na ny fomba hifidianana ny fikirakirana angon-drakitra amin'ny alàlan'ny benchmarks sy algorithm optimization

Angon-drakitra sasany mifandraika amin'ny soatoavina faran'ny metrika:
Ny fomba siantifika poketra, na ny fomba hifidianana ny fikirakirana angon-drakitra amin'ny alàlan'ny benchmarks sy algorithm optimization
Eto, ao amin'ny pikantsary miaraka amin'ny valiny, dia hanazava aho: ny soatoavin'ny véctor tuning dia omena amin'ny lafin'ny kaody fampiasa ara-batana, fa tsy amin'ny laharan'ny lisitry ny mari-pamantarana/faritra misy ny soatoavin'ny parameter, izay novolavolaina. eo ambony ao amin'ny lahatsoratra.

Eny ary. Be ve sa kely, ~ 8 arivo tps: fanontaniana mitokana.
Ao anatin'ny sehatry ny asa laboratoara dia tsy zava-dehibe io tarehimarika io, ny zava-dehibe dia ny dinamika, ny fiovan'io sanda io.

Tsara ny dynamics eto.
Mazava ho azy fa misy anton-javatra iray farafahakeliny misy fiantraikany lehibe amin'ny sandan'ny metrika, ny ga-algorithm, manasokajy amin'ny alàlan'ny vectors chromosome: voarakotra.
Raha jerena amin'ny fihetsehan'ny soatoavin'ny curve dia misy anton-javatra iray farafahakeliny izay, na dia kely kokoa aza, dia misy fiantraikany.

Eto no ilainao attribute-importance famakafakana mba hahatakarana hoe inona ny toetra (tsara, amin'ity tranga ity, ny singa amin'ny zezika fametahana) ary ny halehiben'ny fiantraikan'izy ireo amin'ny sandan'ny metrika.
Ary avy amin'ity fampahalalana ity: fantaro hoe inona no anton'ny fiantraikan'ny fiovan'ny toetra manan-danja.

hampihatra attribute-importance azo atao amin'ny fomba samihafa.

Ho an'ireo tanjona ireo dia tiako ny algorithm randomForest R fonosana mitovy anarana (tahirin-kevitra)
randomForest, araka ny fahazoako ny asany amin'ny ankapobeny sy ny fomba fiasany amin'ny fanombanana ny maha-zava-dehibe ny toetra manokana, dia manangana modely iray amin'ny fiankinan-doha amin'ny fari-pahaizana valiny amin'ny toetra.

Amin'ny tranga misy antsika, ny fari-piadidiana valiny dia metrika azo avy amin'ny angon-drakitra amin'ny fitsapana entana: tps;
Ary ny toetra dia singa amin'ny vector tuning.

Ka eto randomForest manombana ny maha-zava-dehibe ny toetra modely tsirairay miaraka amin'ny isa roa: %IncMSE — ny fomba hanovan'ny fisiana/tsy fisian'ity toetra ity amin'ny maodely ny kalitao MSE an'ity modely ity (Mean Squared Error);

Ary ny IncNodePurity dia isa izay maneho tsara, mifototra amin'ny soatoavin'ity toetra ity, azo zaraina ny angon-drakitra misy fanamarihana, ka amin'ny ampahany iray dia misy angona miaraka amin'ny sandan'ny metrika iray hazavaina, ary amin'ny iray hafa miaraka amin'ny sanda hafa amin'ny metrika.
Eny, izany hoe: hatraiza izany toetra fanasokajiana izany (Hitako ny fanazavana mazava indrindra amin'ny teny Rosiana momba ny RandomForest eto).

R-code mpiasa sy tantsaha amin'ny fanodinana angon-drakitra miaraka amin'ny valin'ny fitsapana entana:

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

Azonao atao ny misafidy mivantana ny hyperparameters amin'ny algorithm amin'ny tananao ary, mifantoka amin'ny kalitaon'ny modely, mifidiana modely iray izay manatanteraka tsara kokoa ny vinavina momba ny angona fanamarinana.
Azonao atao ny manoratra karazana asa ho an'ity asa ity (amin'ny fomba, indray, mampiasa karazana algorithm optimization).

Azonao atao ny mampiasa fonosana R caret, tsy ny hevitra no zava-dehibe.

Vokatr'izany, amin'ity tranga ity, ity vokatra manaraka ity dia azo hanombanana ny haavon'ny maha-zava-dehibe ny toetra:

Ny fomba siantifika poketra, na ny fomba hifidianana ny fikirakirana angon-drakitra amin'ny alàlan'ny benchmarks sy algorithm optimization

Eny ary. Noho izany, afaka manomboka fandinihana eran-tany isika:

  1. Hita fa ny zava-dehibe indrindra, tao anatin'ireo fepetra fitsapana ireo, dia ny paramètre commit_wait
    Ara-teknika, dia mamaritra ny fomba famonoana ny io asa fanoratana redo angona avy amin'ny subdb log buffer mankany amin'ny vondrona log ankehitriny: synchronous na asynchronous.
    zava-dehibe nowait izay miteraka fiakarana saika mitsangana, maro be amin'ny sandan'ny metric tps: ity no fampidirana ny maody io asynchronous amin'ny vondrona redo.
    Ny fanontaniana manokana dia ny hoe tokony hanao izany na tsia amin'ny tahiry sakafo ianao. Eto aho dia mametra ny tenako amin'ny filazana fotsiny hoe: zava-dehibe izany.
  2. Lojika fa ny haben'ny buffer log an'ny subd: dia hita fa zava-dehibe.
    Arakaraky ny kely kokoa ny haben'ny buffer log, ny kely kokoa ny fahaizany buffering, no vao mainka mihoa-pampana sy/na ny tsy fahafahana manome faritra malalaka ao aminy ho an'ny ampahany amin'ny angona redox vaovao.
    Midika izany: fahatarana mifandraika amin'ny fanokanana toerana ao amin'ny buffer log sy/na fanariana ny angona redo avy aminy ho vondrona redo.
    Ireo fahatarana ireo, mazava ho azy, dia tokony hisy fiantraikany amin'ny fidirana amin'ny angon-drakitra ho an'ny fifanakalozana.
  3. fikirana db_block_checksum: Eny ary, mazava ho azy amin'ny ankapobeny - ny fanodinana varotra dia mitarika amin'ny fananganana sakana darty ao amin'ny cache buffer an'ny subdatabase.
    Izay, rehefa azo atao ny manamarina ny checksums amin'ny datablocks, ny angon-drakitra dia mila manodina - kajy ireo checksum ireo avy amin'ny vatan'ny datablock, jereo amin'ny zavatra voasoratra ao amin'ny lohatenin'ny datablock: mifanandrify/tsy mifanentana.
    Ny asa toy izany, indray, dia tsy afaka ny hanemotra ny fanodinana angon-drakitra, ary mifanaraka amin'izany, ny mari-pamantarana sy ny mekanika izay mametraka an'io mari-pamantarana io dia lasa manan-danja.
    Izany no mahatonga ny mpivarotra manolotra, ao amin'ny antontan-taratasy momba an'io mari-pamantarana io, ny soatoavina samihafa ary manamarika fa eny, hisy fiantraikany, saingy azonao atao ny misafidy soatoavina samihafa, eny fa na dia "eny" sy ny fiantraikany samihafa.

Eny, fanatsoahan-kevitra manerantany.

Ny fomba fiasa, amin'ny ankapobeny, dia hita fa miasa tsara.

Tena mamela ny tenany izy, amin'ny dingana voalohany amin'ny fitsapana enta-mavesatra amin'ny rafitra serivisy iray, mba hisafidianana ny (rafitra) fanamafisam-peo tsara indrindra ho an'ny enta-mavesatra, fa tsy hiditra lalina loatra amin'ny fametrahana ny rafitra ho an'ny entana.

Saingy tsy manilika azy tanteraka izany - farafaharatsiny amin'ny haavon'ny fahatakarana: ny rafitra dia tsy maintsy fantatra momba ny "fanitsiana tombo-kase" sy ny elanelana azo atao amin'ny fihodinan'ireo knobs ireo.

Ny fomba dia afaka mahita haingana ny rafitra rafitra tsara indrindra.
Ary mifototra amin'ny valin'ny fitsapana dia azo atao ny mahazo fampahalalana momba ny toetoetran'ny fifandraisana misy eo amin'ny metrikan'ny fahombiazan'ny rafitra sy ny soatoavin'ny mari-pamantarana momba ny rafitra.

Izay, mazava ho azy, dia tokony handray anjara amin'ny firongatry ity fahatakarana lalina ny rafitra, ny asany, fara fahakeliny eo ambanin'ny enta-mavesatra nomena.

Amin'ny fampiharana, izany dia fifanakalozam-bola amin'ny fahatakarana ny rafitra namboarina ho an'ny fandaniana amin'ny fanomanana ny fitsapana toy izany ny rafitra.

Te-hanamarika manokana aho: amin'ity fomba ity, ny haavon'ny fahatomombanan'ny fitsapana ny rafitra amin'ny fepetra fiasana izay hananany amin'ny fampandehanana ara-barotra dia tena zava-dehibe.

Misaotra anao noho ny fiheveranao sy ny fotoananao.

Source: www.habr.com

Add a comment