15 أفضل نصائح ضبط أداء Oracle APEX للمطورين

Hot Habra مرحبا بالجميع!

يبلغ عمر شركتنا اليوم 28 عامًا ، وعلى شرف هذا الحدث الرائع ، قررنا مشاركة مواد جديدة معك.

نشكرك على مساعدتك في ترجمة مؤلفنا العادي يوري بونوماريفOBIEES الدعم.

مؤلفة المقال هي ميشيل سكورين ، المؤسس والشريك الإداري للشركة التي تقدم خدمة Reading Rewards. في عام 2009 ، عانت ميشيل من حقيقة أن أبنائها ، 8 و 9 سنوات ، يقرؤون القليل جدًا. لم تستطع الكتب ببساطة منافسة أجهزة الكمبيوتر وألعاب الفيديو ، لذلك قررت ميشيل وزوجها تطوير نظام يكسب فيه الأطفال وقتًا في ألعاب الكمبيوتر من خلال قراءة الكتب.

كمستشارة في تكنولوجيا المعلومات ومطور تطبيقات الويب ، طورت ميشيل برامج تتيح للأطفال تسجيل الوقت الذي يقرؤون فيه ويشاهدون التلفاز ، ويتتبع الآباء هذه المرة. كانت هذه بداية خدمة Rewards Rewards.

والآن ، في الواقع ، مقال.



لذلك ، اخترت تطبيق Oracle APEX المذهل لسرعة قياسية - لن تضطر إلى الكتابة كثيرًا. وكما يقول المثل القديم ، ما يجب أن يكون - لا يمكن تجنبه!

في عام 2010 ، أنشأت تطبيقًا لمحاولة جعل ابني الصغيرين يقرأن. أعترف ، في ذلك الوقت لم أكن أفكر في الأداء ، وكان لديها عدد قليل من نوع "تحديد عدد (*) من الجدول الضخم" المبعثر بشكل استراتيجي في جميع أنحاء التعليمات البرمجية.

مرحبًا ، لم يقرأ أولادي كثيرًا ، لذا كانت هذه الطاولات صغيرة جدًا في ذلك الوقت ...

دعنا نقول فقط أنني كنت ساذجًا جدًا عندما أطلقت التطبيق للجمهور ، ولم أتوقع تحميله آلاف المستخدمين يوميًا ، مما ينتج عنه 150.000 مشاهدة للصفحة يوميًا.


إحصائيات من جوجل تحليلات

بالإضافة إلى حقيقة أن كل هذا الاهتمام كان مثيرا للغاية بالنسبة لي ، لم أكن مستعدًا على الإطلاق للعديد من النقرات. كان لدي مشاكل في الأداء. عليك فقط الاعتراف بأنني أصبحت طالبًا متعطشًا لضبط أداء Oracle APEX وفكرت في أنني سأشارك فقط بعض الأشياء التي تعلمتها على مر السنين.

كيفية تحديد عنق الزجاجة؟


هناك العديد من الأشياء التي تريد الانتباه إليها عند تقييم أداء تطبيقك. ستحتاج إلى النظر في المشاكل المرتبطة به ، المتصفح. مشاكل في الشبكة. تكوين ORDS. تكوين قاعدة البيانات ، بما في ذلك الفهارس المحتملة المفقودة. هل توجد أي أقفال لقاعدة البيانات في اللعبة؟ التوقعات؟

بمجرد أن تشعر أن البنية التحتية الأساسية الخاصة بك في حالة جيدة وليست على خطأ ، فقد يكون الوقت قد حان لتحويل انتباهك إلى التطبيق نفسه ، مع مراعاة الواجهة الأمامية (جافا سكريبت و CSS) والواجهة الخلفية (SQL و PL / SQL).

1. الواجهة: مسائل ترتيب الملفات


بادئ ذي بدء ، إذا قمت بتضمين مكونات CSS و JS مخصصة ، تأكد من أن CSS الخاص بك في أعلى الصفحة وجافا سكريبت في الأسفل .

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

2. عرض مراقبة النشاط


هذا دائمًا مكان رائع للبدء. إذا كان كل شيء يبدو بطيئًا ولا تعرف إلى أين تبحث ، يمكن أن يوفر مراقب النشاط في بيئة تطوير APEX معلومات قيمة.


ارتباط

