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

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

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

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

شما می‌توانید از طریق کنسول گوگل کلود از Query Explain استفاده کنید.

کنسول

یک پرس و جو (query) را در ویرایشگر پرس و جو (Query Editor) اجرا کنید و تب توضیحات (Explanation) را باز کنید:

  1. در کنسول گوگل کلود، به صفحه پایگاه‌های داده بروید.

    به پایگاه‌های داده بروید

  2. از لیست پایگاه‌های داده، یک پایگاه داده Cloud Firestore را انتخاب کنید. کنسول Google Cloud، Firestore Explorer را برای آن پایگاه داده باز می‌کند.
  3. یک پرس و جو (query) در ویرایشگر پرس و جو (query editor) وارد کنید و روی اجرا (Run) کلیک کنید.
  4. برای مشاهده خروجی تحلیل پرس و جو، روی تب Explanation کلیک کنید.

تحلیل

خروجی 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

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