Ọna poke ijinle sayensi, tabi bii o ṣe le yan iṣeto data kan nipa lilo awọn aṣepari ati algoridimu iṣapeye

Kaabo.

Mo pinnu lati pin wiwa mi - eso ti ero, idanwo ati aṣiṣe.
Nipa ati nla: eyi kii ṣe wiwa, nitorinaa - gbogbo eyi yẹ ki o ti mọ fun igba pipẹ, si awọn ti o ni ipa ninu sisẹ data iṣiro ti a lo ati iṣapeye ti eyikeyi awọn eto, kii ṣe pataki ni DBMS.
Ati: bẹẹni, wọn mọ, wọn kọ awọn nkan ti o nifẹ si lori iwadii wọn, apẹẹrẹ (UPD.: ninu awọn asọye wọn tọka si iṣẹ akanṣe ti o nifẹ pupọ: ottertune )
Ni apa keji: laifọwọyi Emi ko rii eyikeyi darukọ tabi itankale ọna yii lori Intanẹẹti laarin awọn alamọja IT, DBA.

Nitorinaa, si aaye.

Jẹ ki a ro pe a ni iṣẹ-ṣiṣe kan: lati ṣeto eto iṣẹ kan lati ṣe iṣẹ iru iṣẹ kan.

A mọ nipa iṣẹ yii: kini o jẹ, bawo ni a ṣe ṣe iwọn didara iṣẹ yii, ati kini idiwọn fun iwọn didara yii.

Jẹ ki a tun ro pe o jẹ diẹ sii tabi kere si ti a mọ ati oye: gangan bi a ṣe ṣe iṣẹ ni (tabi pẹlu) eto iṣẹ yii.

“Diẹ sii tabi kere si” - eyi tumọ si pe o ṣee ṣe lati mura (tabi gba lati ibikan) ohun elo kan, ohun elo, iṣẹ ti o le ṣepọ ati lo si eto naa pẹlu fifuye idanwo to peye si ohun ti yoo wa ni iṣelọpọ, ni awọn ipo to peye fun ṣiṣẹ ni iṣelọpọ.

O dara, jẹ ki a ro pe eto awọn eto atunṣe fun eto iṣẹ yii ni a mọ, eyiti o le ṣee lo lati tunto eto yii ni awọn ofin ti iṣelọpọ iṣẹ rẹ.

Ati pe kini iṣoro naa - ko si oye pipe ti eto iṣẹ yii, ọkan ti o fun ọ laaye lati tunto awọn eto ti eto yii ni oye fun fifuye ọjọ iwaju lori pẹpẹ ti a fun ati gba iṣẹ ṣiṣe ti eto naa.

O dara. Eyi fẹrẹ jẹ ọran nigbagbogbo.

Kini o le ṣe nibi?

O dara, ohun akọkọ ti o wa si ọkan ni lati wo awọn iwe-ipamọ fun eto yii. Loye kini awọn sakani itẹwọgba jẹ fun awọn iye ti awọn paramita tolesese. Ati, fun apẹẹrẹ, ni lilo ọna isọdọkan ipoidojuko, yan awọn iye fun awọn eto eto ninu awọn idanwo.

Awon. fun eto diẹ ninu iru iṣeto ni, ni irisi eto kan pato ti awọn iye fun awọn aye atunto rẹ.

Waye fifuye idanwo kan si rẹ, ni lilo ohun elo irinṣẹ pupọ, olupilẹṣẹ fifuye.
Ati ki o wo iye naa - esi, tabi metiriki ti didara eto naa.

Ero keji le jẹ ipari pe eyi jẹ akoko pipẹ pupọ.

O dara, iyẹn ni: ti ọpọlọpọ awọn eto eto ba wa, ti awọn sakani ti awọn iye wọn ti n ṣiṣẹ pọ, ti idanwo fifuye kọọkan gba akoko pupọ lati pari, lẹhinna: bẹẹni, gbogbo eyi le gba itẹwẹgba. o to ojo meta.

O dara, eyi ni ohun ti o le loye ati ranti.

