Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
DDL dan transaksi terdistribusi di Aurora DSQL
Bahasa definisi data (DDL) berperilaku berbeda di Aurora DSQL dari PostgreSQL. Aurora DSQL menampilkan lapisan database ter Multi-AZ distribusi dan tidak ada yang dibagikan yang dibangun di atas armada komputasi dan penyimpanan multi-tenant. Karena tidak ada node atau pemimpin database utama tunggal, katalog database didistribusikan. Dengan demikian, Aurora DSQL mengelola perubahan skema DDL sebagai transaksi terdistribusi.
Secara khusus, DDL berperilaku berbeda di Aurora DSQL sebagai berikut:
- Respons kontrol konkurensi
-
Karena katalog database didistribusikan, Aurora DSQL mengelola perubahan skema DDL sebagai transaksi terdistribusi yang memperbarui versi katalog. Sesi yang memiliki salinan katalog yang di-cache pada versi sebelumnya dapat menerima respons kontrol konkurensi dengan kode SQLSTATE
40001dan kode OCCOC001saat berikutnya berinteraksi dengan penyimpanan.Misalnya, pertimbangkan urutan tindakan berikut:
-
Di sesi 1, pengguna menambahkan kolom ke tabel
mytable. Ini memperbarui versi katalog. -
Di sesi 2, pengguna mencoba menyisipkan baris ke
mytable. Sesi ini masih memiliki versi katalog sebelumnya yang di-cache.Aurora DSQL kembali
SQL Error [40001]: ERROR: schema has been updated by another transaction (OC001).
catatan
Respons OC001 juga dapat terjadi ketika perubahan skema telah selesai sebelum transaksi yang terpengaruh dimulai. Prosesor kueri Aurora DSQL menemukan perubahan katalog secara reaktif selama eksekusi kueri, sehingga sesi yang tidak aktif mungkin masih beroperasi dengan versi katalog basi. Pada percobaan ulang, sesi menyegarkan cache katalognya dan transaksi biasanya berhasil.
-
- DDL dan DML dalam transaksi yang sama
-
Transaksi di Aurora DSQL hanya dapat berisi satu pernyataan DDL dan tidak dapat memiliki pernyataan DDL dan DML. Pembatasan ini berarti Anda tidak dapat membuat tabel dan memasukkan data ke dalam tabel yang sama dalam transaksi yang sama. Misalnya, Aurora DSQL mendukung transaksi berurutan berikut.
BEGIN; CREATE TABLE mytable (ID_col integer); COMMIT; BEGIN; INSERT into FOO VALUES (1); COMMIT;Aurora DSQL tidak mendukung transaksi berikut, yang mencakup keduanya
CREATEdanINSERTpernyataan.BEGIN; CREATE TABLE FOO (ID_col integer); INSERT into FOO VALUES (1); COMMIT; - DDL asinkron
-
Dalam PostgreSQL standar, operasi DDL seperti meng
CREATE INDEXunci tabel yang terpengaruh, membuatnya tidak tersedia untuk membaca dan menulis dari sesi lain. Di Aurora DSQL, pernyataan DDL ini berjalan secara asinkron menggunakan pengelola latar belakang. Akses ke tabel yang terpengaruh tidak diblokir. Dengan demikian, DDL pada tabel besar dapat berjalan tanpa downtime atau dampak kinerja. Untuk informasi selengkapnya tentang manajer pekerjaan asinkron di Aurora DSQL, lihat. Indeks asinkron di Aurora DSQL