Dalam operasi sehari-hari, administrator database Oracle perlu melacak sejumlah besar metrik dalam hal throughput, memuat, pertumbuhan DBMS, host DBMS, subsistem disk, dll. Semua data ini dikumpulkan dan disimpan dengan cermat oleh sistem pemantauan. Agar informasi tersebut tidak berbobot mati, dapat digunakan untuk peramalan dalam hal masalah ukuran dan bahkan pemantauan proaktif. Dalam posting ini kami akan menunjukkan cara melakukannya.

Ambil Oracle Cloud Control. Dalam skema SYSMAN dalam tampilan
MGMT_METRICS_1DAY
, kami menyimpan nilai metrik βRuang
TARGET_GUID = '6B1E3AFA92B3EA29AD73BB87432C084C'
Tersedia (MB)β untuk host dengan
TARGET_GUID = '6B1E3AFA92B3EA29AD73BB87432C084C'
.
SELECT TO_CHAR (CAST (ROLLUP_TIMESTAMP AS DATE), 'YYYY-MM-DD"T"HH24:MI:SS'), ROUND (VALUE_AVERAGE, 2) AVG_FREE_SPACE_INM FROM SYSMAN.MGMT_METRICS_1DAY WHERE TARGET_GUID = '6B1E3AFA92B3EA29AD73BB87432C084C' AND METRIC_GUID = HEXTORAW ('E8838C71E687BF0A9E02FFACC0C9AC80') AND KEY_VALUE = '/u10' ORDER BY ROLLUP_TIMESTAMP;
Grafik di bawah ini menunjukkan bahwa selama tiga bulan, dari 14 Agustus 2018 hingga 15 November 2018, ruang kosong di sistem file / u01 menurun 1,5TB - dari 4,1 TB menjadi 2,6 TB

