كيفية استخدام طرق المربعات الصغرى لتقييم الموارد ومراقبة قواعد بيانات أوراكل

في العمليات اليومية ، يحتاج مسؤولو قاعدة بيانات 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.

يمكن توسيع استخدام هذه الطريقة - على سبيل المثال ، لتقدير الوقت قبل نفاد المساحة في منطقة الاسترداد السريع ، في مساحات جدول قاعدة البيانات ومناطق أخرى.

Source: https://habr.com/ru/post/ar431112/


All Articles