في العمليات اليومية ، يحتاج مسؤولو قاعدة بيانات Oracle إلى تتبع عدد كبير من المقاييس من حيث الإنتاجية والتحميل ونمو DBMS ومضيفات DBMS والأنظمة الفرعية للقرص وما إلى ذلك. يتم جمع كل هذه البيانات وتخزينها بعناية بواسطة أنظمة المراقبة. حتى لا تكون المعلومات ثقيلة الوزن ، يمكن استخدامها للتنبؤ فيما يتعلق بقضايا التحجيم وحتى المراقبة الاستباقية. في هذا المنشور ، سنوضح كيفية القيام بذلك.

استخدم Oracle Cloud Control. في مخطط SYSMAN في
MGMT_METRICS_1DAY
، نقوم بتخزين قيمة مقياس "مساحة نظام الملفات المتاحة (MB)" لمضيف مع
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;
يوضح الرسم البياني أدناه أنه لمدة ثلاثة أشهر ، من 14 أغسطس 2018 إلى 15 نوفمبر 2018 ، انخفضت المساحة الحرة في نظام الملفات / u01 بمقدار 1.5 تيرابايت - من 4.1 تيرابايت إلى 2.6 تيرابايت

لتحديد الوقت الذي تكفي بالنسبة لنا 2.6 تيرابايت المتبقية ، ننتقل إلى وظائف الانحدار الخطي.
تستخدم Oracle
REGR_SLOPE(x,y)
لحساب منحدر خط الانحدار. يتم تحديد دالة الانحدار لخط الانحدار REGR_SLOPE من خلال نسبة التغاير للمجموعات x و y إلى تباين المجموعة y:
REGR_SLOPE(x,y) = COVAR_POP(x,y) / VAR_POP(y)
لحساب التقاط المحور ص ، استخدم الدالة
REGR_INTERCEPT(x,y)
. يتم تحديد دالة اعتراض المحور Y
REGR_INTERCEPT
خلال الفرق بين متوسط قيمة المجموعة x والمنتج المنحدر لخط الانحدار ومتوسط قيمة المجموعة y:
REGR_INTERCEPT(x,y) = AVG(x) – REGR_SLOPE(x, y) * AVG(y)
لحساب R-square أو معامل التحديد ، يتم استخدام الوظيفة REGR_R2 (x، y) ، التي لم يتم تعريفها للتغير الصفري y وتساوي الوحدة للتشتت الصفري x والتغير غير الصفري y. وفي حالة التباين الإيجابي لـ x والاختلاف غير الصفري لـ y يساوي مربع ارتباط x و 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
سنصف معامل التحديد على أنه كمية تميز النسبة المئوية للتغيرات الموصوفة بالنموذج. إذا كان معامل التحديد هو 1 ، فإن نموذجنا يصف 100٪ من الاختلافات وستكون توقعاتنا دقيقة قدر الإمكان.
نقترح أخذ × فرق الوقت الذي يتم فيه تلقي المقياس والوقت الحالي - ROLLUP_TIMESTAMP-SYSDATE. نظرًا لأننا نأخذ متوسط قيمة المساحة الفارغة المتبقية على القرص / u01 بالميغابايت - "مساحة نظام الملفات المتاحة (MB)". في هذه الحالة ، باستخدام دالة REGR_INTERCEPT (ROLLUP_TIMESTAMP-SYSDATE ، VALUE_AVERAGE) كدالة جماعية ، يمكننا تقدير عدد الأيام التي ستنفد فيها مساحة القرص / u01.
في الشكل الموسع ، يتم الحصول على قيمة دالة منحدر خط الانحدار ، واعتراض المحور ، ومعامل التحديد بواسطة الاستعلام:
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;
أو باستخدام الوظائف
REGR_SLOPE
و
REGR_INTERCEPT
و
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
في حالتنا ، يقترب معامل التحديد من 1 ، ونرى أنه بعد حوالي 149 يومًا سينتهي المكان على نظام الملفات / u10.
يمكننا استخدام هذه الطريقة لتقدير الوقت الذي لدينا فيه مساحة قرص متوفرة كافية لمضيفات قواعد البيانات المنتجة. في حالتنا ، يتم تضمين مضيفي قواعد البيانات المنتجة في المجموعة مع
METRIC_GUID='E8838C71E687BF0A9E02FFACC0C9AC80'
.
نقوم بإنشاء
User Definded Type T_TYPE
مع الحقول التي نحتاجها للإخراج: اسم المضيف واسم نظام الملفات ومنحدر خط الانحدار وعدد الأيام التي تنتهي بعدها المساحة في نظام الملفات ومعامل التحديد.
CREATE OR REPLACE TYPE T_TYPE AS OBJECT(TARGET_NAME VARCHAR2(256), KEY_VALUE VARCHAR2(256), RSLP NUMBER,RINSP NUMBER,RSQR NUMBER);
قم بإنشاء نوع جدول متداخل R_TYPE بناءً على T_TYPE:
CREATE OR REPLACE TYPE R_TYPE AS TABLE OF T_TYPE;
نقوم بإنشاء حزمة تتضمن وظيفة
GET_VALUES
لاستخراج البيانات من
MGMT_METRICS_1DAY
وإجراء إرسال البيانات المستلمة عن طريق البريد
SEND_VALUES
.
CREATE OR REPLACE PACKAGE EST_FS_EXHAUST IS
بالنسبة للدالة
GET_VALUES
ستكون معلمات الإدخال هي المتغير
V_GN
باسم مجموعة المضيف وقيمة معامل التحديد
V_RSQ
.
FUNCTION GET_VALUES(V_GN VARCHAR2, V_RSQ NUMBER) RETURN R_TYPE;
بالنسبة للإجراء
SEND_VALUES
ستكون معلمات الإدخال هي المتغير
V_GN
و
V_RSQ
، على غرار متغيرات دالة
GET_VALUES
، بالإضافة إلى البريد الإلكتروني الذي نخطط لإرسال تقريرنا المصغر إليه.
PROCEDURE SEND_VALUES(V_GN VARCHAR2, V_RSQ NUMBER, V_MAIL VARCHAR2); END EST_FS_EXHAUST;
في نص الحزمة ، نحدد دالة
SEND_VALUES
وإجراء
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; /
لنفترض أننا نريد الحصول على الوقت الذي تنتهي بعده صلاحية المكان في أنظمة الملفات الخاصة بالمجموعة المضيفة المنتجة "prod_hosts" بمعامل تحديد أكبر من 0.5:
begin EST_FS_EXHAUST.SEND_VALUES('prod_hosts',0.5,'operator@yourdomain.com'); end; / PL/SQL procedure successfully completed.
نتيجة لذلك ، تصل رسالة في البريد:
سيتم استنفاد نظام ملفات host host1 / u51 في غضون 342 يومًا
سيتم استنفاد نظام host2 filesystem / u40 خلال 236 يومًا
سيتم استنفاد host3 filesystem / u20 / redo01 في 1100310 يومًاسيتم استنفاد نظام host host files / u10 خلال 150 يومًا
سيتم استنفاد المضيف host4 filesystem / u01 / تكامل في 75080 يومًا
سيتم استنفاد host host files files / u01 / app في 135 يومًا
سيتم استنفاد host host5 filesystem / u30 / redo01 في 62252596 يومًاسيتم استنفاد host host files files / u01 في 260 يومًا
سيتم استنفاد نظام host host files / u99 خلال 1038 يومًا
انتبه إلى أنظمة الملفات / u20 / redo01 و / u30 / redo01 - إليك REDO LOGS والمكان لا يضيع. توقع نموذجنا أن المكان في / u20 / redo01 على host3 سينتهي في 2990 عامًا ، وفي / u30 / redo01 على host5 في 169164 سنة. في كلتا الحالتين ، يكون ميل خط الانحدار أقل من -1.
يمكن توسيع استخدام هذه الطريقة - على سبيل المثال ، لتقدير الوقت قبل نفاد المساحة في منطقة الاسترداد السريع ، في مساحات جدول قاعدة البيانات ومناطق أخرى.