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 hal ini, RDS Proxy dapat menggunakan kembali koneksi pada akhir setiap transaksi. Contoh informasi status tersebut mencakup sebagian besar variabel dan parameter konfigurasi yang dapat diubah melalui pernyataan SET atau SELECT. SQLtransaksi pada koneksi klien dapat multipleks antara koneksi basis data yang mendasarinya secara default.

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.

RDSProxy secara otomatis menyematkan koneksi klien ke koneksi DB tertentu ketika mendeteksi perubahan status sesi yang tidak sesuai untuk sesi lain. 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. Jadi, ketika RDS Proxy memproses permintaan untuk mengubah variabel sesi atau pengaturan konfigurasi, itu menyematkan sesi itu 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. RDSProxy melacak pernyataan dan variabel tertentu. Dengan demikian, RDS Proxy tidak menyematkan sesi saat Anda memodifikasinya. Dalam hal ini, RDS Proxy hanya menggunakan kembali koneksi untuk sesi lain yang memiliki nilai yang sama untuk pengaturan tersebut. Untuk detail tentang apa yang dilacak RDS Proxy untuk mesin database, lihat berikut ini: , lihat. Apa yang dilacak RDS Proxy RDS untuk MariaDB RDS dan untuk database Saya SQL

Apa trek RDS Proxy RDS untuk database SQL Server

Berikut ini adalah pernyataan SQL Server yang dilacak RDS Proxy:

  • 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 RDS Proxy RDS untuk MariaDB RDS dan untuk database Saya SQL

Berikut ini adalah pernyataan RDS MariaDB dan SQL My yang dilacak Proxy:

  • DROP DATABASE

  • DROP SCHEMA

  • USE

Berikut ini adalah variabel RDS My SQL dan MariaDB yang dilacak Proxy:

  • 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

Meminimalkan penyematan

Penyetelan kinerja untuk RDS Proxy melibatkan 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.

    Namun, untuk SQL pengaturan Postgre variabel mengarah ke penyematan sesi.

  • Untuk database keluarga SQL mesin Saya, terapkan filter penyematan sesi ke proxy. 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 lebih SQL pernyataan, dipisahkan oleh titik koma.

    Misalnya, Anda dapat menentukan kueri inisialisasi untuk proksi yang menetapkan parameter konfigurasi tertentu. Kemudian, RDS Proxy menerapkan pengaturan tersebut setiap kali menyiapkan koneksi baru untuk proxy itu. 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 RDS untuk Microsoft Server SQL

Untuk RDS untuk SQL Server, interaksi berikut juga menyebabkan penyematan:

  • Menggunakan beberapa set hasil aktif (MARS). Untuk selengkapnyaMARS, lihat dokumentasi SQLServer.

  • 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 pin untuk RDS MariaDB dan RDS untuk My SQL

Untuk MariaDB dan SQL My, interaksi berikut juga 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.

  • Menetapkan variabel pengguna atau variabel sistem (dengan beberapa pengecualian) menyebabkan proksi menyematkan sesi. Jika situasi ini terlalu banyak mengurangi frekuensi penggunaan kembali koneksi Anda, pilih operasi SET agar tidak menyebabkan penyematan. Untuk informasi tentang cara melakukannya dengan mengatur properti filter penyematan sesi, lihat Membuat RDS Proxy dan Memodifikasi Proxy RDS.

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

  • Memanggil fungsi ROW_COUNT, FOUND_ROWS, dan LAST_INSERT_ID terkadang menyebabkan penyematan.

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

  • RDSProxy tidak menyematkan koneksi saat Anda menggunakan SETLOCAL.

  • Memanggil prosedur tersimpan dan fungsi tersimpan tidak menyebabkan pinning. RDSProxy tidak mendeteksi perubahan status sesi apa pun yang dihasilkan dari panggilan tersebut. Pastikan aplikasi Anda tidak mengubah status sesi di dalam rutinitas tersimpan jika Anda mengandalkan status sesi tersebut untuk bertahan di seluruh transaksi. Misalnya, RDS Proxy 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 pin RDS untuk Postgre SQL

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

    RDSProxy tidak menyematkan kunci penasihat tingkat transaksi, khususnyapg_advisory_xact_lock,, pg_advisory_xact_lock_sharedpg_try_advisory_xact_lock, danpg_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. RDSProxy tidak mendeteksi perubahan status sesi apa pun yang dihasilkan dari panggilan tersebut. Pastikan aplikasi Anda tidak mengubah status sesi di dalam rutinitas tersimpan jika Anda mengandalkan status sesi tersebut untuk bertahan di seluruh transaksi. Misalnya, RDS Proxy saat ini tidak kompatibel dengan prosedur tersimpan yang membuat tabel sementara yang bertahan di semua transaksi.