Menghindari menyematkan Proxy RDS - Layanan Basis Data Relasional Amazon

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

Menghindari menyematkan Proxy RDS

Multiplexing akan lebih efisien saat permintaan basis data tidak bergantung pada informasi status dari permintaan sebelumnya. Dalam kasus ini, Proksi RDS dapat menggunakan kembali koneksi saat setiap transaksi selesai. Contoh informasi status tersebut mencakup sebagian besar variabel dan parameter konfigurasi yang dapat diubah melalui pernyataan SET atau SELECT. Secara default, transaksi SQL pada koneksi klien dapat bermultipleks antar-koneksi basis data acuan.

Koneksi ke proksi dapat memasukkan status yang disebut sebagai penyematan. Saat koneksi disematkan, setiap transaksi berikutnya akan menggunakan koneksi basis data acuan yang sama hingga sesi berakhir. Koneksi klien lainnya juga tidak dapat menggunakan kembali koneksi basis data tersebut hingga sesi berakhir. Sesi berakhir saat koneksi klien terputus.

Proksi RDS secara otomatis menyematkan koneksi klien ke koneksi DB tertentu saat mendeteksi perubahan sebuah status sesi yang tidak sesuai untuk sesi lainnya. Penyematan mengurangi efektivitas penggunaan kembali koneksi. Jika semua atau hampir semua koneksi Anda mengalami penyematan, pertimbangkan untuk mengubah kode aplikasi atau beban kerja untuk mengurangi kondisi yang menyebabkan penyematan.

Misalnya, aplikasi Anda mengubah variabel sesi atau parameter konfigurasi. Dalam hal ini, pernyataan selanjutnya dapat mengandalkan variabel atau parameter baru yang berlaku. Oleh karena itu, saat Proksi RDS memproses permintaan untuk mengubah variabel sesi atau pengaturan konfigurasi, sesi ini akan disematkan ke koneksi DB. Dengan demikian, tahap sesi tetap berfungsi untuk semua transaksi berikutnya dalam sesi yang sama.

Untuk beberapa mesin basis data, aturan ini tidak berlaku untuk semua parameter yang dapat Anda atur. Proksi RDS melacak pernyataan dan variabel tertentu. Oleh karena itu, Proksi RDS tidak menyematkan sesi saat Anda mengubahnya. Dalam kasus ini, Proksi RDS hanya menggunakan kembali koneksi untuk sesi lain yang memiliki nilai yang sama untuk pengaturan tersebut. Untuk detail tentang apa yang dilacak Proksi RDS untuk mesin basis data, lihat berikut ini:

Apa yang Dilacak Proksi RDS untuk basis data RDS for SQL Server

RDS Proxy melacak pernyataan SQL Server berikut:

  • USE

  • SET ANSI_NULLS

  • SET ANSI_PADDING

  • SET ANSI_WARNINGS

  • SET ARITHABORT

  • SET CONCAT_NULL_YIELDS_NULL

  • SET CURSOR_CLOSE_ON_COMMIT

  • SET DATEFIRST

  • SET DATEFORMAT

  • SET LANGUAGE

  • SET LOCK_TIMEOUT

  • SET NUMERIC_ROUNDABORT

  • SET QUOTED_IDENTIFIER

  • SET TEXTSIZE

  • SET TRANSACTION ISOLATION LEVEL

Apa yang dilacak Proksi RDS untuk basis data RDS for MariaDB dan RDS for MySQL

RDS Proxy melacak pernyataan MariaDB dan MySQL berikut:

  • DROP DATABASE

  • DROP SCHEMA

  • USE

RDS Proxy melacak variabel MySQL dan MariaDB berikut:

  • AUTOCOMMIT

  • AUTO_INCREMENT_INCREMENT

  • CHARACTER SET (or CHAR SET)

  • CHARACTER_SET_CLIENT

  • CHARACTER_SET_DATABASE

  • CHARACTER_SET_FILESYSTEM

  • CHARACTER_SET_CONNECTION

  • CHARACTER_SET_RESULTS

  • CHARACTER_SET_SERVER

  • COLLATION_CONNECTION

  • COLLATION_DATABASE

  • COLLATION_SERVER

  • INTERACTIVE_TIMEOUT

  • NAMES

  • NET_WRITE_TIMEOUT

  • QUERY_CACHE_TYPE

  • SESSION_TRACK_SCHEMA

  • SQL_MODE

  • TIME_ZONE

  • TRANSACTION_ISOLATION (or TX_ISOLATION)

  • TRANSACTION_READ_ONLY (or TX_READ_ONLY)

  • WAIT_TIMEOUT