بمراقب النشاط من وحدة تحكم تطوير APEX يتم تسجيل كل مشاهدة صفحة في مساحة العمل والتطبيقات ، بما في ذلك معلومات حول المستخدم وطابع التاريخ / الوقت والتطبيق و page_id والأهم من ذلك الوقت الذي كان فيه التطبيق قيد التشغيل.

تقرير مشاهدة الصفحة المفضل لدي هو "حسب أداء الصفحة المرجحة".




اعرض المثال من مراقب نشاط APEX

انتبه جيدًا إلى أي صفحات بها عدد كبير من أحداث الصفحة (بمعنى أنها تتم زيارتها بشكل متكرر) ، والقيمة العالية لمتوسط ​​وقت تشغيل التطبيق. يبدو أنني أتذكر كيف قال جويل كالمان ذات مرة أنه يجب مراجعة كل ما يزيد عن 0.5 ثانية. بالطبع ، يعد هذا تعميمًا إلى حد ما وقد لا (يتعلق) بحالتك المحددة لاستخدام APEX.

يسهّل مراقب النشاط العمل مع الأشعة تحت الحمراء ، ولكن إذا كنت بحاجة إلى مزيد من التفاصيل وترغب في تشغيل التقارير في مساحات عمل مختلفة ، فيمكنك استخدام الاستعلام التالي في SQL Developer لجعله مفصلاً قدر الإمكان:

select workspace
      , application_name 
      , application_id, page_id
      , count(*) total_page_events
      , avg(elapsed_time) avg_elapsed_time
      , sum(elapsed_time) elapsed_time
from apex_workspace_activity_log
where view_date between to_date('201911190900','RRRRMMDDHH24MISS') and to_date('201911191200','RRRRMMDDHH24MISS')
group by workspace, application_name, application_id, page_id
order by 6, 7 asc 

3. # التوقيت # متغير البحث


لذلك ربما تكون قد وجدت صفحة بطيئة. وماذا الان؟

حسنًا ، يمكنك استخدام متغير البحث # TIMING # في تذييل مناطق التقرير إذا كنت ترغب في استرداد الوقت المنقضي وعرضه. يمكن أن يساعدك ذلك في تحديد أبطأ مناطق التقرير على الصفحة التي يمكنك توجيه انتباهك إليها. هذا مفيد بشكل خاص على صفحات لوحة القيادة حيث يمكنك الحصول على الكثير من العمل.


استخدام سطر الاستبدال # TIMING # في تذييل

التقرير سيؤدي تشغيل التقرير عندئذٍ إلى النتيجة:



شيء واحد يعجبني في هذه الوظيفة ليس بالضرورة أنه يحدد المناطق التي تستغرق وقتًا طويلاً لتشغيلها (يمكنني الحصول على هذا من تصحيح النوافذ ، انظر أدناه) ، ولكنها تقدم معلومات للمستخدمين النهائيين.

غالبًا ما أجد أنهم سيطلبون البيانات التي أعرف أنها ستكون مرئية للأعمار. على الأقل ، يمنحهم ذلك فكرة عما يمكن أن يحدث ولماذا كان عليهم الانتظار لفترة أطول قليلاً لصفحتهم عما كان متوقعًا.

4. قم بتشغيل الصفحة في وضع التصحيح


والأفضل من ذلك ، قم بتشغيله في Debug LEVEL9 للوصول إلى خطة التنفيذ لتقريرك.


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

