اجرای پرس و جو را با Query Explain تجزیه و تحلیل کنید

این صفحه نحوه بازیابی اطلاعات اجرای پرس و جو هنگام اجرای یک پرس و جو را شرح می‌دهد.

استفاده از توضیح پرس و جو

شما می‌توانید از Query Explain برای درک نحوه اجرای کوئری‌های خود استفاده کنید. این ابزار جزئیاتی را ارائه می‌دهد که می‌توانید برای بهینه‌سازی کوئری‌های خود از آنها استفاده کنید.

می‌توانید از Query Explain در کنسول Firebase استفاده کنید:

  • در کنسول فایربیس، به مسیر Databases and Storage > Firestore > Data > Query Editor بروید.
  • کوئری‌ای را که اطلاعات اجرایی آن را می‌خواهید، اجرا کنید.
  • برای مشاهده خروجی تحلیل پرس‌وجو، روی تب «توضیح پرس‌وجو» کلیک کنید.

حالت‌ها را توضیح دهید

بسته به اینکه چه چیزی را می‌خواهید اشکال‌زدایی کنید، می‌توانید یک پرس‌وجو را با استفاده از Query Explain در حالت‌های مختلف اجرا کنید:

  • analyze : کوئری را برنامه‌ریزی و اجرا می‌کند. اطلاعات برنامه‌ریز، آمار اجرای زمان اجرا و معیارها را در کنار نتایج منظم تولید شده توسط کوئری برمی‌گرداند.

  • explain : پرس‌وجو را برنامه‌ریزی می‌کند، اما آن را اجرا نمی‌کند. اطلاعات برنامه‌ریز را برمی‌گرداند اما آمار، معیارها یا نتایج زمان اجرا را ارائه نمی‌دهد. این برای اشکال‌زدایی رفتار یک پرس‌وجو بدون اجرای عملیات پرهزینه مفید است.

تحلیل

خروجی Query Explain شامل دو جزء اصلی است - آمار خلاصه و درخت اجرا. این پرس و جو را به عنوان مثال در نظر بگیرید:

db.pipeline().collection('/users').sort(field("status").ascending()).limit(100)

آمار خلاصه

بالای خروجی توضیح داده شده شامل خلاصه‌ای از آمار اجرا است. از این آمار برای تعیین اینکه آیا یک پرس‌وجو تأخیر یا هزینه بالایی دارد یا خیر، استفاده کنید. همچنین شامل آمار حافظه است که به شما اطلاع می‌دهد پرس‌وجوی شما چقدر به محدودیت‌های حافظه نزدیک است.

Execution:
 results returned: 2
 request peak memory usage: 20.25 KiB (20,736 B)
 data bytes read: 148 B
 entity row scanned: 2

Billing:
 read units: 1

درخت اجرا

درخت اجرا، اجرای پرس‌وجو را به صورت مجموعه‌ای از گره‌ها توصیف می‌کند. گره‌های پایینی (گره‌های برگ) داده‌ها را از لایه ذخیره‌سازی بازیابی می‌کنند که در امتداد درخت حرکت می‌کند تا پاسخ پرس‌وجو را تولید کند.

برای جزئیات مربوط به هر گره اجرایی، به مرجع اجرا مراجعه کنید.

برای جزئیات بیشتر در مورد نحوه استفاده از این اطلاعات برای بهینه سازی پرس و جوهای خود، به بهینه سازی اجرای پرس و جو مراجعه کنید.

مثال زیر یک درخت اجرا است:

Tree:
• Compute
|  $out_1: map_set($record_1, "__name__", $__name___1, "__key__", unset)
|  is query result: true
|
|  Execution:
|   records returned: 2
|   latency: 5.96 ms (local <1 ms)
|
└── • Compute
    |  $__name___1: map_get($record_1, "__key__")
    |
    |  Execution:
    |   records returned: 2
    |   latency: 5.88 ms (local <1 ms)
    |
    └── • MajorSort
        |  fields: [$v_1 ASC]
        |  output: [$record_1]
        |  limit: 100
        |
        |  Execution:
        |   records returned: 2
        |   latency: 5.86 ms (local <1 ms)
        |   peak memory usage: 20.25 KiB (20,736 B)
        |
        └── • Compute
            |  $v_1: map_get($record_1, "status")
            |
            |  Execution:
            |   records returned: 2
            |   latency: 5.23 ms (local <1 ms)
            |
            └── • TableScan
                   source: /users
                   order: UNDEFINED
                   properties: *
                   row range: (-∞..+∞)
                   output record: $record_1
                   variables: [$record_1]

                   Execution:
                    records returned: 2
                    latency: 4.68 ms
                    records scanned: 2
                    data bytes read: 148 B