catatan

RDS Proxy melacak perubahan pada TRANSACTION_READ_ONLY variabel TRANSACTION_ISOLATION dan saat Anda mengaturnya di lingkup sesi. Namun, jika Anda mengaturnya pada cakupan transaksi berikutnya, RDS Proxy pin koneksi. Perilaku ini berlaku apakah Anda menggunakan SET pernyataan atau SET TRANSACTION pernyataan untuk mengonfigurasi nilai-nilai ini.

Meminimalkan penyematan

Penyetelan performa untuk Proksi RDS meliputi upaya memaksimalkan penggunaan kembali koneksi tingkat transaksi (multiplexing) dengan meminimalkan penyematan.

Anda dapat meminimalkan penyematan dengan melakukan hal berikut:

  • Hindari permintaan basis data yang tidak perlu yang dapat menyebabkan penyematan.

  • Atur variabel dan pengaturan konfigurasi secara konsisten di semua koneksi. Dengan demikian, sesi berikutnya cenderung menggunakan kembali koneksi yang memiliki pengaturan tertentu tersebut.

    Akan tetapi, untuk pengaturan PostgreSQL, sebuah variabel bisa menimbulkan penyematan sesi.

  • Untuk basis data keluarga MySQL, terapkan sebuah filter penyematan sesi ke proksi. Anda dapat mengecualikan jenis operasi tertentu dari penyematan sesi jika Anda mengetahui bahwa tindakan ini tidak memengaruhi operasi yang benar aplikasi Anda.

  • Lihat seberapa sering penyematan terjadi dengan memantau CloudWatch metrik DatabaseConnectionsCurrentlySessionPinned Amazon. Untuk informasi tentang ini dan CloudWatch metrik lainnya, lihatMemantau metrik Proxy RDS dengan Amazon CloudWatch.

  • Jika menggunakan pernyataan SET untuk melakukan inisialisasi yang identik untuk setiap koneksi klien, Anda dapat melakukannya sekaligus mempertahankan multiplexing tingkat transaksi. Dalam kasus ini, Anda memindahkan pernyataan yang menyiapkan status sesi awal ke dalam kueri inisialisasi yang digunakan oleh proksi. Properti ini adalah string yang berisi satu atau beberapa pernyataan SQL, yang dipisahkan oleh titik koma.

    Misalnya, Anda dapat menentukan kueri inisialisasi untuk proksi yang menetapkan parameter konfigurasi tertentu. Kemudian, Proksi RDS menerapkan pengaturan tersebut setiap kali koneksi baru untuk proksi itu disiapkan. Anda dapat menghapus pernyataan SET yang sesuai dari kode aplikasi, sehingga tidak mengganggu multiplexing tingkat transaksi.

    Untuk metrik tentang seberapa sering penyematan terjadi pada proksi, lihat Memantau metrik Proxy RDS dengan Amazon CloudWatch.

Kondisi yang menyebabkan penyematan untuk semua keluarga mesin

Proksi menyematkan sesi ke koneksi saat ini dalam situasi berikut ketika multiplexing dapat menyebabkan perilaku yang tidak terduga:

  • Pernyataan apa pun dengan ukuran teks lebih dari 16 KB bisa menyebabkan proksi menyematkan sesi.

Kondisi yang menyebabkan penyematan untuk RDS for Microsoft SQL Server

Untuk RDS for SQL Server, interaksi berikut dapat menyebabkan penyematan:

  • Menggunakan beberapa kumpulan hasil yang aktif (MARS). Untuk informasi tentang MARS, lihat dokumentasi SQL Server.

  • Menggunakan komunikasi koordinator transaksi terdistribusi (DTC).

  • Membuat tabel sementara, transaksi, kursor, atau pernyataan yang disiapkan.

  • Menggunakan pernyataan SET berikut:

    • SET ANSI_DEFAULTS

    • SET ANSI_NULL_DFLT

    • SET ARITHIGNORE

    • SET DEADLOCK_PRIORITY

    • SET FIPS_FLAGGER

    • SET FMTONLY

    • SET FORCEPLAN

    • SET IDENTITY_INSERT

    • SET NOCOUNT

    • SET NOEXEC

    • SET OFFSETS

    • SET PARSEONLY

    • SET QUERY_GOVERNOR_COST_LIMIT

    • SET REMOTE_PROC_TRANSACTIONS

    • SET ROWCOUNT

    • SET SHOWPLAN_ALL, SHOWPLAN_TEXT, dan SHOWPLAN_XML

    • SET STATISTICS

    • SET XACT_ABORT