5. احذر من استدعاء v (")


إذا وجدت تقريرًا ضعيف الأداء ، يمكنك التحقق مما إذا كنت تستخدم علامة v (") عندما يمكنك استخدام متغير الربط.

select task_name
from tasks
where assigned_to=:APP_USER

أو

select task_name
from tasks
where assigned_to=v('APP_USER')

في جدول كبير ، يمكن أن يكون الفرق بين العبارتين ضخمًا ، لأن v (") هو في الواقع استدعاء دالة. هذا يعني أنك لن تستفيد من أي فهارس وسيؤدي الاستعلام إلى مسح جدول كامل.

نصيحة: إذا كنت بحاجة إلى الرجوع إلى حالة جلسة APEX في طريقة عرض (حيث لا يمكنك استخدام متغيرات الربط) ، ففكر في استخدام استعلام فرعي عددي يمكن أن يعمل تقريبًا مثل متغير الربط. نرى:

select task_name
from tasks
where assigned_to = (select v('APP_USER') from dual)

شكرًا لجون سكوت على تقديم هذا في أحد الأحداث التي حضرتها.

6. تجنب استبدال السلاسل في الاستعلامات ، إن أمكن


احذر من سلاسل البحث في الاستعلامات.

ضع في اعتبارك ، على سبيل المثال ، حالة قد تحتاج فيها إلى فك تشفير أو بيان حالة في استعلام لتحديد الصفحة التي تريد التفرع إليها:

select case when dept_no=20 then
          'f?p=&APP_ID.:3:&SESSION.::::P3_DEPTNO:'||deptno
       else
          'f?p=&APP_ID.:2:&SESSION.::::P2_DEPTNO:'||deptno
       end as link
       , deptno
       , dname
from dept

استخدام متغير الربط: SESSION ، وليس سلسلة البحث & SESSION. يمكن أن تحدث فرقًا كبيرًا وتوفر Oracle الكثير من وقت التحليل. يسمح الإصدار المتغير ربط Oracle لإعادة استخدام الاستعلام.

select case when dept_no=20 then
          'f?p=&APP_ID.:3:'|| :SESSION ||'::::P3_DEPTNO:'||deptno
       else
          'f?p=&APP_ID.:2:'|| :SESSION ||'::::P2_DEPTNO:'||deptno
       end as link
       , deptno
       , dname
from dept

إذا كنت مهتمًا بمعرفة المزيد حول هذا ، فراجع مقطع الفيديو الرائع لـ Jorge Rimblas عن سلاسل أحرف البدل ومتغيرات الربط وروابط APEX.

7. استخدم المعلمات التعريفية في ظروفك عندما يكون ذلك ممكنًا


عند استخدام الشروط على مكونات الصفحة ، استخدم دائمًا المعلمات التعريفية كلما أمكن ذلك. سيكونون أكثر فعالية.


8. استخدم إعدادات ترقيم الصفحات بعقلانية


في التقارير الكبيرة ، يمكن أن يكون لخيارات ترقيم الصفحات المحددة تأثير كبير. على الرغم من حقيقة أنه منذ الإصدار 18.1 ، قام APEX بتحسين معالجة ترقيم الصفحات بشكل ملحوظ (اقرأ هذا المنشور الرائع من Karsten Charsky) ، يمكنك تعطيل المعلمة "مجموعة من الخطوط من X إلى Y من Z" في أحدها إذا كان لديك مشاكل في الأداء في تقرير كبير للغاية.


9. تجنب HTML في الاستعلامات واستخدم تعبير HTML


عند الإمكان ، استخدم سمة تعبير HTML لأعمدة التقرير لتضمين أي سمات HTML / CSS قد تحتاج إليها.

10.


وبالتالي ، فقد حددت منطقة تقرير بطيئة حقًا قمت بتكوينها بأفضل طريقة ممكنة.

هل أحتاج إلى تحديث البيانات في كل مرة أشاهد فيها الصفحة؟ فكّر في تقارير لوحة البيانات ، وخاصة بيانات المبيعات ، وما إلى ذلك. حتى بيانات المعاملات التي تم تلقيها قبل دقيقة واحدة يمكن أن تكون كاملة تمامًا في كثير من الحالات.

إذا كان الأمر كذلك ، يمكنك استخدام خيار التخزين المؤقت للمنطقة.



إعدادات ذاكرة التخزين المؤقت للخادم في مناطق APEX.

افتراضيًا ، يتم تعطيل التخزين المؤقت ، ولكن إذا قمت بتمكينه ، يمكنك تحديد خيار مهلة ذاكرة التخزين المؤقت ، بدءًا من 10 ثوانٍ فقط. حتى 10 ثوانٍ ستساعد في أداء لوحة العدادات ، والتي يستخدمها عدد كبير من المستخدمين! ومن الواضح أن زيادة هذه المعلمة ستساعد أكثر.

تنبيه ، إذا كانت لديك بيانات حساسة تعتمد على المستخدم ، يمكنك تحديد خيارات "ذاكرة التخزين المؤقت حسب المستخدم" أو حتى "ذاكرة التخزين المؤقت حسب الجلسة".


الإعدادات المتاحة عند تمكين التخزين المؤقت الإقليمي

إذا قررت تمكين التخزين المؤقت ، يمكنك إبلاغ المستخدمين بأحدث تحديث للبيانات. إذا كان الأمر كذلك ، يمكنك استخدام دالة APEX_UTIL.CACHE_GET_DATE_OF_REGION_CACHE .

11. نقل PL / SQL إلى الحزم


تأكد من نقل الرمز إلى الحزم. يتم تجميعها بالفعل في قاعدة البيانات ، مما يعني أنه سيكون هناك نفقات أقل للتحليل الديناميكي.

يجب أن تكون عمليات صفحتك مجرد حزم مكالمات كلما أمكن ذلك.

كتب ستيفن فيورستين مقالة مفصلة للغاية حول كتابة PL / SQL لـ Oracle Application Express ، والتي قد ترغب في قراءتها. عمرها بالفعل عدة سنوات ، لكنها لا تزال ذات صلة!

12. إطلاق المستشار!


نادرًا ما أرى أشخاصًا يستخدمون هذه الميزة الرائعة ، ولكن هذا شيء يجب علينا جميعًا القيام به بانتظام. في كل مرة أتساءل ماذا يجد.


13. استخدم خيارات البناء لتعطيل وتمكين المكونات


حسنًا ، لقد حاولت كل هذه الأشياء ، ولكن لا تزال عالقًا في ذلك. إذا كنت تنوي "إعادة رسم صفحتك مرة أخرى" ، فيجب أن تفكر في استخدام خيارات الإنشاء لمختلف مكونات صفحتك.

لا تضع شروطًا غير محددة على المكونات ، وإلا ستفقد جميع شروطك الثمينة! بالإضافة إلى ذلك ، تتمتع المكونات الدائمة بميزة غير سارة للعيش في تطبيقاتك إلى الأبد ...

قم بإنشاء معلمة بناء جديدة باستخدام الحالة: استبعاد.

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

14. فهم كيف يمكن أن تؤثر إعدادات IR المختلفة على أداء APEX.


من خلال تقرير تفاعلي ضعيف التنفيذ ، يمكن أن تؤدي الإعدادات أو المعلمات أو الفلاتر المختلفة التي يطبقها المستخدمون إلى تفاقم العمل السيئ (نعم ، إنها كذلك حقًا).

كما ذكرنا سابقًا ، من الأفضل البدء باستخدام وضع تصحيح أخطاء LEVEL9 وتهيئة استعلام حقيقي منفصل. قم بفحص خطة التنفيذ ، وفحص الفهارس ، وقم بضبطها حيثما أمكن. تذكر أن كل عرض (جدول ، تجميع ، مخطط ، ملخص) هو استعلام منفصل قد يتطلب التخصيص. ثم يتغير مرة أخرى عند استخدام عامل تصفية البحث أو عامل تصفية رؤوس الأعمدة!

يتم تشغيل إعداد MaxRowCount أيضًا ، ويجب أن تحاول جعله صغيرًا قدر الإمكان. لا توجد إجابة صحيحة لذلك ، وقد تضطر إلى اللعب بأرقام مختلفة قبل أن تحصل على شيء يناسب المستخدمين لديك.

بشكل أساسي ، خذ بعين الاعتبار حذف أو تغيير بعض سيناريوهات السلوك الافتراضية. يمتلك المطورون العديد من عناصر التحكم عندما يتعلق الأمر بالميزات التي تم تمكينها للمستخدمين. يجدر تجربة الإعدادات المختلفة ، ولا تنس استشارة المستخدمين للتأكد من أنك تفهم تمامًا متطلباتهم.

أخيرًا ، إذا وجدت أن IR الخاص بك لا يزال بطيئًا جدًا ، يمكنك التفكير في بديلين:

  1. وظائف جدول خطوط الأنابيب (حدد * من الجدول (my_rpt_pipelined)) -> يمكنها العمل بشكل أفضل في الاستعلامات المعقدة.
  2. إنشاء تقرير مجموعة (APEX_COLLECTION)

بفضل Karen Cannell للحصول على نصائح IR المفيدة للغاية.

15. تتبع


عندما يفشل كل شيء آخر ، يمكنك إضافة "& p_trace = YES" إلى نهاية عنوان URL الخاص بك لإنشاء ملف تتبع يمكنك تحليله باستخدام الأداة المساعدة TKPROF.

يمكن العثور على مزيد من المعلومات حول تتبع SQL هنا .

لا يزال عالقا؟ أنا مندهش دائمًا من استجابة مجتمع Oracle APEX . قدم يد المساعدة ، اطلب المساعدة في مختلف المنتديات أو على تويتر ، بالتأكيد سوف يوجهك شخص ما في الاتجاه الصحيح. لقد تلقيت ردود لا تحصى على مكالمات المساعدة. ستجد الجواب! فقط تذكر: هذا ليس APEX ، في أغلب الأحيان أنت ، أنت نفسك :-)

All Articles