Untuk menentukan waktu yang tersisa untuk 2,6 TB sudah cukup bagi kami, kami beralih ke fungsi regresi linier.
Oracle menggunakan fungsi
REGR_SLOPE(x,y)
untuk menghitung kemiringan garis regresi. Fungsi kemiringan garis regresi REGR_SLOPE ditentukan oleh rasio kovarians dari himpunan x dan y terhadap varians himpunan y:
REGR_SLOPE(x,y) = COVAR_POP(x,y) / VAR_POP(y)
Untuk menghitung penangkapan sumbu Y, gunakan fungsi
REGR_INTERCEPT(x,y)
. Fungsi intersepsi Y-axis
REGR_INTERCEPT
ditentukan oleh perbedaan antara nilai rata-rata himpunan x dan produk dari kemiringan garis regresi dan nilai rata-rata himpunan y:
REGR_INTERCEPT(x,y) = AVG(x) β REGR_SLOPE(x, y) * AVG(y)
Untuk menghitung R-square atau koefisien determinasi, fungsi REGR_R2 (x, y) digunakan, yang tidak didefinisikan pada varians nol y, dan sama dengan kesatuan pada dispersi nol x dan varians nol bukan y. Dan dalam kasus varian positif x dan varian non-nol dari y sama dengan kuadrat korelasi x dan y:
NULL if VAR_POP(y) = 0 1 if VAR_POP(x) = 0 and VAR_POP(y) != 0 POWER(CORR(expr1,expr),2) if VAR_POP(x) > 0 and VAR_POP(y) != 0
Kami akan menggambarkan koefisien determinasi sebagai kuantitas yang mencirikan persentase variasi yang dijelaskan oleh model. Jika koefisien determinasi adalah 1, maka model kami menjelaskan 100% variasi dan perkiraan kami akan seakurat mungkin.
Kami mengusulkan untuk mengambil selisih x saat metrik diterima dan waktu saat ini - ROLLUP_TIMESTAMP-SYSDATE. Seperti yang kita ambil nilai rata-rata ruang disk yang tersisa bebas / u01 di MB - "Filesystem Space Available (MB)". Dalam hal ini, menggunakan fungsi REGR_INTERCEPT (ROLLUP_TIMESTAMP-SYSDATE, VALUE_AVERAGE) sebagai fungsi grup, kita dapat memperkirakan berapa hari ruang disk / u01 akan habis.
Dalam bentuk diperluas, nilai fungsi kemiringan garis regresi, intersepsi sumbu dan koefisien determinasi diperoleh dengan kueri
SELECT COVAR_POP (ROLLUP_TIMESTAMP - SYSDATE, NULLIF (ROUND (VALUE_AVERAGE, 2), 0)) / VAR_POP (NULLIF (ROUND (VALUE_AVERAGE, 2), 0)) REGR_SLOPE, AVG (ROLLUP_TIMESTAMP)- (COVAR_POP (SYSDATE - ROLLUP_TIMESTAMP, NULLIF (ROUND (VALUE_AVERAGE, 2), 0))/VAR_POP(NULLIF(ROUND(VALUE_AVERAGE, 2), 0)))*AVG (NULLIF (ROUND(VALUE_AVERAGE, 2), 0)) REGR_INTERCEPT, AVG (SYSDATE - ROLLUP_TIMESTAMP)-(COVAR_POP(SYSDATE - ROLLUP_TIMESTAMP,NULLIF(ROUND(VALUE_AVERAGE,2),0))/VAR_POP(NULLIF(ROUND(VALUE_AVERAGE,2),0)))*AVG(NULLIF(ROUND(VALUE_AVERAGE,2),0))) REGR_INTERCEPT_ABS, CASE WHEN VAR_POP (NULLIF (ROUND (VALUE_AVERAGE, 2), 0)) = 0 THEN NULL WHEN VAR_POP (SYSDATE - ROLLUP_TIMESTAMP) = 0 AND VAR_POP (NULLIF (ROUND (VALUE_AVERAGE, 2), 0)) != 0 THEN 1 WHEN VAR_POP (SYSDATE - ROLLUP_TIMESTAMP) > 0 AND VAR_POP (NULLIF (ROUND (VALUE_AVERAGE, 2), 0)) != 0 THEN POWER (CORR (SYSDATE - ROLLUP_TIMESTAMP, NULLIF (ROUND (VALUE_AVERAGE, 2), 0)),2) END REGR_R2 FROM MGMT_METRICS_1DAY WHERE TARGET_GUID = '6B1E3AFA92B3EA29AD73BB87432C084C' AND METRIC_GUID = HEXTORAW ('E8838C71E687BF0A9E02FFACC0C9AC80') AND KEY_VALUE = '/u10' ORDER BY ROLLUP_TIMESTAMP;
Atau sudah menggunakan fungsi
REGR_SLOPE
,
REGR_INTERCEPT
dan
REGR_R2
:
SELECT REGR_SLOPE(SYSDATE-ROLLUP_TIMESTAMP, NULLIF(ROUND(VALUE_AVERAGE,2),0)) RSLP, REGR_INTERCEPT(SYSDATE-ROLLUP_TIMESTAMP, NULLIF(ROUND(VALUE_AVERAGE,2),0)) RINSP, REGR_R2(SYSDATE-ROLLUP_TIMESTAMP, NULLIF(ROUND(VALUE_AVERAGE,2),0)) RSQR FROM MGMT_METRICS_1DAY WHERE TARGET_GUID='6B1E3AFA92B3EA29AD73BB87432C084C' AND METRIC_GUID=HEXTORAW('E8838C71E687BF0A9E02FFACC0C9AC80') AND KEY_VALUE='/u10' ORDER BY ROLLUP_TIMESTAMP;
REGR_SLOPE = -0.00005 REGR_INTERCEPT = 149.46 REGR_R2 = 0.97
Dalam kasus kami, koefisien determinasi mendekati 1, dan kami melihat bahwa setelah sekitar 149 hari tempat pada sistem file / u10 akan berakhir.
Kita dapat menggunakan metode ini untuk memperkirakan waktu di mana kita memiliki ruang disk yang cukup untuk host dari database produktif. Dalam kasus kami, host dari database produktif dimasukkan dalam grup dengan
METRIC_GUID='E8838C71E687BF0A9E02FFACC0C9AC80'
.
Kami membuat
User Definded Type T_TYPE
dengan bidang yang kami butuhkan untuk output: nama host, nama sistem file, kemiringan garis regresi, jumlah hari setelah ruang ruang pada sistem file berakhir dan koefisien determinasi.
CREATE OR REPLACE TYPE T_TYPE AS OBJECT(TARGET_NAME VARCHAR2(256), KEY_VALUE VARCHAR2(256), RSLP NUMBER,RINSP NUMBER,RSQR NUMBER);
Buat Tabel Bersarang Jenis R_TYPE berdasarkan T_TYPE:
CREATE OR REPLACE TYPE R_TYPE AS TABLE OF T_TYPE;
Kami membuat paket yang menyertakan fungsi
GET_VALUES
untuk mengekstraksi data dari
MGMT_METRICS_1DAY
dan prosedur untuk mengirim data yang diterima melalui surat
SEND_VALUES
.
CREATE OR REPLACE PACKAGE EST_FS_EXHAUST IS
Untuk fungsi
GET_VALUES
parameter input akan menjadi variabel
V_GN
dengan nama grup host dan nilai koefisien determinasi
V_RSQ
.
FUNCTION GET_VALUES(V_GN VARCHAR2, V_RSQ NUMBER) RETURN R_TYPE;
Untuk prosedur
SEND_VALUES
parameter input akan menjadi variabel
V_GN
dan
V_RSQ
, mirip dengan variabel fungsi
GET_VALUES
, ditambah email yang akan kami kirimi mini-report kami.
PROCEDURE SEND_VALUES(V_GN VARCHAR2, V_RSQ NUMBER, V_MAIL VARCHAR2); END EST_FS_EXHAUST;
Dalam tubuh paket, kami mendefinisikan fungsi
GET_VALUES
dan prosedur
SEND_VALUES
CREATE OR REPLACE PACKAGE BODY EST_FS_EXHAUST IS FUNCTION GET_VALUES(V_GN VARCHAR2, V_RSQ NUMBER) RETURN R_TYPE AS V_REC R_TYPE; BEGIN SELECT T_TYPE( M.TARGET_NAME, D.KEY_VALUE, ROUND(REGR_SLOPE(D.ROLLUP_TIMESTAMP-SYSDATE, NULLIF(ROUND(D.VALUE_AVERAGE,2),0)),0), ROUND((ABS(REGR_INTERCEPT(D.ROLLUP_TIMESTAMP-SYSDATE, NULLIF(ROUND(D.VALUE_AVERAGE,2),0)))),0), ROUND(REGR_R2(D.ROLLUP_TIMESTAMP-SYSDATE, NULLIF(ROUND(D.VALUE_AVERAGE,2),0)),0)) BULK COLLECT INTO V_REC FROM MGMT_METRICS_1DAY D, MGMT_TARGETS M, MGMT_TARGET_MEMBERSHIPS G WHERE M.TARGET_GUID=G.MEMBER_TARGET_GUID AND M.TARGET_GUID=D.TARGET_GUID AND G.COMPOSITE_TARGET_NAME=V_GN AND METRIC_GUID=HEXTORAW('E8838C71E687BF0A9E02FFACC0C9AC80') GROUP BY M.TARGET_NAME, D.KEY_VALUE HAVING REGR_R2(D.ROLLUP_TIMESTAMP-SYSDATE, NULLIF(ROUND(D.VALUE_AVERAGE,2),0)) > V_RSQ ; RETURN V_REC; END GET_VALUES; PROCEDURE SEND_VALUES(V_GN VARCHAR2, V_RSQ NUMBER, V_MAIL VARCHAR2) IS V_REC R_TYPE; MSG VARCHAR2(2048):=''; BEGIN V_REC:= GET_VALUES(V_GN,V_RSQ); FOR I IN V_REC.FIRST..V_REC.LAST LOOP MSG:=CHR(10)||MSG||' Host '||V_REC(I).TARGET_NAME||' filesystem '||V_REC(I).KEY_VALUE||' will be exhausted in '||V_REC(I).RINSP||' days'|| CHR(9)||CHR(10); END LOOP; EXECUTE IMMEDIATE 'ALTER SESSION SET smtp_out_server = ''mail_server'''; UTL_MAIL.SEND(SENDER => 'monitoring@yourmail.com', RECIPIENTS => V_MAIL, SUBJECT => 'Test Mail', MESSAGE => MSG, MIME_TYPE => 'text; charset=us-ascii'); END; END EST_FS_EXHAUST; /
Misalkan kita ingin mendapatkan waktu setelah itu tempat di sistem file 'host_hosts' grup produktif berakhir dengan koefisien determinasi lebih besar dari 0,5:
begin EST_FS_EXHAUST.SEND_VALUES('prod_hosts',0.5,'operator@yourdomain.com'); end; / PL/SQL procedure successfully completed.
Akibatnya, sebuah pesan tiba di surat:
Host filesystem1 / u51 akan habis dalam 342 hari
Sistem file host2 host / u40 akan habis dalam 236 hari
Host filesystem3 / u20 / redo01 akan habis dalam 1100310 hariSistem file host host4 / u10 akan habis dalam 150 hari
Host filesystem4 host / u01 / integrasi akan habis dalam 75080 hari
Host filesystem4 host / u01 / app akan habis dalam 135 hari
Host filesystem5 host / u30 / redo01 akan habis dalam 62252596 hariHost filesystem6 / u01 akan habis dalam 260 hari
Sistem file host host7 / u99 akan habis dalam 1038 hari
Perhatikan sistem file / u20 / redo01 dan / u30 / redo01 - ini adalah REDO LOGS dan tempatnya tidak sia-sia. Model kami memperkirakan bahwa tempat di / u20 / redo01 pada host3 akan berakhir dalam 2990 tahun, dan di / u30 / redo01 pada host5 dalam 169164 tahun. Dalam kedua kasus, kemiringan garis regresi kurang dari -1.
Penggunaan metode ini dapat diperluas - misalnya, untuk memperkirakan waktu sebelum kehabisan ruang di FAST RECOVERY AREA, dalam ruang tabel database dan area lainnya.