Usoro poke sayensị, ma ọ bụ otu esi ahọrọ nhazi nchekwa data site na iji akara benchmark na njikarịcha algọridim

Hello

Ekpebiri m ịkọrọ m chọta - mkpụrụ nke echiche, ikpe na njehie.
Site na nnukwu: nke a abụghị ịchọta, n'ezie - ihe a niile kwesịrị ịmara ogologo oge, nye ndị na-etinye aka na nhazi data nchịkọta akụkọ na njikarịcha nke usoro ọ bụla, ọ bụghị kpọmkwem DBMS.
Ma: ee, ha maara, ha na-ede akụkọ na-atọ ụtọ na nyocha ha, ihe atụ (UPD.: N'okwu ndị ahụ, ha rụtụrụ aka ọrụ na-adọrọ mmasị: ottertune )
N'aka nke ọzọ: n'aka, ahụghị m aha ma ọ bụ mgbasa ozi ọ bụla gbasara usoro a na ịntanetị n'etiti ndị ọkachamara IT, DBA.

Yabụ, ruo n'ókè.

Ka anyị were ya na anyị nwere ọrụ: ịtọlite ​​​​usoro ọrụ ụfọdụ iji rụọ ọrụ ụfọdụ.

A maara banyere ọrụ a: ihe ọ bụ, otú e si atụle àgwà nke ọrụ a, na gịnị bụ njirimara maka ịlele àgwà a.

Ka anyị cheekwa na a maara ya ma ọ bụ na-aghọta ya: kpọmkwem otu esi arụ ọrụ na (ma ọ bụ na) usoro ọrụ a.

"Ọtụtụ ma ọ bụ obere" - nke a pụtara na ọ ga-ekwe omume ịkwadebe (ma ọ bụ nweta ya site na ebe) ụfọdụ ngwá ọrụ, ịba uru, ọrụ nke nwere ike ịmepụta ma tinye ya na usoro nke nwere ule ule zuru oke maka ihe ga-abụ mmepụta, na ọnọdụ zuru oke maka ịrụ ọrụ na mmepụta.

Ọfọn, ka anyị chee na a maara usoro nhazi nhazi maka usoro ọrụ a, nke enwere ike iji hazie usoro a n'ihe gbasara nrụpụta ọrụ ya.

Ma gịnị bụ nsogbu ahụ - enweghi nghọta zuru oke nke usoro ọrụ a, nke na-enye gị ohere ịhazi nhazi nke usoro a nke ọma maka ibu n'ọdịnihu n'elu ikpo okwu enyere ma nweta mmepụta achọrọ nke usoro ahụ.

Ọfọn. Nke a fọrọ nke nta ka ọ bụrụ mgbe niile.

Kedu ihe ị ga-eme ebe a?

Ọfọn, ihe mbụ na-abata n'uche bụ ileba anya na akwụkwọ maka usoro a. Ghọta ihe oke anabatara bụ maka ụkpụrụ nke paramita mgbanwe. Ma, dịka ọmụmaatụ, site na iji usoro mgbada nhazi, họrọ ụkpụrụ maka usoro sistemụ na ule.

Ndị ahụ. nye usoro ụfọdụ ụdị nhazi, n'ụdị a kpọmkwem ụkpụrụ maka paramita nhazi ya.

Tinye ihe nlele n'ime ya, na-eji ngwa-ngwa-ngwa, onye na-ebu ibu.
Ma lee uru - nzaghachi, ma ọ bụ metric nke àgwà nke usoro ahụ.

Echiche nke abụọ nwere ike ịbụ nkwubi okwu na nke a bụ ogologo oge.

Ọfọn, ya bụ: ọ bụrụ na e nwere ọtụtụ n'iji ya gee ntị parameters, ma ọ bụrụ na ranges nke ụkpụrụ ha kpuchiri dị ukwuu, ma ọ bụrụ na onye ọ bụla ibu ule na-ewe a otutu oge iji wuchaa, mgbe ahụ: ee, ihe a niile nwere ike na-adịghị anabata ego. nke oge.

Ọfọn, ebe a bụ ihe ị nwere ike ịghọta ma cheta.

Ị nwere ike ịchọpụta na na set nke ụkpụrụ nke usoro ntọala ntọala ọrụ, e nwere vector, dị ka usoro nke ụfọdụ ụkpụrụ.

Vector ọ bụla dị otú ahụ, ihe ndị ọzọ hà nhata (n'ihi na vector a adịghị emetụta ya), kwekọrọ na uru zuru oke nke metric - ihe na-egosi àgwà nke usoro ọrụ n'okpuru ule ule.

Ee

Ka anyị gosi vector nhazi usoro dị ka Usoro poke sayensị, ma ọ bụ otu esi ahọrọ nhazi nchekwa data site na iji akara benchmark na njikarịcha algọridimebe Usoro poke sayensị, ma ọ bụ otu esi ahọrọ nhazi nchekwa data site na iji akara benchmark na njikarịcha algọridim; Ebee Usoro poke sayensị, ma ọ bụ otu esi ahọrọ nhazi nchekwa data site na iji akara benchmark na njikarịcha algọridim - ọnụ ọgụgụ nke usoro nhazi usoro, ole n'ime paramita ndị a dị.

Na uru nke metric kwekọrọ na nke a Usoro poke sayensị, ma ọ bụ otu esi ahọrọ nhazi nchekwa data site na iji akara benchmark na njikarịcha algọridim ka anyi gosi ya dika
Usoro poke sayensị, ma ọ bụ otu esi ahọrọ nhazi nchekwa data site na iji akara benchmark na njikarịcha algọridim, mgbe ahụ, anyị ga-enweta ọrụ: Usoro poke sayensị, ma ọ bụ otu esi ahọrọ nhazi nchekwa data site na iji akara benchmark na njikarịcha algọridim

Ọ dị mma, mgbe ahụ: ihe niile na-agbada ozugbo, n'ọnọdụ m: ọ fọrọ nke nta ka ọ bụrụ echefu site na ụbọchị ụmụ akwụkwọ m, algọridim maka ịchọ oke ọrụ.

Ọ dị mma, mana ebe a ajụjụ nhazi na etinyere na-ebilite: nke algọridim ị ga-eji.

  1. N'echiche - nke mere na ị nwere ike koodu obere site n'aka.
  2. Na ka ọ rụọ ọrụ, i.e. chọtara extremum (ọ bụrụ na e nwere otu), nke ọma, ọ dịkarịa ala ngwa ngwa karịa nhazi usoro.

Isi ihe nke mbụ na-egosi na anyị kwesịrị ileba anya n'akụkụ ụfọdụ ebe etinyerelarị algọridim dị otú ahụ, ma dị, n'ụdị ụfọdụ, dị njikere maka ojiji na koodu.
Ọfọn, amaara m python и cran-r

Isi okwu nke abụọ pụtara na ịkwesịrị ịgụ banyere algọridim n'onwe ha, ihe ha bụ, ihe ha chọrọ, njirimara nke ọrụ ha.

Na ihe ha na-enye nwere ike ịbụ mmetụta bara uru - nsonaazụ, ma ọ bụ ozugbo site na algọridim n'onwe ya.

Ma ọ bụ enwere ike nweta ha site na nsonaazụ nke algọridim.

Ọtụtụ na-adabere na ọnọdụ ntinye.

Dịka ọmụmaatụ, ọ bụrụ na, n'ihi ihe ụfọdụ, ịkwesịrị ị nweta nsonaazụ ngwa ngwa, nke ọma, ịkwesịrị ileba anya na algọridim gradient gradient wee họrọ otu n'ime ha.

Ma ọ bụ, ọ bụrụ na oge adịghị mkpa, ị nwere ike, dịka ọmụmaatụ, jiri usoro njikarịcha stochastic, dị ka mkpụrụ ndụ ihe nketa algọridim.

M na-atụ aro ka ị tụlee ọrụ nke usoro a, na-ahọrọ nhazi usoro, na-eji mkpụrụ ndụ ihe nketa algọridim, na-esote, dị ka a pụrụ isi kwuo ya: laabu ọrụ.

Nke izizi:

  1. Ka e nwee, dị ka usoro ọrụ: oracle xe 18c
  2. Ka ọ na-eje ozi ọrụ azụmahịa na ihe mgbaru ọsọ: iji nweta ntinye kachasị elu nke subdatabase, na azụmahịa / sk.
  3. Azụmahịa nwere ike ịdị nnọọ iche na ọdịdị nke ịrụ ọrụ na data yana ọnọdụ ọrụ.
    Ka anyị kwenye na ndị a bụ azụmahịa na-anaghị ahazi nnukwu data tabular.
    N'uche na ha anaghị ewepụta data mwepu karịa ka emegharia ma anaghị ahazi nnukwu ahịrị ahịrị na tebụl buru ibu.

Ndị a bụ azụmahịa na-agbanwe otu ahịrị na tebụl buru ibu ma ọ bụ na-erughị ya, yana ọnụ ọgụgụ dị nta nke index na tebụl a.

N'ọnọdụ a: mmepụta nke subdatabase maka nhazi azụmahịa ga-, na ndoputa, kpebisiri ike site n'ịdị mma nhazi site na redox database.

Disclaimer - ọ bụrụ na anyị na-ekwu kpọmkwem maka ntọala subdb.

N'ihi na, n'ozuzu, enwere ike ịnwe, dịka ọmụmaatụ, mkpọchi azụmahịa n'etiti oge SQL, n'ihi nhazi nke ọrụ onye ọrụ na data tabular na / ma ọ bụ ụdị tabular.

Kedu nke, n'ezie, ga-enwe mmetụta ịda mbà n'obi na TPS metric na nke a ga-abụ ihe na-adịghị mma, metụtara subdatabase: nke a bụ otú e si emepụta ihe ngosi tabular na ọrụ na data dị na ya na-eme ihe mgbochi.

Ya mere, maka ịdị ọcha nke nnwale, anyị ga-ewepụ ihe a, na n'okpuru m ga-akọwa kpọmkwem otú.

  1. Ka anyị were, n'ezie, na 100% nke iwu SQL e debere na nchekwa data bụ iwu DML.
    Ka njirimara nke onye ọrụ na-arụ ọrụ na subdatabase bụrụ otu n'ime ule.
    Ya bụ: ọnụ ọgụgụ nke skl sessions, data tabular, ka skl sessions si arụ ọrụ na ha.
  2. Subd na-arụ ọrụ FORCE LOGGING, ARCHIVELOG mods. Agbanyụrụ ọnọdụ nchekwa data flashback, na ọkwa subd.
  3. Redo ndekọ: dị na sistemụ faịlụ dị iche, na “disk” dị iche;
    Akụkụ anụ ahụ ndị ọzọ nke nchekwa data: na nke ọzọ, sistemụ faịlụ dị iche, na “disk” dị iche:

Nkọwa ndị ọzọ gbasara ngwaọrụ anụ ahụ. ihe nchekwa data ụlọ nyocha

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

Na mbido, n'okpuru ọnọdụ ibu ndị a, achọrọ m iji subd azụmahịa SLOB- ịba uru
Ọ nwere njirimara mara mma, m ga-ehota onye edemede:

N'ime obi SLOB bụ "Ụzọ SLOB." Usoro SLOB na-achọ ịnwale nyiwe
na-enweghị esemokwu ngwa. Otu enweghị ike ịnya arụmọrụ ngwaike kacha
na-eji koodu ngwa bụ, ọmụmaatụ, jichiri site na mkpọchi ngwa ma ọ bụ ọbụna
na-ekekọrịta ngọngọ Oracle database. Nke ahụ ziri ezi—enwere ihe karịrị mgbe ị na-ekerịta data
na ngọngọ data! Mana SLOB-na mbugharị ya nke ndabara — enweghịkwa esemokwu dị otú ahụ.

Nkwupụta a: kwekọrọ, ọ bụ.
Ọ dị mma ịhazi ogo nke myirịta nke oge cl, nke a bụ isi ihe -t malite ọrụ ahụ runit.sh sitere na SLOB
A na-ahazi pasentị nke iwu DML, na ọnụọgụ ozi ederede ezigara na subd, nnọkọ ederede ọ bụla, oke. UPDATE_PCT
Nke iche na nke dabara adaba: SLOB n'onwe ya, tupu na mgbe ibu nnọkọ - na-akwadebe statspack, ma ọ bụ awr-snapshots (ihe atọrọ ka a kwadebere).

Otú ọ dị, ọ bịara bụrụ nke ahụ SLOB anaghị akwado SQL sessions na-erughị 30 sekọnd.
Ya mere, m na-ebu ụzọ tinye koodu nke m, onye ọrụ-onye ọrụ ugbo nke loader, mgbe ahụ, ọ nọgidere na-arụ ọrụ.

Ka m dokwuo anya ihe loader na-eme na otu o si eme ya, maka idoanya.
N'ezie, loader dị ka nke a:

Koodu onye ọrụ

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

A na-ewepụta ndị ọrụ n'ụzọ a:

Ndị ọrụ na-agba ọsọ

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

A na-edozikwa tebụl maka ndị ọrụ dị ka nke a:

Ịmepụta tebụl

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"

Ndị ahụ. Maka onye ọrụ ọ bụla (n'ezie: nnọkọ SQL dị iche na DB) a na-emepụta tebụl dị iche iche, nke onye ọrụ na-arụ ọrụ.

Nke a na-achọpụta na enweghị mkpọchi azụmahịa n'etiti oge ndị ọrụ.
Onye ọrụ ọ bụla: na-eme otu ihe, na tebụl nke ya, tebụl niile bụ otu ihe.
Ndị ọrụ niile na-arụ ọrụ otu oge.
Ọzọkwa, ruo ogologo oge zuru oke nke mere na, dịka ọmụmaatụ, mgba ọkụ log ga-emerịrị, yana ihe karịrị otu ugboro.
Ọfọn, ya mere, ọnụ ahịa na mmetụta metụtara bilitere.
N'ọnọdụ m, ahaziri m oge ọrụ ndị ọrụ na nkeji 8.

Mpempe akwụkwọ akụkọ statspack na-akọwa ọrụ nke subd dị n'okpuru ibu

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

Ịlaghachi n'ọrụ ụlọ nyocha.
Anyị ga-, ihe ndị ọzọ hà nhata, dịgasị iche iche ụkpụrụ nke ndị na-esonụ paramita nke laabu subdatabase:

  1. Nha nke ọdụ data ndekọ otu. oke uru: [32, 1024] MB;
  2. Ọnụọgụ otu akwụkwọ akụkọ dị na nchekwa data. oke uru: [2,32];
  3. log_archive_max_processes oke uru: [1,8];
  4. commit_logging A na-anabata ụkpụrụ abụọ: batch|immediate;
  5. commit_wait A na-anabata ụkpụrụ abụọ: wait|nowait;
  6. log_buffer oke uru: [2,128] MB.
  7. log_checkpoint_timeout oke uru: [60,1200] sekọnd
  8. db_writer_processes oke uru: [1,4]
  9. undo_retention oke uru: [30;300] sekọnd
  10. transactions_per_rollback_segment oke uru: [1,8]
  11. disk_asynch_io A na-anabata ụkpụrụ abụọ: true|false;
  12. filesystemio_options a na-anabata ụkpụrụ ndị a: none|setall|directIO|asynch;
  13. db_block_checking a na-anabata ụkpụrụ ndị a: OFF|LOW|MEDIUM|FULL;
  14. db_block_checksum a na-anabata ụkpụrụ ndị a: OFF|TYPICAL|FULL;

Onye nwere ahụmahụ na idobe ọdụ data Oracle nwere ike ikwu ihe na ụkpụrụ ndị a ga-edozi, site na paramita ndị a kapịrị ọnụ na ụkpụrụ ha anabatara, iji nweta nnukwu mmepụta nke nchekwa data maka ọrụ na data nke egosipụtara. koodu ngwa, ebe a n'elu.

Ma.

Isi ihe nke ọrụ ụlọ nyocha bụ igosi na njikarịcha algọridim n'onwe ya ga-akọwara anyị nke a ngwa ngwa.

Maka anyị, ihe niile fọdụrụ bụ ileba anya n'ime akwụkwọ ahụ, site na usoro nhazi, nke zuru ezu iji chọpụta ihe ndị a ga-agbanwe na ihe dị iche iche.
Na kwa: koodu koodu nke a ga-eji na-arụ ọrụ na omenala usoro nke ahọrọ kacha mma algọridim.

Yabụ, ugbu a maka koodu.
M kwuru n'elu banyere cran-r, ya bụ: a na-ahazi nhazi niile na sistemụ ahaziri n'ụdị edemede R.

Ọrụ ahụ n'ezie, nyocha, nhọrọ site na uru metric, sistemu steeti vectors: nke a bụ ngwugwu GA (akwụkwọ)
Ngwugwu, na nke a, adịghị mma nke ukwuu, n'echiche na ọ na-atụ anya na vectors (chromosomes, ma ọ bụrụ na n'ihe gbasara ngwugwu) ga-akọwapụta ya n'ụdị eriri nke nọmba na akụkụ akụkụ.

Na vector m, site na ụkpụrụ nke ntọala ntọala: ndị a bụ ọnụọgụ 14 - integers na ụkpụrụ eriri.

N'ezie, a na-ezere nsogbu ahụ n'ụzọ dị mfe site n'itinye ọnụọgụ ụfọdụ akọwapụtara na ụkpụrụ eriri.

Ya mere, n'ikpeazụ, isi mpempe akwụkwọ R dị ka nke a:

Kpọọ 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

Ebe a, site n'enyemaka lower и upper àgwà subroutine ga N'ezie, a na-akọwapụta mpaghara nke oghere ọchụchọ, n'ime nke a ga-eme nyocha maka ụdị vector (ma ọ bụ vectors) nke a ga-enweta uru kachasị nke ọrụ ahụ ike.

The ga subroutine na-eme nchọta na-ebuli ọrụ ahụ ike.

Ọfọn, mgbe ahụ, ọ na-apụta na, na nke a, ọ dị mkpa na ahụ ike ọrụ, ịghọta vector dị ka a set nke ụkpụrụ maka ụfọdụ parameters nke subd, na-enweta a metric si subd.

Nke ahụ bụ: ole, nwere ntọala subd nyere yana ibu enyere na subd: usoro azụmahịa subd kwa nkeji.

Ya bụ, mgbe ọ na-apụta, a ga-emerịrị ọtụtụ usoro ndị a n'ime ọrụ ahụike:

  1. Na-ahazi ntinye vector nke ọnụọgụ - ịtụgharị ya ka ọ bụrụ ụkpụrụ maka paramita subdata.
  2. Mgbalị ịmepụta ọnụọgụgụ enyerela otu redo nke nha enyere. Ọzọkwa, mbọ ahụ nwere ike ọ gaghị aga nke ọma.
    Otu magazin ndị dịbu adị na subd, n'ụdị ụfọdụ na nke ụfọdụ, maka ịdị ọcha nke nnwale - d.b. ehichapụ.
  3. Ọ bụrụ na isi ihe gara aga na-aga nke ọma: ịkọwapụta ụkpụrụ nke paramita nhazi na nchekwa data (ọzọ: enwere ike inwe ọdịda)
  4. Ọ bụrụ na nzọụkwụ gara aga na-aga nke ọma: ịkwụsị subd, malite subd ka ụkpụrụ paramita akọwapụtara ọhụrụ wee nwee mmetụta. (ọzọ: enwere ike inwe ntụpọ)
  5. Ọ bụrụ na nzọụkwụ gara aga na-aga nke ọma: mee ule ule. nweta metrik site na subd.
  6. Weghachite subd ahụ n'ọnọdụ izizi ya, i.e. hichapụ otu ndekọ ndekọ ọzọ, weghachi nhazi subdatabase mbụ ka ọ rụọ ọrụ.

Koodu ọrụ mgbatị ahụ

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

Nke ahụ. niile ọrụ: rụrụ na mma ọrụ.

Ga-subroutine na-arụ ọrụ vectors, ma ọ bụ, karịa, chromosomes.
N'ime ya, ihe kachasị anyị mkpa bụ nhọrọ nke chromosomes nwere mkpụrụ ndụ ihe nketa nke ọrụ ahụike na-arụpụta nnukwu uru.

Nke a, n'ezie, bụ usoro nke ịchọ nhazi chromosomes kacha mma site na iji vector na oghere ọchụchọ N-akụkụ.

O doro anya nke ukwuu, zuru ezu nkọwa, na ihe atụ nke R-koodu, ọrụ nke mkpụrụ ndụ ihe nketa algọridim.

Ọ ga-amasị m ịkọwa isi ihe teknụzụ abụọ iche iche.

Oku inyeaka sitere na ọrụ ahụ evaluate, dịka ọmụmaatụ, nkwụsị mmalite, ịtọba uru nke paramita subd, na-arụ ọrụ dabere na cran-r ọrụ system2

Site n'enyemaka nke: a na-akpọ ụfọdụ edemede bash ma ọ bụ iwu.

Dịka ọmụmaatụ:

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

Isi okwu nke abụọ bụ ahịrị, evaluate na-arụ ọrụ, na-echekwa otu uru metrik akọwapụtara yana vector na-emegharị ya na faịlụ ndekọ:

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

Nke a dị mkpa, n'ihi na site n'usoro data a, ọ ga-ekwe omume ịnweta ozi ndị ọzọ gbasara nke akụkụ nke vector na-emegharị ahụ nwere mmetụta dị ukwuu ma ọ bụ dị nta na uru metric.

Nke ahụ bụ: ọ ga-ekwe omume ịme nyocha njirimara-importamce.

Yabụ kedu ihe nwere ike ime?

N'ụdị eserese, ọ bụrụ na ị nye iwu maka ule n'usoro metric na-arịgo, foto a bụ nke a:

Usoro poke sayensị, ma ọ bụ otu esi ahọrọ nhazi nchekwa data site na iji akara benchmark na njikarịcha algọridim

Ụfọdụ data dabara na oke uru nke metric:
Usoro poke sayensị, ma ọ bụ otu esi ahọrọ nhazi nchekwa data site na iji akara benchmark na njikarịcha algọridim
N'ebe a, na nseta ihuenyo na nsonaazụ ya, m ga-akọwapụta: a na-enye ụkpụrụ nke vector n'iji ya gee ntị n'ihe gbasara koodu ọrụ ahụike, ọ bụghị n'usoro nke ndepụta nọmba nke paramita / oke nke ụkpụrụ paramita, nke edoziri. n'elu na ederede.

Ọfọn. Ọ bụ ọtụtụ ma ọ bụ ntakịrị, ~ 8 puku tps: ajụjụ dị iche.
N'ime usoro nke ọrụ ụlọ nyocha, ọnụ ọgụgụ a adịghị mkpa, ihe dị mkpa bụ ihe mgbagwoju anya, otú uru a si agbanwe.

Ọnọdụ ebe a dị mma.
O doro anya na opekata mpe otu ihe na-emetụta uru nke metric, ga-algorithm, na-ahazi site na vectors chromosome: kpuchie.
N'ịtụle n'ụzọ ziri ezi siri ike nke ụkpụrụ usoro mgbanaka, enwere opekata mpe otu ihe ọzọ nke, n'agbanyeghị na ọ pere mpe, nwere mmetụta.

Nke a bụ ebe ị chọrọ ya attribute-importance nyocha ịghọta ihe àgwà (nke ọma, na nke a, components nke n'iji ya gee ntị vector) na ole ha na-emetụta metric uru.
Na site na ozi a: ghọta ihe ndị na-emetụta mgbanwe dị ịrịba ama àgwà.

Gbuo attribute-importance kwere omume n'ụzọ dị iche iche.

Maka ebumnuche ndị a, algọridim na-amasị m randomForest ngwugwu R nke otu aha (akwụkwọ)
randomForest, Dị ka m na-aghọta ọrụ ya n'ozuzu na ụzọ ya iji nyochaa mkpa nke àgwà akpan akpan, na-ewuli a ụfọdụ nlereanya nke ndabere nke nzaghachi agbanwe agbanwe na àgwà.

N'ọnọdụ anyị, mgbanwe nzaghachi bụ metrik enwetara na nchekwa data na ule ibu: tps;
Na àgwà bụ akụkụ nke n'iji ya gee ntị vector.

Yabụ ebe a randomForest jiri ọnụọgụ abụọ na-enyocha mkpa njirimara ụdị ọ bụla dị: %IncMSE - ka ọnụnọ / enweghị nke àgwà a na ihe nlereanya si agbanwe àgwà MSE nke ihe nlereanya a (Mean Squared Error);

Na IncNodePurity bụ ọnụọgụ na-egosipụta nke ọma, dabere na ụkpụrụ nke njirimara a, enwere ike kewaa dataset nwere nleba anya, nke mere na n'otu akụkụ enwere data nwere otu uru nke metric na-akọwa, na nke ọzọ. uru ọzọ nke metric.
Ọfọn, nke ahụ bụ: ruo n'ókè ole ka nke a bụ àgwà nkewa (ahụrụ m nkọwa nke asụsụ Rọshịa doro anya na RandomForest. ebe a).

Koodu R-onye ọrụ na-arụ ọrụ maka ịhazi dataset yana nsonaazụ nnwale ibu:

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

Ị nwere ike iji aka gị họrọ hyperparameters nke algọridim ozugbo na, na-elekwasị anya n'ịdị mma nke ihe nlereanya ahụ, họrọ ụdị nke na-emezu amụma nke ọma na dataset nkwado.
Ị nwere ike dee ụfọdụ ụdị ọrụ maka ọrụ a (n'agbanyeghị, ọzọ, na-eji ụfọdụ ụdị njikarịcha algọridim).

Ị nwere ike iji ngwugwu R caret, ọ bụghị isi ihe dị mkpa.

N'ihi ya, na nke a, a na-enweta nsonaazụ na-esonụ iji chọpụta ogo nke mkpa àgwà ndị a:

Usoro poke sayensị, ma ọ bụ otu esi ahọrọ nhazi nchekwa data site na iji akara benchmark na njikarịcha algọridim

Ọfọn. Ya mere, anyị nwere ike ịmalite ntụgharị uche zuru ụwa ọnụ:

  1. Ọ tụgharịrị na ihe kachasị mkpa, n'okpuru ọnọdụ nnwale ndị a, bụ oke commit_wait
    Na teknụzụ, ọ na-akọwapụta usoro mmebe nke io ọrụ nke ide data redo site na subdb log buffer gaa na otu log ugbu a: synchronous ma ọ bụ asynchronous.
    uru nowait nke na-ebute ihe fọrọ nke nta ka ọ bụrụ vetikal, ọtụtụ mmụba na uru nke tps metric: nke a bụ ntinye nke ọnọdụ io asynchronous na redo dị iche iche.
    Ajụjụ dị iche bụ ma ị ga-eme nke a na nchekwa data nri. N'ebe a, m na-amachi onwe m naanị n'ikwu: nke a bụ ihe dị mkpa.
  2. Ọ bụ ihe ezi uche dị na ya na nha nke ihe nchekwa log nke subd: tụgharịrị bụrụ ihe dị mkpa.
    Ka ọ dị ntakịrị nha nke ihe nchekwa ndekọ, ka ikike nchekwa ya na-ebelata, ka ọ na-ejupụta na/ma ọ bụ enweghị ike ikenye mpaghara efu n'ime ya maka akụkụ nke data redox ọhụrụ.
    Nke a pụtara: igbu oge jikọtara ya na ikenye oghere na nchekwa ndekọ na/ma ọ bụ ịtụfu data redo site na ya n'ime otu redo.
    N'ezie, igbu oge ndị a kwesịrị ma na-emetụta ntinye nke nchekwa data maka azụmahịa.
  3. Ogologo db_block_checksum: nke ọma, kwa, n'ozuzu o doro anya - nhazi azụmahịa na-eduga na nhazi nke darty blocks na ebe nchekwa nchekwa subdatabase.
    Nke, mgbe ịlele checksums nke datablocks agbanyere, nchekwa data ga-edozi - gbakọọ checksums ndị a site na ahụ nke datablock, lelee ha na ihe e dere na datablock nkụnye eji isi mee: matches / adabaghị.
    Ọrụ dị otú ahụ, ọzọ, enweghị ike igbu oge nhazi data, ya mere, paramita na usoro na-edozi oke a ga-abụ ihe dị mkpa.
    Ọ bụ ya mere onye na-ere ahịa na-enye, na akwụkwọ maka paramita a, ụkpụrụ dị iche iche maka ya (parameter) ma kwuo na ee, a ga-enwe mmetụta, ma, nke ọma, ị nwere ike ịhọrọ ụkpụrụ dị iche iche, ruo "gbanyụọ" na mmetụta dị iche iche.

Ọfọn, nkwubi okwu zuru ụwa ọnụ.

Usoro, n'ozuzu, na-atụgharị na-arụ ọrụ nke ọma.

Ọ na-enye nnọọ ohere onwe ya, na mmalite nkebi nke ibu ule nke a ụfọdụ ọrụ usoro, iji họrọ ya (usoro) ezigbo nhazi maka ibu, ọ bụghị delve ukwuu n'ime kpọmkwem nke mwube usoro maka ibu.

Ma ọ dịghị ewepu ya kpamkpam - ọ dịkarịa ala na ọkwa nghọta: a ghaghị ịmara usoro ahụ banyere "ntụgharị mmezi" na ebe ndị a na-ekwe ka ntụgharị nke mkpịsị ndị a.

Usoro a nwere ike ịchọta ngwa ngwa nhazi usoro kacha mma.
Na dabere na nsonaazụ nke nnwale, ọ ga-ekwe omume ịnweta ozi gbasara ọdịdị nke mmekọrịta dị n'etiti metrik arụmọrụ sistemụ yana ụkpụrụ nke paramita ntọala sistemụ.

Kedu nke, n'ezie, kwesịrị inye aka na mpụta nke nghọta miri emi nke usoro a, ọrụ ya, ọ dịkarịa ala n'okpuru ibu e nyere.

Na omume, nke a bụ mgbanwe nke ụgwọ nke ịghọta usoro ahaziri maka ụgwọ nke ịkwadebe ule dị otú ahụ nke usoro ahụ.

Ọ ga-amasị m ịkọwapụta iche: na usoro a, ogo ogo nke nyocha usoro na ọnọdụ ọrụ nke ọ ga-enwe na ọrụ azụmahịa dị oke mkpa.

Daalụ maka nlebara anya na oge gị.

isi: www.habr.com

Tinye a comment