Kondisi yang menyebabkan penyematan untuk RDS for MariaDB dan RDS for MySQL

Untuk MariaDB dan MySQL, interaksi berikut juga dapat menyebabkan penyematan:

  • Pernyataan kunci tabel eksplisit LOCK TABLE, LOCK TABLES, atau FLUSH TABLES WITH READ LOCK menyebabkan proksi menyematkan sesi.

  • Membuat kunci bernama dengan menggunakan GET_LOCK menyebabkan proksi menyematkan sesi.

  • Menyetel variabel pengguna atau sistem (dengan beberapa pengecualian) menyematkan sesi ke proxy. Jika ini secara signifikan membatasi penggunaan kembali koneksi, Anda dapat mengonfigurasi SET operasi untuk menghindari penyematan. Untuk melakukan ini, sesuaikan properti filter penyematan sesi. Untuk informasi selengkapnya, silakan lihat Membuat proxy untuk Amazon RDS dan Mengubah Proksi RDS.

  • Membuat tabel sementara menyebabkan proksi menyematkan sesi. Dengan begitu, konten tabel sementara dipertahankan sepanjang sesi, terlepas dari batasan transaksi.

  • Memanggil ROW_COUNT dan FOUND_ROWS fungsi terkadang menyebabkan penyematan.

  • Pernyataan yang disiapkan menyebabkan proksi menyematkan sesi. Aturan ini berlaku terlepas dari apakah pernyataan yang disiapkan menggunakan teks SQL maupun protokol biner.

  • Proksi RDS tidak menyematkan koneksi saat Anda menggunakan SET LOCAL.

  • Memanggil prosedur tersimpan dan fungsi tersimpan tidak menyebabkan pinning. Proksi RDS tidak mendeteksi perubahan status sesi apa pun yang terjadi akibat perintah tersebut. Pastikan aplikasi Anda tidak mengubah status sesi di dalam rutinitas tersimpan jika Anda mengandalkan status sesi tersebut untuk bertahan di seluruh transaksi. Misalnya, Proxy RDS saat ini tidak kompatibel dengan prosedur tersimpan yang membuat tabel sementara yang bertahan di semua transaksi.

Jika memiliki pengetahuan mendalam tentang perilaku aplikasi, Anda dapat menangani perilaku penyematan untuk pernyataan aplikasi tertentu. Untuk melakukannya, pilih opsi Filter penyematan sesi saat membuat proksi. Saat ini, Anda dapat memilih untuk tidak menggunakan penyematan sesi untuk pengaturan variabel sesi dan pengaturan konfigurasi.

Kondisi yang menyebabkan penyematan untuk RDS for PostgreSQL

Untuk PostgreSQL, interaksi berikut juga menyebabkan penyematan:

  • Menggunakan SET perintah.

  • MenggunakanPREPARE,DISCARD,DEALLOCATE, atau EXECUTE perintah untuk mengelola pernyataan yang disiapkan.

  • Membuat urutan sementara, tabel, atau tampilan.

  • Mendeklarasikan kursor.

  • Membuang status sesi.

  • Mendengarkan di saluran notifikasi.

  • Memuat modul perpustakaan sepertiauto_explain.

  • Memanipulasi urutan menggunakan fungsi seperti nextval dan. setval

  • Berinteraksi dengan kunci menggunakan fungsi seperti pg_advisory_lock danpg_try_advisory_lock.

    catatan

    RDS Proxy tidak menyematkan kunci penasihat tingkat transaksi, khususnya,pg_advisory_xact_lock, pg_advisory_xact_lock_sharedpg_try_advisory_xact_lock, dan. pg_try_advisory_xact_lock_shared

  • Mengatur parameter, atau mengatur ulang parameter ke defaultnya. Secara khusus, menggunakan SET dan set_config perintah untuk menetapkan nilai default ke variabel sesi.

  • Memanggil prosedur tersimpan dan fungsi tersimpan tidak menyebabkan pinning. Proksi RDS tidak mendeteksi perubahan status sesi apa pun yang terjadi akibat perintah tersebut. Pastikan aplikasi Anda tidak mengubah status sesi di dalam rutinitas tersimpan jika Anda mengandalkan status sesi tersebut untuk bertahan di seluruh transaksi. Misalnya, Proxy RDS saat ini tidak kompatibel dengan prosedur tersimpan yang membuat tabel sementara yang bertahan di semua transaksi.