O le rii pe ninu ṣeto awọn iye ti awọn aye eto eto iṣẹ ni fekito kan, bi ọkọọkan ti diẹ ninu awọn iye.

Kọọkan iru fekito, awọn ohun miiran jẹ dogba (ni pe ko ni ipa nipasẹ fekito yii), ni ibamu si iye metric ti o daju patapata - itọkasi ti didara iṣẹ eto labẹ fifuye idanwo.

Ie

Jẹ ki a tọka si fekito iṣeto ni eto bi Ọna poke ijinle sayensi, tabi bii o ṣe le yan iṣeto data kan nipa lilo awọn aṣepari ati algoridimu iṣapeyenibo Ọna poke ijinle sayensi, tabi bii o ṣe le yan iṣeto data kan nipa lilo awọn aṣepari ati algoridimu iṣapeye; Nibo Ọna poke ijinle sayensi, tabi bii o ṣe le yan iṣeto data kan nipa lilo awọn aṣepari ati algoridimu iṣapeye - nọmba ti awọn paramita atunto eto, melo ni awọn paramita wọnyi wa.

Ati iye ti metric ti o baamu si eyi Ọna poke ijinle sayensi, tabi bii o ṣe le yan iṣeto data kan nipa lilo awọn aṣepari ati algoridimu iṣapeye jẹ ki a tọka si bi
Ọna poke ijinle sayensi, tabi bii o ṣe le yan iṣeto data kan nipa lilo awọn aṣepari ati algoridimu iṣapeye, lẹhinna a gba iṣẹ kan: Ọna poke ijinle sayensi, tabi bii o ṣe le yan iṣeto data kan nipa lilo awọn aṣepari ati algoridimu iṣapeye

O dara, lẹhinna: ohun gbogbo lẹsẹkẹsẹ wa si isalẹ si, ninu ọran mi: o fẹrẹ gbagbe lati awọn ọjọ ọmọ ile-iwe mi, awọn algoridimu fun wiwa fun extremum ti iṣẹ kan.

O dara, ṣugbọn nibi ibeere eleto kan ati ibeere ti o waye: kini algorithm lati lo.

  1. Ni ori - ki o le koodu kere nipa ọwọ.
  2. Ati fun o lati ṣiṣẹ, i.e. ri extremum (ti o ba ti wa ni ọkan), daradara, ni o kere yiyara ju ipoidojuko ayalu.

Ojuami akọkọ tanilolobo ti a nilo lati wo si ọna diẹ ninu awọn agbegbe ninu eyi ti iru algoridimu ti tẹlẹ a ti muse, ati ki o wa, ni diẹ ninu awọn fọọmu, setan fun lilo ninu koodu.
O dara, Mo mọ python и cran-r

Ojuami keji tumọ si pe o nilo lati ka nipa awọn algoridimu funrararẹ, kini wọn jẹ, kini awọn ibeere wọn, ati awọn ẹya ti iṣẹ wọn.

Ati pe ohun ti wọn fun le jẹ awọn ipa ẹgbẹ ti o wulo - awọn abajade, tabi taara lati algorithm funrararẹ.

Tabi wọn le gba lati awọn abajade ti algorithm.

Pupọ da lori awọn ipo titẹ sii.

Fun apẹẹrẹ, ti o ba jẹ pe, fun idi kan, o nilo lati gba abajade ni iyara, daradara, o nilo lati wo si ọna awọn algoridimu ayalu gradient ki o yan ọkan ninu wọn.

Tabi, ti akoko ko ba ṣe pataki tobẹẹ, o le, fun apẹẹrẹ, lo awọn ọna iṣapeye stochastic, gẹgẹbi algorithm jiini.

Mo daba lati ṣe akiyesi iṣẹ ti ọna yii, yiyan iṣeto eto, lilo algorithm jiini, ni atẹle, bẹ lati sọ: iṣẹ yàrá.

