Njira ya sayansi, kapena momwe mungasankhire kasinthidwe ka database pogwiritsa ntchito ma benchmarks ndi algorithm yokhathamiritsa

Hello

Ndinaganiza zogawana zomwe ndapeza - chipatso cha malingaliro, kuyesa ndi zolakwika.
Mwambiri: izi sizopezeka, ndithudi - zonsezi ziyenera kudziwika kwa nthawi yaitali, kwa iwo omwe akugwira nawo ntchito zowerengera zowerengera ndi kukhathamiritsa kwa machitidwe aliwonse, osati makamaka DBMS.
Ndipo: inde, akudziwa, amalemba zolemba zosangalatsa pa kafukufuku wawo, chitsanzo (UPD.: M'mawuwa adanenanso ntchito yosangalatsa kwambiri: ottertune )
Kumbali inayi: offhand sindikuwona kutchulidwa kulikonse kapena kufalitsa njira iyi pa intaneti pakati pa akatswiri a IT, DBA.

Kotero, mpaka.

Tiyeni tiyerekeze kuti tili ndi ntchito: kukhazikitsa dongosolo linalake la utumiki kuti litumikire mtundu wina wa ntchito.

Zimadziwika za ntchitoyi: zomwe zili, momwe ntchitoyo imayesedwera, komanso momwe mungayesere khalidweli.

Tiyerekezenso kuti ndizodziwika bwino komanso zosadziwika bwino: ndendende momwe ntchito imagwirira ntchito (kapena ndi) dongosolo lino lautumiki.

"Zochuluka kapena zochepa" - izi zikutanthauza kuti ndizotheka kukonzekera (kapena kuzipeza kuchokera kwinakwake) chida china, zofunikira, ntchito zomwe zitha kupangidwa ndikugwiritsidwa ntchito pamakina ndi mayeso oyeserera mokwanira kuti azitha kupanga, m'mikhalidwe yokwanira yogwira ntchito yopanga.

Chabwino, tiyeni tiyerekeze kuti magawo osinthika a dongosolo lino lautumiki amadziwika, omwe angagwiritsidwe ntchito kukonza dongosololi ponena za zokolola za ntchito yake.

Ndipo vuto ndi chiyani - palibe kumvetsetsa kokwanira kwa dongosolo lino lautumiki, lomwe limakupatsani mwayi wokonza mwaluso zoikamo za dongosolo lino kuti muthe kunyamula m'tsogolo pa nsanja yopatsidwa ndikupeza zokolola zofunikira za dongosolo.

Chabwino. Izi zimakhala choncho nthawi zonse.

Mungatani pano?

Chabwino, chinthu choyamba chimene chimabwera m'maganizo ndikuyang'ana zolemba za dongosolo lino. Mvetsetsani kuti milingo yovomerezeka ndi yotani pamagawo osintha. Ndipo, mwachitsanzo, pogwiritsa ntchito njira yolumikizirana, sankhani zofunikira zamagawo a dongosolo pamayeso.

Iwo. perekani dongosolo la mtundu wina wa kasinthidwe, mu mawonekedwe azinthu zinazake zamasinthidwe ake.

Ikani zoyeserera kwa izo, pogwiritsa ntchito chida ichi, chonyamula katundu.
Ndipo yang'anani pa mtengo - kuyankha, kapena metric ya khalidwe la dongosolo.

Lingaliro lachiwiri lingakhale lingaliro lakuti iyi ndi nthawi yayitali kwambiri.

Chabwino, ndiye kuti: ngati pali magawo ambiri osinthika, ngati milingo yazikhalidwe zawo ndi zazikulu, ngati mayeso amtundu uliwonse amatenga nthawi yayitali kuti amalize, ndiye: inde, zonsezi zitha kutenga nthawi yayitali yosavomerezeka. nthawi.

Chabwino, apa pali zomwe mungamvetse ndikukumbukira.

Mutha kudziwa kuti pamagawo azinthu zamagawo amtundu wautumiki pali vekitala, monga mndandanda wazinthu zina.

Chilichonse choterechi, zinthu zina kukhala zofanana (pomwe sizimakhudzidwa ndi vekitala iyi), zimafanana ndi mtengo wotsimikizika wa metric - chizindikiro cha momwe machitidwe amagwirira ntchito poyesedwa.

I

Tiyeni tiwone vesi la kasinthidwe kachitidwe ngati Njira ya sayansi, kapena momwe mungasankhire kasinthidwe ka database pogwiritsa ntchito ma benchmarks ndi algorithm yokhathamiritsakumene Njira ya sayansi, kapena momwe mungasankhire kasinthidwe ka database pogwiritsa ntchito ma benchmarks ndi algorithm yokhathamiritsa; Kuti Njira ya sayansi, kapena momwe mungasankhire kasinthidwe ka database pogwiritsa ntchito ma benchmarks ndi algorithm yokhathamiritsa - chiwerengero cha magawo osinthika, ndi angati mwa magawo awa.

Ndipo mtengo wa metric wolingana ndi izi Njira ya sayansi, kapena momwe mungasankhire kasinthidwe ka database pogwiritsa ntchito ma benchmarks ndi algorithm yokhathamiritsa tiyeni tifotokoze ngati
Njira ya sayansi, kapena momwe mungasankhire kasinthidwe ka database pogwiritsa ntchito ma benchmarks ndi algorithm yokhathamiritsa, ndiye timapeza ntchito: Njira ya sayansi, kapena momwe mungasankhire kasinthidwe ka database pogwiritsa ntchito ma benchmarks ndi algorithm yokhathamiritsa

Chabwino, ndiye: zonse nthawi yomweyo zimatsikira, kwa ine: pafupifupi kuyiwalika kuyambira masiku anga ophunzira, ma aligorivimu posaka ntchito mopitilira muyeso.

Chabwino, koma apa pali funso labungwe ndi logwiritsidwa ntchito: ndi algorithm iti yomwe mungagwiritse ntchito.

  1. M'lingaliro - kotero kuti mukhoza kulemba zochepa ndi dzanja.
  2. Ndipo kuti igwire ntchito, i.e. adapeza chowonjezera (ngati chilipo), chabwino, mwachangu kuposa momwe amakhalira.

Mfundo yoyamba ikuwonetsa kuti tiyenera kuyang'ana kumadera ena momwe ma algorithms oterowo akhazikitsidwa kale, ndipo, mwanjira ina, ali okonzeka kugwiritsidwa ntchito mu code.
Chabwino, ndikudziwa python и cran-r

Mfundo yachiwiri ikutanthauza kuti muyenera kuwerenga za ma aligorivimu okha, zomwe zili, zomwe zimafunikira, komanso mawonekedwe a ntchito yawo.

Ndipo zomwe amapereka zingakhale zothandiza - zotsatira, kapena mwachindunji kuchokera ku algorithm yokha.

Kapena atha kupezeka kuchokera ku zotsatira za algorithm.

Zambiri zimatengera momwe zinthu ziliri.

Mwachitsanzo, ngati, pazifukwa zina, muyenera kupeza zotsatira mwachangu, muyenera kuyang'ana ma aligorivimu a gradient ndikusankha imodzi mwazo.

Kapena, ngati nthawi siili yofunika kwambiri, mutha kugwiritsa ntchito njira zowonjezera stochastic, monga ma genetic algorithm.

Ndikupangira kuganizira ntchito ya njirayi, kusankha kasinthidwe kachitidwe, pogwiritsa ntchito ma genetic algorithm, motsatira, titero: ntchito ya labotale.

Choyambirira:

  1. Pakhale, monga dongosolo la utumiki: oracle xe 18c
  2. Lolani kuti igwiritse ntchito zochitika ndi cholinga: kupeza njira yopititsira patsogolo kwambiri ya subdatabase, muzochita/mphindikati.
  3. Zochita zimatha kukhala zosiyana kwambiri ndi momwe zimagwirira ntchito ndi deta komanso momwe ntchito ikugwirira ntchito.
    Tiyeni tivomereze kuti izi ndizochitika zomwe sizimakonza zambiri zama tabular.
    M'lingaliro lakuti samapanga zambiri zosintha kuposa kubwerezanso ndipo samakonza mizere yambiri ndi matebulo akuluakulu.

Izi ndizochitika zomwe zimasintha mzere umodzi patebulo lalikulu kapena locheperapo, ndi ma index ochepa patebuloli.

M'menemo: zokolola za subdatabase yosinthira zochitika, ndikusungitsa, zidzatsimikiziridwa ndi mtundu wa kukonzedwa ndi nkhokwe ya redox.

Chodzikanira - ngati tilankhula mwachindunji za makonda a subdb.

Chifukwa, nthawi zambiri, pakhoza kukhala, mwachitsanzo, zotsekera zotsekera pakati pa magawo a SQL, chifukwa cha mapangidwe a ntchito yogwiritsira ntchito ndi deta ya tabular ndi / kapena chitsanzo cha tabular.

Zomwe, ndithudi, zidzakhala ndi zotsatira zofooketsa pazitsulo za TPS ndipo izi zidzakhala chinthu chachilendo, chokhudzana ndi subdatabase: chabwino, umu ndi momwe chitsanzo cha tabular chinapangidwira ndi ntchito ndi deta mmenemo kuti blockages zimachitika.

Choncho, chifukwa cha chiyero cha kuyesa, sitidzapatula chinthu ichi, ndipo pansipa ndikufotokozerani momwe mungachitire.

  1. Tiyeni tiyerekeze, motsimikizika, kuti 100% ya malamulo a SQL omwe atumizidwa ku database ndi malamulo a DML.
    Lolani kuti mawonekedwe a ogwiritsa ntchito ndi subdatabase akhale ofanana pamayesero.
    Izi: kuchuluka kwa magawo a skl, ma tabular data, momwe magawo a skl amagwirira ntchito nawo.
  2. Subd imagwira ntchito mkati FORCE LOGGING, ARCHIVELOG mods. Flashback-database mode yazimitsidwa, pamlingo wa subd.
  3. Bwezeraninso zipika: zomwe zili mu fayilo yosiyana, pa "disk" yosiyana;
    Zina zonse za nkhokwe: mumtundu wina, wosiyana wa fayilo, pa "disk" yosiyana:

Zambiri za chipangizo chakuthupi. zigawo za database za labotale

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

Poyambirira, pansi pazitundu izi, ndimafuna kugwiritsa ntchito transaction subd SLOB - zothandiza
Ili ndi mawonekedwe odabwitsa, nditchula wolemba:

Pamtima pa SLOB pali "njira ya SLOB." Njira ya SLOB ikufuna kuyesa nsanja
popanda kukangana ndi ntchito. Munthu sangathe kuyendetsa magwiridwe antchito apamwamba a hardware
pogwiritsa ntchito nambala yogwiritsira ntchito, mwachitsanzo, yomangidwa ndi kutseka kwa pulogalamu kapena ngakhale
kugawana midadada ya Oracle Database. Ndiko kulondola - pali zambiri pakugawana deta
mu data blocks! Koma SLOB-pakutumiza kwake kosasintha-sikhala ndi mikangano yotere.

Chilengezo ichi: chikufanana, chiri.
Ndikoyenera kuwongolera kuchuluka kwa kufanana kwa magawo amagulu, ichi ndiye chinsinsi -t kuyambitsa ntchito runit.sh kuchokera ku SLOB
Peresenti ya malamulo a DML imayendetsedwa, mu chiwerengero cha mauthenga omwe amatumizidwa ku subd, gawo lililonse la malemba, parameter. UPDATE_PCT
Payokha komanso mosavuta kwambiri: SLOB palokha, isanayambe ndi itatha gawo la katundu - amakonzekera statspack, kapena awr-snapshots (zomwe zakonzedwa kuti zikonzekere).

Komabe, zinapezeka kuti SLOB sichithandizira magawo a SQL ndi nthawi yochepera masekondi 30.
Chifukwa chake, ndidalemba kaye mtundu wanga, wapantchito-wamphawi, kenako idakhala ikugwira ntchito.

Ndiroleni ine ndifotokoze zomwe loader imachita ndi momwe imachitira izo, kuti zimveke.
Kwenikweni, Loader ikuwoneka motere:

Kodi ntchito

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

Ogwira ntchito amapangidwa motere:

Ogwira ntchito

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

Ndipo matebulo a antchito amakonzedwa motere:

Kupanga matebulo

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"

Iwo. Kwa wogwira ntchito aliyense (mwachidziwikire: gawo lapadera la SQL mu DB) tebulo lapadera limapangidwa, lomwe wogwira ntchitoyo amagwira nalo.

Izi zimatsimikizira kusakhalapo kwa maloko ochita malonda pakati pa magawo ogwira ntchito.
Wogwira ntchito aliyense: amachita zomwezo, ndi tebulo lake, matebulo ali ofanana.
Ogwira ntchito onse amagwira ntchito nthawi yofanana.
Komanso, kwa nthawi yayitali yokwanira kuti, mwachitsanzo, kusintha kwa chipika kudzachitikadi, komanso kangapo.
Chifukwa chake, ndalama zofananira ndi zotsatira zidawuka.
Kwa ine, ndinakonza nthawi ya ntchito ya ogwira ntchito mphindi 8.

Chigawo cha lipoti la statspack lofotokoza ntchito ya subd pansi pa katundu

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

Kubwerera kuntchito ya labotale.
Tidzati, zinthu zina kukhala zofanana, tidzasintha mfundo za magawo otsatirawa a labotale subdatabase:

  1. Kukula kwa magulu a logi a database. mtengo wamtengo wapatali: [32, 1024] MB;
  2. Chiwerengero cha magulu a magazini mu nkhokwe. mtengo wamtengo wapatali: [2,32];
  3. log_archive_max_processes mtengo wamtengo wapatali: [1,8];
  4. commit_logging makhalidwe awiri amaloledwa: batch|immediate;
  5. commit_wait makhalidwe awiri amaloledwa: wait|nowait;
  6. log_buffer kuchuluka kwa mtengo: [2,128] MB.
  7. log_checkpoint_timeout mtengo osiyanasiyana: [60,1200] masekondi
  8. db_writer_processes mtengo: [1,4]
  9. undo_retention mtengo osiyanasiyana: [30;300] masekondi
  10. transactions_per_rollback_segment mtengo: [1,8]
  11. disk_asynch_io makhalidwe awiri amaloledwa: true|false;
  12. filesystemio_options zotsatirazi ndizololedwa: none|setall|directIO|asynch;
  13. db_block_checking zotsatirazi ndizololedwa: OFF|LOW|MEDIUM|FULL;
  14. db_block_checksum zotsatirazi ndizololedwa: OFF|TYPICAL|FULL;

Munthu wodziwa kusunga nkhokwe za Oracle akhoza kunena kale zomwe ziyenera kukhazikitsidwa, kuchokera pazigawo zomwe zatchulidwa ndi zovomerezeka zawo, kuti apeze zokolola zambiri za nkhokwe ya ntchitoyo ndi deta yomwe ikuwonetsedwa ndi nambala yofunsira, apa pamwambapa.

Koma.

Mfundo ya ntchito ya labotale ndikuwonetsa kuti kukhathamiritsa kwa algorithm palokha kudzatifotokozera izi mwachangu.

Kwa ife, zomwe zatsala ndikungoyang'ana mu chikalatacho, kudzera mudongosolo losinthika, zokwanira kuti tipeze magawo oti asinthe komanso magawo ati.
Komanso: sungani code yomwe idzagwiritsidwe ntchito kuti igwire ntchito ndi machitidwe osankhidwa a algorithm yosankhidwa.

Kotero, tsopano za code.
Ndinayankhula pamwambapa cran-r, i.e.: zosintha zonse zokhala ndi makonda amapangidwa mwa mawonekedwe a R script.

Ntchito yeniyeni, kusanthula, kusankhidwa ndi mtengo wa metric, ma vector a boma: iyi ndi phukusi GA (zolemba)
Phukusili, pakadali pano, silili loyenera kwambiri, chifukwa limayembekezera ma vectors (ma chromosome, ngati malinga ndi phukusi) kuti afotokozedwe mu mawonekedwe a zingwe za manambala okhala ndi gawo laling'ono.

Ndipo vekitala yanga, kuchokera pamiyezo yoyika magawo: izi ndi kuchuluka kwa 14 - ziwerengero ndi zingwe.

Vuto, ndithudi, limapeŵedwa mosavuta mwa kugawa manambala enaake ku zingwe.

Chifukwa chake, pamapeto pake, gawo lalikulu la R script likuwoneka motere:

Itanani 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

Apa, ndi chithandizo lower и upper subroutine makhalidwe ga kwenikweni, gawo la malo osaka limatchulidwa, momwe kusaka kudzachitikira vekitala yotere (kapena ma vectors) omwe mtengo wokwanira wolimbitsa thupi udzapezedwa.

The ga subroutine imachita kusaka kukulitsa kulimbitsa thupi.

Chabwino, ndiye, zikuwonekeratu kuti, pankhaniyi, ndikofunikira kuti ntchito yolimbitsa thupi, kumvetsetsa vekitala ngati seti yazigawo zina za subd, ilandila metric kuchokera ku subd.

Ndiko kuti: angati, omwe ali ndi kukhazikitsidwa kwa subd ndi katundu wopatsidwa pa subd: subd process transactions pamphindikati.

Ndiye kuti, povumbulutsidwa, masitepe angapo otsatirawa ayenera kuchitidwa mkati mwazolimbitsa thupi:

  1. Kukonza vekitala yolowera manambala - kuyisintha kukhala miyeso ya magawo a subdata.
  2. Kuyesera kupanga chiwerengero chopatsidwa cha magulu obwereza a kukula kwake. Komanso, kuyesako sikungaphule kanthu.
    Magulu a magazini omwe analipo kale mu subd, mu kuchuluka kwina ndi kukula kwina, kuti ayese chiyero - d.b. zachotsedwa.
  3. Ngati mfundo yam'mbuyomu yapambana: kufotokozera zosintha zamasinthidwe ku database (kachiwiri: pangakhale kulephera)
  4. Ngati gawo lapitalo likuyenda bwino: kuyimitsa subd, kuyambitsa subd kuti zomwe zangotchulidwa kumene zichitike. (kachiwiri: pakhoza kukhala glitch)
  5. Ngati sitepe yapitayi yapambana: chitani mayeso olemetsa. pezani ma metric kuchokera ku subd.
  6. Bweretsani subd ku chikhalidwe chake choyambirira, i.e. chotsani magulu olembera owonjezera, bweretsani zosinthika zoyambirira za subdatabase kuti zigwire ntchito.

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

Kuti. ntchito zonse: zochitidwa muzolimbitsa thupi.

Ga-subroutine imayendetsa ma vectors, kapena, molondola, ma chromosome.
Momwe, chomwe chili chofunikira kwambiri kwa ife ndikusankha ma chromosome okhala ndi majini omwe ntchito yolimbitsa thupi imapanga zinthu zazikulu.

Izi, kwenikweni, ndi njira yosaka ma chromosome omwe ali oyenera kugwiritsa ntchito vekitala mu malo osakira a N-dimensional.

Zomveka bwino, zatsatanetsatane kufotokoza, ndi zitsanzo za R-code, ntchito ya genetic algorithm.

Ndikufuna padera kuzindikira mfundo ziwiri zaukadaulo.

Mafoni othandizira kuchokera ku ntchitoyi evaluate, mwachitsanzo, kuyimitsa-kuyambira, kuyika mtengo wa subd parameter, kumachitika potengera cran-r ntchito system2

Ndi chithandizo chomwe: bash script kapena lamulo limatchedwa.

Mwachitsanzo:

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

Mfundo yachiwiri ndi mzere, evaluate ntchito, ndikusunga mtengo wake wa metric ndi vekitala yofananira ndi fayilo ya chipika:

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

Izi ndizofunikira, chifukwa kuchokera kuzinthu izi, zidzatheka kupeza zambiri zokhudzana ndi zigawo ziti za vector yokonza zomwe zimakhala ndi zotsatira zazikulu kapena zochepa pa mtengo wa metric.

Ndiko kuti: kudzakhala kotheka kusanthula kufunikira kofunikira.

Ndiye chingachitike n’chiyani?

Mu mawonekedwe a graph, ngati muyitanitsa mayesowo pokwera ma metric, chithunzichi chili motere:

Njira ya sayansi, kapena momwe mungasankhire kasinthidwe ka database pogwiritsa ntchito ma benchmarks ndi algorithm yokhathamiritsa

Zina zomwe zimagwirizana ndi zotsika kwambiri za metric:
Njira ya sayansi, kapena momwe mungasankhire kasinthidwe ka database pogwiritsa ntchito ma benchmarks ndi algorithm yokhathamiritsa
Apa, pazithunzi zokhala ndi zotsatira zake, ndikufotokozerani: mayendedwe a vekitala yosinthira amaperekedwa molingana ndi kachidindo kolimbitsa thupi, osati malinga ndi mndandanda wamagulu a magawo / magawo amitundu, omwe adapangidwa. pamwamba palemba.

Chabwino. Ndi zambiri kapena pang'ono, ~ 8 zikwi tps: funso losiyana.
Mkati mwa ndondomeko ya ntchito ya labotale, chiwerengerochi sichiri chofunikira, chofunika kwambiri ndi mphamvu, momwe mtengowu umasinthira.

Zosintha pano ndizabwino.
Ndizodziwikiratu kuti chinthu chimodzi chimakhudza kwambiri kufunikira kwa metric, ga-algorithm, kusanja kudzera mu ma chromosome vectors: ophimbidwa.
Kutengera kusinthasintha kwamphamvu kwa ma curve values, pali chinthu chinanso chomwe, ngakhale chocheperako, chimakhala ndi chikoka.

Apa ndipamene mukufunikira attribute-importance kusanthula kuti mumvetsetse zomwe zili (chabwino, pamenepa, zigawo za vekitala yosinthira) ndi momwe zimakhudzira mtengo wa metric.
Ndipo kuchokera kuzidziwitso izi: mvetsetsani zomwe zidakhudzidwa ndi kusintha kwazinthu zofunikira.

Thamanga attribute-importance zotheka m'njira zosiyanasiyana.

Pazifukwa izi, ndimakonda ma algorithm randomForest R phukusi la dzina lomwelo (zolemba)
randomForest, monga momwe ndikumvetsetsa ntchito yake yonse komanso njira yake yowunika kufunikira kwa zikhumbo makamaka, imamanga chitsanzo china cha kudalira kusinthika kwa mayankho pazikhumbo.

M'malo athu, kusiyanasiyana kwamayankhidwe ndi metric yomwe imapezeka kuchokera ku database pamayeso olemetsa: tps;
Ndipo mawonekedwe ndi zigawo za vector yosinthira.

Kotero apa randomForest amawunika kufunikira kwa mtundu uliwonse wachitsanzo ndi manambala awiri: %IncMSE - momwe kupezeka / kusakhalapo kwa chikhalidwe ichi mu chitsanzo kumasintha khalidwe la MSE la chitsanzo ichi (Mean Squared Error);

Ndipo IncNodePurity ndi nambala yomwe ikuwonetsa momwe, kutengera mikhalidwe ya chikhalidwe ichi, dataset yokhala ndi zowonera ingagawidwe, kotero kuti mu gawo limodzi pali deta yokhala ndi mtengo umodzi wa metric yomwe ikufotokozedwa, ndipo ina ndi mtengo wina wa metric.
Chabwino, ndiye kuti: ndi gawo lotani ili (ndinawona kulongosola komveka bwino kwa chilankhulo cha Chirasha pa RandomForest) apa).

