Menggunakan petunjuk kueri T-SQL untuk meningkatkan kinerja kueri Babelfish - Amazon Aurora

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan petunjuk kueri T-SQL untuk meningkatkan kinerja kueri Babelfish

Dimulai dengan versi 2.3.0, Babelfish mendukung penggunaan petunjuk kueri. menggunakan pg_hint_plan. Di Aurora PostgreSQL, pg_hint_plan diinstal secara default. Untuk informasi selengkapnya tentang ekstensi PostgreSQL pg_hint_plan, lihat https://github.com/ossc-db/pg_hint_plan. Untuk detail tentang versi ekstensi ini yang didukung oleh Aurora PostgreSQL, lihat Versi ekstensi untuk Amazon Aurora PostgreSQL di Catatan Rilis untuk Aurora PostgreSQL.

Pengoptimal kueri dirancang dengan baik untuk menemukan rencana eksekusi yang optimal untuk pernyataan SQL. Saat memilih paket, pengoptimal kueri mempertimbangkan model biaya mesin, serta statistik kolom dan tabel. Namun, rencana yang disarankan mungkin tidak memenuhi kebutuhan set data Anda. Dengan demikian, petunjuk kueri mengatasi masalah kinerja untuk meningkatkan rencana eksekusi. query hint adalah sintaks yang ditambahkan ke standar SQL yang menginstruksikan mesin basis data tentang cara mengeksekusi kueri. Misalnya, petunjuk dapat menginstruksikan mesin untuk mengikuti pemindaian berurutan dan mengganti rencana apa pun yang telah dipilih oleh pengoptimal kueri.

Mengaktifkan petunjuk kueri T-SQL di Babelfish

Saat ini, Babelfish mengabaikan semua petunjuk T-SQL secara default. Untuk menerapkan petunjuk T-SQL, jalankan perintah sp_babelfish_configure dengan nilai enable_pg_hint dalam kondisi ON.

EXECUTE sp_babelfish_configure 'enable_pg_hint', 'on' [, 'server']

Anda dapat membuat pengaturan aktif secara permanen pada tingkat klaster dengan memasukkan kata kunci server. Untuk mengonfigurasi pengaturan hanya untuk sesi saat ini, jangan gunakan server.

Setelah enable_pg_hint ON, Babelfish menerapkan petunjuk T-SQL berikut.

  • Petunjuk INDEX

  • Petunjuk JOIN

  • Petunjuk FORCE ORDER

  • Petunjuk MAXDOP

Misalnya, urutan perintah berikut mengaktifkan pg_hint_plan.

1> CREATE TABLE t1 (a1 INT PRIMARY KEY, b1 INT); 2> CREATE TABLE t2 (a2 INT PRIMARY KEY, b2 INT); 3> GO 1> EXECUTE sp_babelfish_configure 'enable_pg_hint', 'on'; 2> GO 1> SET BABELFISH_SHOWPLAN_ALL ON; 2> GO 1> SELECT * FROM t1 JOIN t2 ON t1.a1 = t2.a2; --NO HINTS (HASH JOIN) 2> GO

Tidak ada petunjuk yang diterapkan pada pernyataan SELECT. Rencana kueri tanpa petunjuk dikembalikan.

QUERY PLAN --------------------------------------------------------------------------- Query Text: SELECT * FROM t1 JOIN t2 ON t1.a1 = t2.a2 Hash Join (cost=60.85..99.39 rows=2260 width=16) Hash Cond: (t1.a1 = t2.a2) -> Seq Scan on t1 (cost=0.00..32.60 rows=2260 width=8) -> Hash (cost=32.60..32.60 rows=2260 width=8) -> Seq Scan on t2 (cost=0.00..32.60 rows=2260 width=8)
1> SELECT * FROM t1 INNER MERGE JOIN t2 ON t1.a1 = t2.a2; 2> GO

Tidak ada petunjuk yang diterapkan pada pernyataan SELECT. Output berikut menunjukkan bahwa rencana kueri dengan penggabungan yang digabung dikembalikan.

QUERY PLAN --------------------------------------------------------------------------- Query Text: SELECT/*+ MergeJoin(t1 t2) Leading(t1 t2)*/ * FROM t1 INNER JOIN t2 ON t1.a1 = t2.a2 Merge Join (cost=0.31..190.01 rows=2260 width=16) Merge Cond: (t1.a1 = t2.a2) -> Index Scan using t1_pkey on t1 (cost=0.15..78.06 rows=2260 width=8) -> Index Scan using t2_pkey on t2 (cost=0.15..78.06 rows=2260 width=8)
1> SET BABELFISH_SHOWPLAN_ALL OFF; 2> GO

Batasan

Saat menggunakan petunjuk kueri, pertimbangkan batasan berikut:

  • Jika rencana kueri di-cache sebelum enable_pg_hint diaktifkan, petunjuk tidak akan diterapkan di sesi yang sama. Ini akan diterapkan di sesi baru.

  • Jika nama skema diberikan secara eksplisit, petunjuk tidak dapat diterapkan. Anda dapat menggunakan alias tabel sebagai solusi.

  • Petunjuk kueri tidak dapat diterapkan ke tampilan dan sub-kueri.

  • Petunjuk tidak berfungsi untuk pernyataan UPDATE/DELETE dengan JOIN.

  • Petunjuk indeks untuk indeks atau tabel yang tidak ada diabaikan.

  • Petunjuk FORCE ORDER tidak berfungsi untuk HASH JOIN dan yang bukan ANSI JOIN.