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 memiliki lapisan database multi-AZ yang didistribusikan dan tidak dibagikan yang dibangun di atas armada komputasi dan penyimpanan multi-tenant. Karena tidak ada satu pun node atau pemimpin basis data utama yang ada, 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 cache katalog pada versi sebelumnya dapat menerima respons kontrol konkurensi dengan kode SQLSTATE
40001dan kode OCCOC001ketika mereka selanjutnya 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 dalam
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
OC001 Respons 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 telah menganggur mungkin masih beroperasi dengan versi katalog basi. Saat mencoba lagi, 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 DHTML. Pembatasan ini berarti Anda tidak dapat membuat tabel dan menyisipkan 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 dan pernyataan.
CREATEINSERTBEGIN; CREATE TABLE FOO (ID_col integer); INSERT into FOO VALUES (1); COMMIT; - DDL asinkron
-
Dalam PostgreSQL standar, operasi DDL
CREATE INDEXseperti mengunci tabel yang terpengaruh, membuatnya tidak tersedia untuk dibaca dan ditulis 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