R-code ya anthu ogwira ntchito yokonza deta yokhala ndi zotsatira za mayeso a katundu:

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

Mukhoza kusankha mwachindunji ma hyperparameters a algorithm ndi manja anu ndipo, poyang'ana khalidwe lachitsanzo, sankhani chitsanzo chomwe chimakwaniritsa zonenedweratu pa dataset yovomerezeka.
Mutha kulemba mtundu wina wa ntchito pa ntchitoyi (mwa njira, kachiwiri, pogwiritsa ntchito mtundu wina wa kukhathamiritsa kwa algorithm).

Mutha kugwiritsa ntchito phukusi la R caret, osati mfundo yofunika.

Zotsatira zake, mu nkhaniyi, zotsatirazi zimapezedwa kuti ziwone kuchuluka kwa kufunikira kwa zikhumbozo:

Njira ya sayansi, kapena momwe mungasankhire kasinthidwe ka database pogwiritsa ntchito ma benchmarks ndi algorithm yokhathamiritsa

Chabwino. Chifukwa chake, titha kuyambitsa kusinkhasinkha kwapadziko lonse lapansi:

  1. Zikuoneka kuti chofunika kwambiri, pansi pa miyeso iyi, chinali chizindikiro commit_wait
    Mwaukadaulo, imafotokoza momwe amagwirira ntchito io polemba redo data kuchokera ku subdb log buffer kupita ku gulu lamakono la log: synchronous or asynchronous.
    mtengo nowait zomwe zimabweretsa pafupifupi vertical, kuwonjezeka kangapo kwa mtengo wa tps metric: uku ndiko kuphatikizidwa kwa asynchronous io mode m'magulu obwereza.
    Funso losiyana ndiloti muyenera kuchita izi m'nkhokwe yazakudya kapena ayi. Apa ndimangonena kuti: ichi ndi chinthu chofunikira kwambiri.
  2. Ndizomveka kuti kukula kwa log buffer ya subd: kumakhala chinthu chofunikira.
    Zing'onozing'ono za buffer ya chipika, kuchepa kwa mphamvu yake, nthawi zambiri zimasefukira ndi / kapena kulephera kugawa malo aulere mmenemo kuti mutengere gawo la deta yatsopano ya redox.
    Izi zikutanthauza: kuchedwa komwe kumayenderana ndi kugawa malo muzosungira za log ndi/kapena kutaya zomwe zachitikanso m'magulu obwereza.
    Kuchedwetsaku, ndithudi, kuyenera kukhudza momwe nkhokwe ikuyendetsera zinthu.
  3. chizindikiro db_block_checksum: chabwino, komanso, ndizodziwikiratu - kusinthana kumapangitsa kuti pakhale midadada yakuda mu cache ya buffer ya subdatabase.
    Zomwe, poyang'ana ma checksums a datablocks zayatsidwa, nkhokwe iyenera kukonza - kuwerengera ma checksums kuchokera ku thupi la datablock, yang'anani ndi zomwe zalembedwa pamutu wa datablock: machesi / sagwirizana.
    Ntchito yotereyi, siyingathenso kuchedwetsa kukonzanso kwa data, ndipo motero, gawo ndi makina omwe amayika chizindikirochi amakhala ofunika.
    Ndicho chifukwa chake wogulitsa amapereka, muzolemba za parameter iyi, zosiyana zake (parameter) ndikuwona kuti inde, padzakhala zotsatira, koma, chabwino, mukhoza kusankha zosiyana, mpaka "kuchoka" ndi zotsatira zosiyanasiyana.