قدم بعدی چیست؟

،

این صفحه نحوه بازیابی اطلاعات اجرای پرس و جو هنگام اجرای یک پرس و جو را شرح می‌دهد.

استفاده از توضیح پرس و جو

شما می‌توانید از Query Explain برای درک نحوه اجرای کوئری‌های خود استفاده کنید. این ابزار جزئیاتی را ارائه می‌دهد که می‌توانید برای بهینه‌سازی کوئری‌های خود از آنها استفاده کنید.

می‌توانید از Query Explain در کنسول Firebase استفاده کنید:

  • در کنسول فایربیس، به مسیر Databases and Storage > Firestore > Data > Query Editor بروید.
  • کوئری‌ای را که اطلاعات اجرایی آن را می‌خواهید، اجرا کنید.
  • برای مشاهده خروجی تحلیل پرس‌وجو، روی تب «توضیح پرس‌وجو» کلیک کنید.

حالت‌ها را توضیح دهید

بسته به اینکه چه چیزی را می‌خواهید اشکال‌زدایی کنید، می‌توانید یک پرس‌وجو را با استفاده از Query Explain در حالت‌های مختلف اجرا کنید:

  • analyze : کوئری را برنامه‌ریزی و اجرا می‌کند. اطلاعات برنامه‌ریز، آمار اجرای زمان اجرا و معیارها را در کنار نتایج منظم تولید شده توسط کوئری برمی‌گرداند.

  • explain : پرس‌وجو را برنامه‌ریزی می‌کند، اما آن را اجرا نمی‌کند. اطلاعات برنامه‌ریز را برمی‌گرداند اما آمار، معیارها یا نتایج زمان اجرا را ارائه نمی‌دهد. این برای اشکال‌زدایی رفتار یک پرس‌وجو بدون اجرای عملیات پرهزینه مفید است.

تحلیل

خروجی Query Explain شامل دو جزء اصلی است - آمار خلاصه و درخت اجرا. این پرس و جو را به عنوان مثال در نظر بگیرید:

db.pipeline().collection('/users').sort(field("status").ascending()).limit(100)

آمار خلاصه

بالای خروجی توضیح داده شده شامل خلاصه‌ای از آمار اجرا است. از این آمار برای تعیین اینکه آیا یک پرس‌وجو تأخیر یا هزینه بالایی دارد یا خیر، استفاده کنید. همچنین شامل آمار حافظه است که به شما اطلاع می‌دهد پرس‌وجوی شما چقدر به محدودیت‌های حافظه نزدیک است.

Execution:
 results returned: 2
 request peak memory usage: 20.25 KiB (20,736 B)
 data bytes read: 148 B
 entity row scanned: 2

Billing:
 read units: 1

درخت اجرا

درخت اجرا، اجرای پرس‌وجو را به صورت مجموعه‌ای از گره‌ها توصیف می‌کند. گره‌های پایینی (گره‌های برگ) داده‌ها را از لایه ذخیره‌سازی بازیابی می‌کنند که در امتداد درخت حرکت می‌کند تا پاسخ پرس‌وجو را تولید کند.

برای جزئیات مربوط به هر گره اجرایی، به مرجع اجرا مراجعه کنید.

برای جزئیات بیشتر در مورد نحوه استفاده از این اطلاعات برای بهینه سازی پرس و جوهای خود، به بهینه سازی اجرای پرس و جو مراجعه کنید.

مثال زیر یک درخت اجرا است:

Tree:
• Compute
|  $out_1: map_set($record_1, "__name__", $__name___1, "__key__", unset)
|  is query result: true
|
|  Execution:
|   records returned: 2
|   latency: 5.96 ms (local <1 ms)
|
└── • Compute
    |  $__name___1: map_get($record_1, "__key__")
    |
    |  Execution:
    |   records returned: 2
    |   latency: 5.88 ms (local <1 ms)
    |
    └── • MajorSort
        |  fields: [$v_1 ASC]
        |  output: [$record_1]
        |  limit: 100
        |
        |  Execution:
        |   records returned: 2
        |   latency: 5.86 ms (local <1 ms)
        |   peak memory usage: 20.25 KiB (20,736 B)
        |
        └── • Compute
            |  $v_1: map_get($record_1, "status")
            |
            |  Execution:
            |   records returned: 2
            |   latency: 5.23 ms (local <1 ms)
            |
            └── • TableScan
                   source: /users
                   order: UNDEFINED
                   properties: *
                   row range: (-∞..+∞)
                   output record: $record_1
                   variables: [$record_1]

                   Execution:
                    records returned: 2
                    latency: 4.68 ms
                    records scanned: 2
                    data bytes read: 148 B

قدم بعدی چیست؟