Atilẹba:

  1. Jẹ ki o wa, gẹgẹbi eto iṣẹ: oracle xe 18c
  2. Jẹ ki o ṣe iṣẹ ṣiṣe iṣowo ati ibi-afẹde: lati gba iṣelọpọ ti o ṣeeṣe ti o ga julọ ti subdatabase, ni awọn iṣowo / iṣẹju-aaya.
  3. Awọn iṣowo le jẹ iyatọ pupọ ni iseda ti ṣiṣẹ pẹlu data ati ipo ti iṣẹ.
    Jẹ ki a gba pe iwọnyi jẹ awọn iṣowo ti ko ṣe ilana iye nla ti data tabular.
    Ni ori pe wọn ko ṣe agbejade data iyipada diẹ sii ju atunṣe ati pe wọn ko ṣe ilana awọn ipin nla ti awọn ori ila ati awọn tabili nla.

Iwọnyi jẹ awọn iṣowo ti o yi ọna kan pada ni tabili nla diẹ sii tabi kere si, pẹlu nọmba kekere ti awọn atọka lori tabili yii.

Ni ipo yii: iṣelọpọ ti subdatabase fun awọn iṣowo sisẹ yoo, pẹlu ifiṣura kan, jẹ ipinnu nipasẹ didara sisẹ nipasẹ ibi ipamọ data redox.

AlAIgBA - ti a ba sọrọ ni pataki nipa awọn eto subdb.

Nitoripe, ninu ọran gbogbogbo, o le wa, fun apẹẹrẹ, awọn titiipa iṣowo laarin awọn akoko SQL, nitori apẹrẹ ti iṣẹ olumulo pẹlu data tabular ati/tabi awoṣe tabular.

Ewo, nitorinaa, yoo ni ipa irẹwẹsi lori metiriki TPS ati pe eyi yoo jẹ ifosiwewe exogenous, ibatan si subdatabase: daradara, eyi ni bii awoṣe tabular ti ṣe apẹrẹ ati iṣẹ pẹlu data ninu rẹ ti awọn idena waye.

Nitorinaa, fun mimọ ti idanwo naa, a yoo yọkuro ifosiwewe yii, ati ni isalẹ Emi yoo ṣe alaye gangan bii.

  1. Jẹ ki a ro, fun asọye, pe 100% ti awọn aṣẹ SQL ti a fi silẹ si ibi ipamọ data jẹ awọn aṣẹ DML.
    Jẹ ki awọn abuda ti olumulo ṣiṣẹ pẹlu subdatabase jẹ kanna ni awọn idanwo.
    Eyun: nọmba awọn akoko skl, data tabular, bawo ni awọn akoko skl ṣe n ṣiṣẹ pẹlu wọn.
  2. Subd ṣiṣẹ ni FORCE LOGGING, ARCHIVELOG mods. Flashback-database ti wa ni pipa, ni ipele subd.
  3. Awọn igbasilẹ atunṣe: ti o wa ninu eto faili ti o yatọ, lori "disk" lọtọ;
    Iyoku paati ti ara ti aaye data: ni omiiran, eto faili lọtọ, lori “disk” lọtọ:

Awọn alaye diẹ sii nipa ẹrọ ti ara. yàrá database irinše

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

Ni ibẹrẹ, labẹ awọn ipo fifuye wọnyi, Mo fẹ lati lo subd idunadura SLOB-IwUlO
O ni iru ẹya iyanu bẹ, Emi yoo sọ onkọwe naa:

Ni okan ti SLOB ni "ọna SLOB." Ọna SLOB ni ero lati ṣe idanwo awọn iru ẹrọ
laisi ariyanjiyan ohun elo. Ọkan ko le wakọ o pọju hardware išẹ
lilo koodu ohun elo ti o jẹ, fun apẹẹrẹ, ti a dè nipa titiipa ohun elo tabi paapaa
pinpin awọn bulọọki aaye data Oracle. Iyẹn tọ — ori wa nigba pinpin data
ni awọn bulọọki data! Ṣugbọn SLOB-ninu imuṣiṣẹ aiyipada rẹ-jẹ ajesara si iru ariyanjiyan.

