View a markdown version of this page

DDL dan transaksi terdistribusi di Aurora DSQL - Amazon Aurora DSQL

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 40001 dan kode OCC OC001 ketika mereka selanjutnya berinteraksi dengan penyimpanan.

Misalnya, pertimbangkan urutan tindakan berikut:

  1. Di sesi 1, pengguna menambahkan kolom ke tabelmytable. Ini memperbarui versi katalog.

  2. Di sesi 2, pengguna mencoba menyisipkan baris ke dalammytable. 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. CREATE INSERT

BEGIN; CREATE TABLE FOO (ID_col integer); INSERT into FOO VALUES (1); COMMIT;
DDL asinkron

Dalam PostgreSQL standar, operasi DDL CREATE INDEX seperti 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