Chabwino, mapeto a dziko lonse.

Njirayi, kawirikawiri, imakhala yogwira ntchito.

Amadzilola yekha, m'magawo oyambirira a kuyesa katundu wa dongosolo linalake lautumiki, kuti asankhe kasinthidwe kake (kachitidwe) koyenera kwa katunduyo, kuti asafufuze mozama kwambiri za kukhazikitsa dongosolo la katunduyo.

Koma sizimapatula kwathunthu - osachepera pamlingo womvetsetsa: dongosololi liyenera kudziwika za "makona osinthika" ndi magawo ovomerezeka a kuzungulira kwa mitsuko iyi.

Njirayo imatha kupeza mwachangu kasinthidwe kabwino kachitidwe.
Ndipo kutengera zotsatira za kuyezetsa, ndizotheka kupeza zambiri zamtundu waubwenzi pakati pa ma metrics amachitidwe adongosolo ndi zoyambira zamagawo adongosolo.

Zomwe, ndithudi, ziyenera kuthandizira kuti pakhale chidziwitso chakuya kwambiri cha dongosolo, ntchito yake, osachepera pansi pa katundu wopatsidwa.

Pochita, uku ndikusinthanitsa kwa ndalama zomvetsetsa dongosolo lokhazikika pamitengo yokonzekera kuyesedwa kotere kwa dongosolo.

Ndikufuna kuzindikira padera: mwa njira iyi, kuchuluka kwa kuyezetsa kwadongosolo kumachitidwe ogwirira ntchito omwe adzakhale nawo pochita malonda ndikofunikira kwambiri.

Zikomo chifukwa cha chidwi chanu komanso nthawi yanu.

Source: www.habr.com

Kuwonjezera ndemanga