Ikede yii: ni ibamu, o jẹ.
O rọrun lati ṣe ilana iwọn ti parallelism ti awọn akoko cl, eyi ni bọtini -t lọlẹ awọn IwUlO runit.sh lati SLOB
Iwọn ogorun awọn aṣẹ DML jẹ ilana, ninu nọmba awọn ifọrọranṣẹ ti a firanṣẹ si subd, igba ọrọ kọọkan, paramita UPDATE_PCT
Lọtọ ati irọrun pupọ: SLOB funrararẹ, ṣaaju ati lẹhin igba fifuye - ngbaradi statspack, tabi awr-snapshots (ohun ti a ṣeto lati pese).

Sibẹsibẹ, o wa jade pe SLOB ko ṣe atilẹyin awọn akoko SQL pẹlu iye akoko ti o kere ju 30 aaya.
Nitorinaa, Mo kọkọ ṣe koodu ti ara mi, ẹya osise-peasant ti agberu, ati lẹhinna o wa ni iṣẹ.

Jẹ ki n ṣalaye kini agberu ṣe ati bii o ṣe ṣe, fun asọye.
Ni pataki agberu naa dabi eyi:

koodu Osise

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

Awọn oṣiṣẹ ṣe ifilọlẹ ni ọna yii:

Awọn oṣiṣẹ nṣiṣẹ

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

Ati awọn tabili fun awọn oṣiṣẹ ti pese sile bi eleyi:

Ṣiṣẹda tabili

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"

Awon. Fun oṣiṣẹ kọọkan (ni iṣe: igba SQL lọtọ ni DB) tabili ti o yatọ ni a ṣẹda, pẹlu eyiti oṣiṣẹ ṣiṣẹ.

Eyi ṣe idaniloju isansa ti awọn titiipa iṣowo laarin awọn akoko oṣiṣẹ.
Olukuluku oṣiṣẹ: ṣe ohun kanna, pẹlu tabili tirẹ, gbogbo awọn tabili jẹ kanna.
Gbogbo awọn oṣiṣẹ ṣe iṣẹ fun iye akoko kanna.
Pẹlupẹlu, fun akoko pipẹ to pe, fun apẹẹrẹ, iyipada log yoo dajudaju waye, ati diẹ sii ju ẹẹkan lọ.
O dara, ni ibamu, awọn idiyele ti o somọ ati awọn ipa dide.
Ninu ọran mi, Mo tunto iye akoko iṣẹ awọn oṣiṣẹ ni awọn iṣẹju 8.

A nkan ti a statspack Iroyin apejuwe awọn isẹ ti awọn subd labẹ fifuye

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

Pada si iṣẹ yàrá.
A yoo, awọn ohun miiran jẹ dogba, yatọ si awọn iye ti awọn aye atẹle ti ipilẹ data ile-iṣẹ yàrá:

  1. Iwon ti database log awọn ẹgbẹ. iye ibiti: [32, 1024] MB;
  2. Nọmba awọn ẹgbẹ akọọlẹ ninu ibi ipamọ data. iye iye: [2,32];
  3. log_archive_max_processes iye iye: [1,8];
  4. commit_logging Awọn iye meji ni a gba laaye: batch|immediate;
  5. commit_wait Awọn iye meji ni a gba laaye: wait|nowait;
  6. log_buffer iye ibiti: [2,128] MB.
  7. log_checkpoint_timeout iye ibiti: [60,1200] aaya
  8. db_writer_processes iye iye: [1,4]
  9. undo_retention iye ibiti: [30;300] aaya
  10. transactions_per_rollback_segment iye iye: [1,8]
  11. disk_asynch_io Awọn iye meji ni a gba laaye: true|false;
  12. filesystemio_options Awọn iye wọnyi ni a gba laaye: none|setall|directIO|asynch;
  13. db_block_checking Awọn iye wọnyi ni a gba laaye: OFF|LOW|MEDIUM|FULL;
  14. db_block_checksum Awọn iye wọnyi ni a gba laaye: OFF|TYPICAL|FULL;

