Topik ini menjelaskan cara dan tempat menggunakan kondisi filter tanpa pushdown.
Ikhtisar
Secara default, AnalyticDB for MySQL membuat indeks untuk setiap kolom saat Anda membuat tabel guna meningkatkan efisiensi penyaringan data. Namun, penggunaan indeks tidak selalu optimal dan terkadang justru menurunkan kinerja secara keseluruhan. Meskipun Anda dapat menghapus indeks secara manual, tindakan tersebut berpotensi menimbulkan masalah jika suatu saat indeks tersebut diperlukan kembali. Fitur untuk menonaktifkan penurunan kondisi filter (filter condition pushdown) di AnalyticDB for MySQL menyediakan solusi yang lebih baik. Fitur ini memungkinkan Anda untuk sementara mencegah kondisi filter pada kolom tertentu diturunkan (pushed down) di tingkat kueri atau kluster, sehingga meningkatkan kinerja kueri secara keseluruhan.
Pertimbangkan untuk menonaktifkan penurunan kondisi filter dalam skenario berikut:
-
Data dengan kardinalitas rendah. Ketika suatu kolom memiliki sedikit nilai unik, penyaringan tetap mengembalikan sejumlah besar data, sehingga indeks menjadi tidak efektif.
-
Tekanan I/O disk tinggi. Jika kueri atau proses penulisan data intensif menyebabkan penggunaan I/O tinggi, penggunaan indeks untuk penyaringan data dapat menimbulkan persaingan atas sumber daya I/O disk dan mengurangi efektivitasnya.
-
Menurunkan beberapa kondisi sekaligus, terutama yang melibatkan operasi kompleks seperti LIKE atau perbandingan string, dapat menghabiskan sumber daya signifikan pada node penyimpanan dan memengaruhi kinerja secara keseluruhan.
Periksa apakah kondisi filter diturunkan
Anda dapat memeriksa apakah kondisi filter diturunkan pada halaman eksekusi.
-
Pada tab Execution Plan, klik stage yang berisi operator TableScan.
CatatanUntuk informasi tentang cara membuka tab Execution Plan, lihat View diagnostic results.
-
Klik View Stage Plans.
-
Pada halaman rencana stage, klik operator TableScan.
-
Pada panel Properties di sebelah kanan, cari properti PushedDownFilter. Kehadirannya menunjukkan bahwa kondisi filter telah diturunkan. Misalnya, jika nilai properti PushedDownFilter adalah
id = BIGINT '277941', hal ini menunjukkan bahwa kondisi filter telah diturunkan ke lapisan penyimpanan.Catatan-
Untuk kluster dalam mode elastis, jika operator Filter muncul dalam rencana eksekusi pada stage downstream, kondisi filter terkait tidak diturunkan.
-
Untuk kluster dalam mode reserved, jika operator Filter muncul dalam rencana stage saat ini, kondisi filter terkait tidak diturunkan.
-
Nonaktifkan penurunan kondisi filter untuk kolom tertentu dalam suatu kueri
Dalam kueri tertentu, Anda dapat menggunakan hint untuk menonaktifkan penurunan kondisi filter pada kolom tertentu. Operasi ini hanya berlaku untuk kueri yang menggunakan hint tersebut.
Sintaksis
-
Untuk versi mesin minor 3.1.4 atau yang lebih baru, gunakan hint berikut:
/*+ filter_not_pushdown_columns=[Schema1.table1:colName1|colName2;Schema2.table2:colName1|colName2] */ -
Untuk versi mesin minor sebelum 3.1.4, gunakan hint berikut:
/*+ no_index_columns=[table1.colName1;colName2,table2.colName1] */
-
Anda dapat menggunakan hint untuk menonaktifkan penurunan kondisi filter pada kolom tertentu dalam tabel yang berada dalam database yang sama maupun berbeda. Untuk versi mesin minor sebelum 3.1.4, saat menggunakan hint pada tabel lintas database, pastikan nama tabel bersifat unik. Jika tidak, hint tersebut dapat memengaruhi tabel yang tidak dimaksudkan. Pada versi mesin minor 3.1.4 dan yang lebih baru, hint menggunakan format
Schema.tableuntuk membedakan tabel, sehingga mencegah efek yang tidak diinginkan saat menggunakan hint pada tabel dengan nama yang sama di database berbeda. -
Untuk melihat versi mesin minor kluster Anda, lihat View cluster version information. Untuk melakukan upgrade versi mesin minor, hubungi dukungan teknis.
Contoh
-
Contoh 1:
Contoh ini berlaku untuk versi mesin minor 3.1.4 atau yang lebih baru. Dalam kueri ini, kondisi filter pada kolom
iddanproductdari tabeltable01di databasetest01tidak diturunkan./*+ filter_not_pushdown_columns=[test01.table01:id|product] */ -
Contoh 2:
Contoh ini berlaku untuk versi mesin minor 3.1.4 atau yang lebih baru. Dalam kueri ini, kondisi filter pada kolom
iddanproductdari tabeltable01di databasetest01, serta pada kolomkeydari tabeltable03di databasetest02tidak diturunkan./*+ filter_not_pushdown_columns=[test01.table01:id|product;test02.table03:key] */ -
Contoh 3:
Contoh ini berlaku untuk versi mesin minor sebelum 3.1.4. Dalam kueri ini, kondisi filter pada kolom
iddanproductdari tabeltable02, serta pada kolomkeydari tabeltable03tidak diturunkan./*+ no_index_columns=[table02.id;product,table03.key] */
Nonaktifkan penurunan kondisi filter untuk kolom tertentu di seluruh kluster
Anda dapat menjalankan pernyataan berikut untuk menonaktifkan penurunan kondisi filter pada kolom tertentu di semua kueri dalam kluster saat ini.
Sintaksis
-
Anda dapat menggunakan hint untuk menonaktifkan penurunan kondisi filter pada kolom tertentu dalam tabel yang berada dalam database yang sama maupun berbeda. Untuk versi mesin minor sebelum 3.1.4, saat menggunakan hint pada tabel lintas database, pastikan nama tabel bersifat unik. Jika tidak, hint tersebut dapat memengaruhi tabel yang tidak dimaksudkan. Pada versi mesin minor 3.1.4 dan yang lebih baru, hint menggunakan format
Schema.tableuntuk membedakan tabel, sehingga mencegah efek yang tidak diinginkan saat menggunakan hint pada tabel dengan nama yang sama di database berbeda. -
Untuk melihat versi mesin minor kluster Anda, lihat View cluster version information. Untuk melakukan upgrade versi mesin minor, hubungi dukungan teknis.
Contoh
Contoh ini berlaku untuk versi mesin minor 3.1.4 atau yang lebih baru. Untuk semua kueri dalam kluster saat ini, kondisi filter pada kolom id dari tabel table02 di database test02 tidak diturunkan.
set adb_config filter_not_pushdown_columns=[test02.table02:id]