Menggunakan pengoptimalan berbasis histori

Untuk dukungan selama pratinjau, kirim email ke bigquery-history-based-optimization-support@google.com.

Panduan ini menjelaskan cara mengaktifkan, menonaktifkan, dan menganalisis pengoptimalan berbasis histori untuk kueri.

Tentang pengoptimalan berbasis histori

Pengoptimalan berbasis histori menggunakan informasi dari eksekusi kueri serupa yang sudah selesai untuk menerapkan pengoptimalan tambahan dan lebih meningkatkan performa kueri seperti waktu slot yang terpakai dan latensi kueri. Misalnya, saat Anda menerapkan pengoptimalan berbasis histori, eksekusi kueri pertama mungkin memerlukan waktu 60 detik, tetapi eksekusi kueri kedua mungkin hanya memerlukan waktu 30 detik jika pengoptimalan berbasis histori teridentifikasi. Proses ini berlanjut sampai tidak ada pengoptimalan tambahan untuk ditambahkan.

Berikut adalah contoh cara kerja pengoptimalan berbasis histori dengan BigQuery:

Jumlah eksekusi Waktu slot kueri yang terpakai Notes
1 60 Eksekusi asli.
2 30 Pengoptimalan berbasis histori pertama diterapkan.
3 20 Pengoptimalan berdasarkan histori kedua diterapkan.
4 21 Tidak ada pengoptimalan berbasis histori tambahan yang perlu diterapkan.
5 19 Tidak ada pengoptimalan berbasis histori tambahan yang perlu diterapkan.
6 20 Tidak ada pengoptimalan berbasis histori tambahan yang perlu diterapkan.

Pengoptimalan berbasis histori hanya diterapkan jika terdapat keyakinan tinggi bahwa akan ada dampak yang bermanfaat bagi performa kueri. Selain itu, jika pengoptimalan tidak meningkatkan performa kueri secara signifikan, pengoptimalan tersebut akan dicabut dan tidak digunakan dalam eksekusi kueri tersebut pada masa mendatang.

Mengaktifkan pengoptimalan berbasis histori

Untuk menggunakan pengoptimalan berbasis histori dalam sebuah project, sertakan parameter berikut dalam pernyataan ALTER PROJECT: default_query_optimizer_options = 'adaptive=on'

Contoh:

ALTER PROJECT `user_project`
SET OPTIONS (
  `region-us.default_query_optimizer_options` = 'adaptive=on'
);

Menonaktifkan pengoptimalan berbasis histori

Untuk menonaktifkan pengoptimalan berbasis histori dalam sebuah project, sertakan parameter default_query_optimizer_options = 'adaptive=off' dalam pernyataan ALTER PROJECT.

Contoh:

ALTER PROJECT `user_project`
SET OPTIONS (
  `region-us.default_query_optimizer_options` = 'adaptive=off'
);

Meninjau pengoptimalan berbasis histori untuk suatu tugas

Untuk meninjau pengoptimalan berbasis histori untuk sebuah tugas, Anda dapat menggunakan kueri SQL atau panggilan metode REST API.

SQL

Anda dapat menggunakan kueri untuk mendapatkan pengoptimalan berbasis histori untuk suatu tugas. Kueri harus menyertakan INFORMATION_SCHEMA.JOBS_BY_PROJECT dan nama kolom query_info.optimization_details.

Dalam contoh berikut, detail pengoptimalan ditampilkan untuk tugas yang disebut sample_job. Jika tidak ada pengoptimalan berbasis histori yang diterapkan, NULL akan dibuat untuk optimization_details:

SELECT
  job_id,
  query_info.optimization_details
FROM `project_name.region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE job_id = 'sample_job'
LIMIT 1;

Hasilnya akan terlihat seperti berikut:

-- The JSON in optimization_details has been formatted for readability.
/*------------+-----------------------------------------------------------------*
 | job_id     | optimization_details                                            |
 +------------+-----------------------------------------------------------------+
 | sample_job | {                                                               |
 |            |   "optimizations": [                                            |
 |            |     {                                                           |
 |            |       "semi_join_reduction": "web_sales.web_date,RIGHT"         |
 |            |     },                                                          |
 |            |     {                                                           |
 |            |       "semi_join_reduction": "catalog_sales.catalog_date,RIGHT" |
 |            |     },                                                          |
 |            |     {                                                           |
 |            |       "semi_join_reduction": "store_sales.store_date,RIGHT"     |
 |            |     },                                                          |
 |            |     {                                                           |
 |            |       "join_commutation": "web_returns.web_item"                |
 |            |     },                                                          |
 |            |     {                                                           |
 |            |       "parallelism_adjustment": "applied"                       |
 |            |     },                                                          |
 |            |   ]                                                             |
 |            | }                                                               |
 *------------+-----------------------------------------------------------------*/

API

Untuk mendapatkan detail pengoptimalan tugas, Anda dapat memanggil metode jobs.get.

Dalam contoh berikut, metode jobs.get menampilkan detail pengoptimalan (optimizationDetails) dalam respons lengkap:

{
  "jobReference": {
    "projectId": "myProject",
    "jobId": "sample_job"
  }
}

Hasilnya akan terlihat seperti berikut:

-- The unrelated parts in the full response have been removed.
{
  "jobReference": {
    "projectId": "myProject",
    "jobId": "sample_job",
    "location": "US"
  },
  "statistics": {
    "query": {
      "queryInfo": {
        "optimizationDetails": {
          "optimizations": [
            {
              "semi_join_reduction": "web_sales.web_date,RIGHT"
            },
            {
              "semi_join_reduction": "catalog_sales.catalog_date,RIGHT"
            },
            {
              "semi_join_reduction": "store_sales.store_date,RIGHT"
            },
            {
              "join_commutation": "web_returns.web_item"
            },
            {
              "parallelism_adjustment": "applied"
            }
          ]
        }
      }
    }
  }
}

Peran dan izin

  • Untuk ikut serta dalam pengoptimalan berbasis histori, Anda harus memiliki izin yang diperlukan untuk membuat konfigurasi default BigQuery, lalu Anda harus menggunakan pernyataan ALTER PROJECT untuk mengaktifkan pengoptimalan berbasis histori. Setelah Anda mengaktifkan pengoptimalan berbasis histori, semua tugas dalam project tersebut akan menggunakan pengoptimalan berbasis histori, terlepas dari pengguna yang membuat tugas. Untuk mempelajari lebih lanjut izin yang diperlukan bagi konfigurasi default, lihat Izin yang diperlukan untuk konfigurasi default. Untuk mengaktifkan pengoptimalan berbasis histori, lihat Mengaktifkan pengoptimalan berbasis histori.

  • Untuk meninjau pengoptimalan berbasis histori untuk suatu tugas menggunakan tampilan INFORMATION_SCHEMA.JOBS, Anda harus memiliki peran yang diperlukan. Untuk mengetahui informasi selengkapnya, lihat Peran yang diperlukan untuk tampilan INFORMATION_SCHEMA.JOBS.