Eniyan ti o ni iriri ni mimu awọn apoti isura infomesonu Oracle le dajudaju tẹlẹ sọ kini ati si kini awọn iye yẹ ki o ṣeto, lati awọn aye ti a sọ pato ati awọn iye itẹwọgba wọn, lati le gba iṣelọpọ nla ti data data fun iṣẹ pẹlu data ti o tọka si. koodu ohun elo, nibi loke.

Sugbon.

Ojuami ti iṣẹ yàrá ni lati ṣafihan pe algorithm ti o dara ju funrararẹ yoo ṣe alaye eyi fun wa ni iyara.

Fun wa, gbogbo ohun ti o ku ni lati wo inu iwe-ipamọ naa, nipasẹ eto isọdi, o kan to lati wa iru awọn paramita lati yipada ati ni awọn sakani wo ni.
Ati paapaa: koodu koodu ti yoo lo lati ṣiṣẹ pẹlu eto aṣa ti algorithm ti o dara ju ti o yan.

Nitorina, bayi nipa koodu.
Mo ti sọrọ loke nipa cran-r, ie: gbogbo ifọwọyi pẹlu awọn ti adani eto ti wa ni orchestrated ni awọn fọọmu ti ẹya R akosile.

Iṣẹ-ṣiṣe gangan, itupalẹ, yiyan nipasẹ iye metric, awọn ọna eto eto: eyi jẹ package kan GA (iwe)
Apo naa, ninu ọran yii, ko dara pupọ, ni ori pe o nireti pe awọn vectors (chromosomes, ti o ba wa ni awọn ofin ti package) lati wa ni pato ni irisi awọn okun ti awọn nọmba pẹlu apakan ida kan.

Ati fekito mi, lati awọn iye ti awọn aye eto: iwọnyi jẹ awọn iwọn 14 - odidi ati awọn iye okun.

Iṣoro naa, nitorinaa, ni irọrun yago fun nipasẹ yiyan awọn nọmba kan pato si awọn iye okun.

Nitorinaa, ni ipari, nkan akọkọ ti iwe afọwọkọ R dabi eyi:

Pe 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

Nibi, pẹlu iranlọwọ lower и upper subroutine eroja ga Ni pataki, agbegbe ti aaye wiwa ti wa ni pato, laarin eyiti a yoo ṣe wiwa fun iru fekito kan (tabi awọn olutọpa) fun eyiti iye ti o pọ julọ ti iṣẹ amọdaju yoo gba.

Awọn ga subroutine n ṣe wiwa ti o nmu iṣẹ ṣiṣe ti o pọ si.

O dara, lẹhinna, o wa ni pe, ninu ọran yii, o jẹ dandan pe iṣẹ amọdaju, agbọye fekito bi ṣeto awọn iye fun awọn paramita kan ti subd, gba metric lati subd.

Iyẹn ni: melo ni, pẹlu iṣeto subd ti a fun ati fifuye ti a fun lori subd: awọn iṣowo awọn ilana subd fun iṣẹju-aaya.

Iyẹn ni, nigba ṣiṣi silẹ, awọn igbesẹ-ọpọ-ọna atẹle gbọdọ ṣee ṣe inu iṣẹ amọdaju:

  1. Ṣiṣẹda fekito igbewọle ti awọn nọmba - yiyi pada si awọn iye fun awọn aye-ipin data subdata.
  2. Igbiyanju lati ṣẹda nọmba ti a fun ti awọn ẹgbẹ atunkọ ti iwọn ti a fun. Pẹlupẹlu, igbiyanju naa le jẹ aṣeyọri.
    Awọn ẹgbẹ irohin ti o ti wa tẹlẹ ninu subd, ni diẹ ninu awọn opoiye ati ti diẹ ninu awọn iwọn, fun awọn ti nw ti awọn ṣàdánwò - d.b. paarẹ.
  3. Ti aaye ti tẹlẹ ba ṣaṣeyọri: sisọ awọn iye ti awọn iwọn iṣeto ni ibi ipamọ data (lẹẹkansi: ikuna le wa)
  4. Ti igbesẹ ti tẹlẹ ba ṣaṣeyọri: didaduro subd, bẹrẹ subd ki awọn iye paramita ti a ti sọ tẹlẹ yoo ni ipa. (lẹẹkansi: glitch le wa)
  5. Ti igbesẹ ti tẹlẹ ba ṣaṣeyọri: ṣe idanwo fifuye kan. gba awọn metiriki lati subd.
  6. Da subd pada si ipo atilẹba rẹ, i.e. pa afikun log awọn ẹgbẹ, pada atilẹba subdatabase iṣeto ni lati sise.

