سؤال

هل هناك أي طرق جيدة لقياس موضوعي استعلام الأداء في Oracle 10g?هناك استعلام معين أن كنت ضبط لبضعة أيام.لقد حصلت على النسخة التي يبدو أن تعمل بشكل أسرع (على الأقل بناء على الاختبارات الأولية) ، ولكن شرح التكلفة تقريبا نفس.

  1. كيف المرجح هو أن يفسر التكلفة في عداد المفقودين شيئا ؟
  2. هل هناك أي حالات معينة حيث شرح التكلفة بشكل غير متناسب مختلفة من الاستعلام الفعلية الأداء ؟
  3. لقد استخدمت first_rows تلميح على هذا الاستعلام.هل هذا له تأثير ؟
هل كانت مفيدة؟

المحلول

كيف المرجح هو أن يفسر التكلفة في عداد المفقودين شيئا ؟

من المستبعد جدا.في الواقع ، سيكون مستوى 1 bug :)

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

ملاحظة EXPLAIN PLAN قد تظهر لك الأشياء التي هي على الأرجح أن يحدث ولكن لا يجوز أبدا أن يحدث في فعلية الاستعلام.

مثل إذا قمت بتشغيل EXPLAIN PLAN على الهرمي الاستعلام:

SELECT  *
FROM    table
START WITH
        id = :startid
CONNECT BY
        parent = PRIOR id

مع مؤشرات على حد سواء id و parent, سوف ترى إضافية FULL TABLE SCAN والتي على الأرجح لن يحدث في الحياة الحقيقية.

استخدام STORED OUTLINE's لتخزين وإعادة استخدام خطة بغض النظر عن ما.

هل هناك أي حالات معينة حيث شرح التكلفة بشكل غير متناسب مختلفة من الاستعلام الفعلية الأداء ؟

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

CBO (على أساس التكلفة محسن) يستخدم حساب الإحصاءات إلى تقييم الاستعلام الوقت واختيار الخطة المثلى.

إذا كان لديك الكثير من JOIN's, الاستعلامات الفرعية و هذه الأنواع على الأشياء في الاستعلام الخاص بك ، خوارزمية يمكن التنبؤ بالضبط ما هي الخطة التي سوف تكون أسرع ، وخاصة عندما تصل حدود الذاكرة.

هنا الوضع الخاص الذي سألت عنه: HASH JOIN, على سبيل المثال, سوف تحتاج إلى عدة يمر فوق probe table إذا كان جدول التجزئة لا يصلح في pga_aggregate_table, ولكن Oracle 10g, أنا لا أتذكر هذا من أي وقت مضى أن تؤخذ بعين الاعتبار من قبل CBO.

هذا هو السبب في أنني تلميح كل الاستعلام أتوقع أن تشغيل أكثر من 2 ثانية في أسوأ الأحوال.

لقد استخدمت first_rows تلميح على هذا الاستعلام.هل هذا له تأثير ؟

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

عمليا, وهو ما يعني دائما استخدام NESTED LOOP's بدلا من HASH JOIN's.

NESTED LOOP's وتقيم الأداء العام على مجموعات كبيرة من البيانات ، ولكنها عودة الصفوف الأولى أسرع (لأنه لا تجزئة الجدول يجب أن تكون مبنية).

كما الاستعلام من السؤال الأصلي, راجع جوابي هنا.

نصائح أخرى

Q: هل هناك أي طرق جيدة لقياس موضوعي استعلام الأداء في Oracle 10g?

  • أوراكل تتبع أفضل طريقة لقياس الأداء.تنفيذ الاستعلام والسماح أوراكل أداة التنفيذ.في SQLPlus البيئة ، فإنه من السهل جدا للاستخدام AUTOTRACE.

http://asktom.oracle.com/tkyte/article1/autotrace.html المادة (نقل)
http://tkyte.blogspot.com/2007/04/when-explanation-doesn-sound-quite.html
http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:5671636641855

و تمكين التتبع Oracle في بيئات أخرى ليس من الصعب أن.

Q: هناك واحد بعينه استعلام لقد تم ضبط لبضعة أيام.لقد حصلت على النسخة التي يبدو أن تعمل بشكل أسرع (على الأقل بناء على الاختبارات الأولية) ، ولكن شرح التكلفة تقريبا نفس.

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

Q:> 1 .كيف المرجح هو أن يفسر التكلفة في عداد المفقودين شيئا ؟

  • ليس من المرجح جدا, ولكن رأيت في الحالات التي يكون فيها شرح خطة يأتي بخطة مختلفة من محسن.

Q:> 2 .هل هناك أي حالات معينة حيث شرح التكلفة بشكل غير متناسب مختلفة من الاستعلام الفعلية الأداء ؟

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

Q:> 3 .لقد استخدمت first_rows تلميح على هذا الاستعلام.هل هذا له تأثير ؟

  • أي تلميح (مثل /*+ FIRST_ROWS */) قد تؤثر على الخطة التي يتم اختيارها من قبل محسن.

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

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

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

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

للحصول على التكلفة الفعلية من أجل تنفيذ بيان, تشغيل تعقب على هذا البيان.أسهل طريقة للقيام بذلك هي مع SQLPlus AUTOTRACE.

[http://asktom.oracle.com/tkyte/article1/autotrace.html][4]

خارج SQLPlus البيئة ، يمكنك تشغيل Oracle تتبع:

    alter session set timed_statistics = true;
    alter session set tracefile_identifier = here_is_my_session;
    alter session set events '10046 trace name context forever, level 12'
    --alter session set events '10053 trace name context forever, level 1'
    select /*-- your_statement_here --*/ ...
    alter session set events '10046 trace name context off'
    --alter session set events '10053 trace name context off'

هذا يضع ملف التتبع إلى user_dump_dest دليل على الملقم.على tracefile المنتجة سوف يكون بيان خطة كل من الانتظار الأحداث.(المسندة tracefile معرف يتم تضمينها في الملف ، يجعل من السهل العثور على الملفات الخاصة بك في udump الدليل)

    select value from v$parameter where name like 'user_dump_dest'

إذا لم يكن لديك الوصول إلى tracefile, أنت بحاجة إلى الحصول على مساعدة من dba أن تحصل على حق الوصول.(ديسيبل يمكن أن تخلق بسيط شيل أنه يمكن للمطورين تشغيل ضد .الملف trc لتشغيل tkprof و تغيير الأذونات على ملف التتبع و على tkprof الانتاج.يمكنك أيضا استخدام أحدث trcanlzr.هناك أوراكل metalink الملاحظات على حد سواء.

AFAIK, شرح استخدام بعض البيانات الإحصائية لحساب التكاليف ، لذلك فإنه يمكن بالتأكيد تختلف عن الأداء الفعلي.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top