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
, danSHOWPLAN_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
, atauFLUSH 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
, danLAST_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. -
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
RDSProxy tidak menyematkan kunci penasihat tingkat transaksi, khususnya
pg_advisory_xact_lock
,,pg_advisory_xact_lock_shared
pg_try_advisory_xact_lock
, danpg_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. 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.