Koodu iṣẹ amọdaju

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

Iyẹn. gbogbo iṣẹ: ošišẹ ti ni amọdaju ti iṣẹ.

Awọn ilana ga-subroutine jẹ awọn ọna-ara, tabi, ni deede diẹ sii, awọn chromosomes.
Ninu eyiti, ohun ti o ṣe pataki julọ fun wa ni yiyan awọn chromosomes pẹlu awọn jiini fun eyiti iṣẹ amọdaju n ṣe awọn iye nla.

Eyi, ni pataki, jẹ ilana ti wiwa fun eto ti o dara julọ ti awọn chromosomes nipa lilo fekito ni aaye wiwa onisẹpo N.

Ko o pupọ, alaye alaye, pẹlu apẹẹrẹ ti R-koodu, awọn iṣẹ ti a jiini alugoridimu.

Emi yoo fẹ lati ṣe akiyesi awọn aaye imọ-ẹrọ meji lọtọ lọtọ.

Awọn ipe oluranlọwọ lati iṣẹ naa evaluate, fun apẹẹrẹ, Duro-ibẹrẹ, ṣeto iye ti paramita subd, ni a ṣe da lori cran-r awọn iṣẹ system2

Pẹlu iranlọwọ ti eyiti: diẹ ninu iwe afọwọkọ bash tabi aṣẹ ni a pe.

Fun apere:

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

Ojuami keji ni ila, evaluate awọn iṣẹ, pẹlu fifipamọ iye metiriki kan pato ati pekito isọdọtun ti o baamu si faili log kan:

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

Eyi ṣe pataki, nitori lati ori data data yii, yoo ṣee ṣe lati gba alaye afikun nipa eyiti ninu awọn paati ti vector tuning ni ipa ti o tobi tabi kere si lori iye metric.

Iyẹn ni: yoo ṣee ṣe lati ṣe itupalẹ attribute-importamce.

Nitorina kini o le ṣẹlẹ?

Ni fọọmu iyaya, ti o ba paṣẹ fun awọn idanwo ni ọna iwọn metiriki, aworan naa jẹ atẹle:

Ọna poke ijinle sayensi, tabi bii o ṣe le yan iṣeto data kan nipa lilo awọn aṣepari ati algoridimu iṣapeye

Diẹ ninu awọn data ti o baamu si awọn iye to gaju ti metric:
Ọna poke ijinle sayensi, tabi bii o ṣe le yan iṣeto data kan nipa lilo awọn aṣepari ati algoridimu iṣapeye
Nibi, ninu sikirinifoto pẹlu awọn abajade, Emi yoo ṣalaye: awọn iye ti vector tuning ni a fun ni awọn ofin ti koodu iṣẹ amọdaju, kii ṣe ni awọn ofin ti atokọ nọmba ti awọn aye / awọn sakani ti awọn iye paramita, eyiti a ṣe agbekalẹ loke ninu ọrọ.

O dara. Ṣe o jẹ pupọ tabi diẹ, ~ 8 ẹgbẹrun tps: ibeere ti o yatọ.
Laarin ilana ti iṣẹ yàrá, nọmba yii ko ṣe pataki, ohun ti o ṣe pataki ni agbara, bawo ni iye yii ṣe yipada.

