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
, danSHOWPLAN_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
, atauFLUSH 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
danFOUND_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. -
Menggunakan
PREPARE
,DISCARD
,DEALLOCATE
, atauEXECUTE
perintah untuk mengelola pernyataan yang disiapkan. -
Membuat urutan sementara, tabel, atau tampilan.
-
Mendeklarasikan kursor.
-
Membuang status sesi.
-
Mendengarkan di saluran notifikasi.
-
Memuat modul perpustakaan seperti
auto_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_shared
pg_try_advisory_xact_lock
, dan.pg_try_advisory_xact_lock_shared
-
Mengatur parameter, atau mengatur ulang parameter ke defaultnya. Secara khusus, menggunakan
SET
danset_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.