Awọn dainamiki nibi ni o dara.
O han gbangba pe o kere ju ifosiwewe kan ni pataki ni ipa lori iye ti metric, ga-algorithm, tito lẹsẹsẹ nipasẹ awọn vector chromosome: bo.
Ni idajọ nipasẹ awọn agbara agbara iṣẹtọ ti awọn iye ti tẹ, o kere ju ifosiwewe kan wa ti, botilẹjẹpe o kere pupọ, ni ipa kan.

Eyi ni ibi ti o nilo rẹ attribute-importance onínọmbà lati ni oye kini awọn abuda (daradara, ninu ọran yii, awọn paati ti fekito ti n ṣatunṣe) ati bii wọn ṣe ni ipa lori iye metric.
Ati lati alaye yii: loye kini awọn nkan ti o ni ipa nipasẹ awọn ayipada ninu awọn abuda pataki.

Ṣe attribute-importance ṣee ṣe ni awọn ọna oriṣiriṣi.

Fun awọn idi wọnyi, Mo fẹ algorithm randomForest R package ti orukọ kanna (iwe)
randomForest, Bi mo ṣe yeye iṣẹ rẹ ni apapọ ati ọna rẹ lati ṣe ayẹwo pataki ti awọn eroja ni pato, kọ awoṣe kan ti igbẹkẹle ti iyipada idahun lori awọn eroja.

Ninu ọran wa, oniyipada idahun jẹ metiriki ti a gba lati ibi ipamọ data ni awọn idanwo fifuye: tps;
Ati awọn eroja jẹ awọn paati ti fekito yiyi.

Nitorina nibi randomForest ṣe iṣiro pataki ti ẹya awoṣe kọọkan pẹlu awọn nọmba meji: %IncMSE - bawo ni wiwa / isansa ti abuda yii ninu awoṣe ṣe iyipada didara MSE ti awoṣe yii (Aṣiṣe Itumọ Squared);

Ati IncNodePurity jẹ nọmba kan ti o ṣe afihan bi o ṣe dara, ti o da lori awọn iye ti abuda yii, a le pin data pẹlu awọn akiyesi, nitorinaa ni apakan kan data wa pẹlu iye kan ti metiriki ti n ṣalaye, ati ni ekeji pẹlu miiran iye ti metric.
O dara, iyẹn ni: si iwọn wo ni eyi jẹ ẹya isọdi (Mo rii ti o han julọ, alaye ede Russian lori RandomForest nibi).

Osise-peasant R-koodu fun sisẹ data data kan pẹlu awọn abajade ti awọn idanwo fifuye:

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

O le taara yan awọn hyperparameters ti algorithm pẹlu ọwọ rẹ ati, ni idojukọ didara awoṣe, yan awoṣe kan ti o mu awọn asọtẹlẹ ni pipe diẹ sii lori data afọwọsi.
O le kọ iru iṣẹ kan fun iṣẹ yii (nipasẹ ọna, lẹẹkansi, lilo diẹ ninu iru algorithm ti o dara ju).

O le lo R package caret, kii ṣe aaye naa jẹ pataki.

Bi abajade, ninu ọran yii, abajade atẹle ni a gba lati ṣe ayẹwo iwọn pataki ti awọn abuda:

Ọna poke ijinle sayensi, tabi bii o ṣe le yan iṣeto data kan nipa lilo awọn aṣepari ati algoridimu iṣapeye

O dara. Nitorinaa, a le bẹrẹ iṣaroye agbaye:

  1. O han pe pataki julọ, labẹ awọn ipo idanwo wọnyi, jẹ paramita naa commit_wait
    Ni imọ-ẹrọ, o ṣalaye ipo ipaniyan ti iṣẹ io ti kikọ data atunkọ lati inu ifipamọ log subdb si ẹgbẹ akọọlẹ lọwọlọwọ: amuṣiṣẹpọ tabi asynchronous.
    Itumo nowait eyiti o jẹ abajade ni inaro ti o fẹrẹẹ, ilosoke pupọ ni iye tps metric: eyi ni ifisi ti ipo io asynchronous ni awọn ẹgbẹ redo.
    Ibeere lọtọ ni boya tabi rara o yẹ ki o ṣe eyi ni ibi data data ounje. Nibi ti mo fi opin si ara mi lati kan siso: yi ni a significant ifosiwewe.
  2. O jẹ ọgbọn pe iwọn ifipamọ log ti subd: wa ni jade lati jẹ ifosiwewe pataki.
    Iwọn ti o kere ju ti ifipamọ log, dinku agbara ifiṣura rẹ, diẹ sii ni igbagbogbo ti o ṣan ati/tabi ailagbara lati pin agbegbe ọfẹ ninu rẹ fun ipin kan ti data redox tuntun.
    Eyi tumọ si: awọn idaduro ti o ni nkan ṣe pẹlu ipin aaye ninu ifipamọ log ati/tabi sisọ data redo silẹ lati ọdọ rẹ sinu awọn ẹgbẹ atunkọ.
    Awọn idaduro wọnyi, dajudaju, yẹ ki o si ṣe ni ipa lori iṣelọpọ data data fun awọn iṣowo.
  3. Apaadi db_block_checksum: daradara, paapaa, ni gbogbogbo o han gbangba - ṣiṣe iṣowo ṣe itọsọna si dida awọn bulọọki darty ni kaṣe ifipamọ subdatabase.
    Ewo, nigba ti o ba mu awọn sọwedowo sọwedowo ti datablocks ṣiṣẹ, data data ni lati ṣe ilana - ṣe iṣiro awọn sọwedowo wọnyi lati ara ti datablock, ṣayẹwo wọn pẹlu ohun ti a kọ sinu akọsori datablock: awọn ere-kere / ko baramu.
    Iru iṣẹ bẹ, lẹẹkansi, ko le ṣe idaduro sisẹ data, ati ni ibamu, paramita ati ẹrọ ti o ṣeto paramita yii jẹ pataki.
    Ti o ni idi ti olutaja nfunni, ninu iwe fun paramita yii, awọn iye oriṣiriṣi fun rẹ (paramita) ati ṣe akiyesi pe bẹẹni, ipa kan yoo wa, ṣugbọn, daradara, o le yan awọn iye oriṣiriṣi, to “pa” ati awọn ipa oriṣiriṣi.

O dara, ipari agbaye kan.

Ọna naa, ni gbogbogbo, wa lati ṣiṣẹ pupọ.

O gba ara rẹ laaye, ni awọn ipele ibẹrẹ ti idanwo fifuye ti eto iṣẹ kan, lati yan (eto) iṣeto ti o dara julọ fun ẹru naa, kii ṣe lati ṣawari pupọ sinu awọn pato ti eto eto fun fifuye naa.

Ṣugbọn ko yọkuro patapata - o kere ju ni ipele oye: eto naa gbọdọ jẹ mimọ nipa “awọn bọtini atunṣe” ati awọn aaye iyọọda ti yiyi ti awọn bọtini wọnyi.

Awọn ona le ki o si jo ni kiakia ri awọn ti aipe eto iṣeto ni.
Ati da lori awọn abajade idanwo, o ṣee ṣe lati gba alaye nipa iru ibatan laarin awọn metiriki iṣẹ ṣiṣe ati awọn iye ti awọn eto eto eto.

Ewo, nitorinaa, yẹ ki o ṣe alabapin si ifarahan ti oye jinlẹ pupọ ti eto naa, iṣẹ rẹ, o kere ju labẹ ẹru ti a fun.

Ni iṣe, eyi jẹ paṣipaarọ awọn idiyele ti oye eto adani fun awọn idiyele ti ngbaradi iru idanwo ti eto naa.

Emi yoo fẹ lati ṣe akiyesi lọtọ: ni ọna yii, iwọn ti deede ti idanwo eto si awọn ipo iṣẹ ti yoo ni ni iṣẹ iṣowo jẹ pataki pataki.

O ṣeun fun akiyesi rẹ ati akoko.

orisun: www.habr.com

Fi ọrọìwòye kun