Tingkat isolasi di Amazon Redshift - Amazon Redshift

Amazon Redshift tidak akan lagi mendukung pembuatan Python UDFs baru mulai 1 November 2025. Jika Anda ingin menggunakan Python UDFs, buat UDFs sebelum tanggal tersebut. Python yang ada UDFs akan terus berfungsi seperti biasa. Untuk informasi lebih lanjut, lihat posting blog.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Tingkat isolasi di Amazon Redshift

Operasi penulisan bersamaan didukung di Amazon Redshift dengan cara protektif, menggunakan kunci tulis pada tabel dan prinsip isolasi serial. Isolasi serializable mempertahankan ilusi bahwa transaksi yang berjalan melawan tabel adalah satu-satunya transaksi yang berjalan melawan tabel itu.

Basis data Amazon Redshift mendukung operasi penulisan bersamaan dengan meminta setiap operasi menggunakan versi komit terbaru, atau snapshot, dari data mereka pada awal transaksi. Sebuah snapshot database dibuat dalam transaksi pada kemunculan pertama dari sebagian besar pernyataan SELECT, perintah DMLseperti COPY, DELETE, INSERT, UPDATE, dan TRUNCATE, dan perintah DDL berikut:

  • ALTER TABLE (untuk menambah atau menjatuhkan kolom)

  • CREATE TABLE

  • MEJA DROP

  • MEMOTONG TABEL

Tidak ada transaksi lain yang dapat mengubah snapshot ini, yang berarti transaksi terisolasi satu sama lain. Artinya, transaksi bersamaan tidak terlihat satu sama lain dan tidak dapat mendeteksi perubahan satu sama lain.

Eksekusi transaksi bersamaan harus menghasilkan hasil yang sama dengan eksekusi serial dari transaksi tersebut. Jika tidak ada eksekusi serial dari transaksi tersebut yang dapat menghasilkan hasil yang sama, transaksi yang menjalankan pernyataan yang mungkin merusak kemampuan untuk membuat serial dihentikan dan dibatalkan.

Misalnya, pengguna mencoba menjalankan dua transaksi bersamaan, T1 dan T2. Menjalankan T1 dan T2 harus menghasilkan hasil yang sama dengan setidaknya salah satu skenario berikut:

  • T1 dan T2 berjalan secara serial dalam urutan itu.

  • T2 dan T1 berjalan secara serial dalam urutan itu.

Tingkat isolasi di Amazon Redshift mencegah masalah berikut:

  • Pembacaan kotor - Pembacaan kotor terjadi ketika transaksi membaca data yang belum dilakukan. Misalnya, transaksi 1 memperbarui baris. Transaksi 2 membaca baris yang diperbarui sebelum T1 melakukan pembaruan. Jika T1 mengembalikan perubahan, T2 akan membaca data dalam baris yang tidak terikat yang sekarang dianggap Amazon Redshift tidak pernah ada.

  • Pembacaan yang tidak dapat diulang - Pembacaan yang tidak dapat diulang terjadi ketika satu transaksi membaca baris yang sama dua kali tetapi mendapatkan data yang berbeda setiap kali. Misalnya, transaksi 1 membaca satu baris. Transaksi 2 memperbarui atau menghapus baris itu dan melakukan pembaruan atau penghapusan. Jika T1 membaca ulang baris, ia mengambil nilai baris yang berbeda atau menemukan bahwa baris telah dihapus.

  • Phantom adalah baris yang cocok dengan kriteria pencarian tetapi awalnya tidak terlihat. Misalnya, transaksi 1 membaca satu set baris yang memenuhi kriteria pencariannya. Transaksi 2 menghasilkan baris baru dalam pernyataan UPDATE atau INSERT yang cocok dengan kriteria pencarian untuk T1. Jika T1 menjalankan kembali pernyataan pencariannya, ia mendapat serangkaian baris yang berbeda.

Isolasi SNAPSHOT dan SERIALIZABLE

Isolasi SNAPSHOT dan SERIALIZABLE adalah dua tingkat isolasi serial yang tersedia di Amazon Redshift.

Isolasi SNAPSHOT adalah tingkat isolasi default saat membuat cluster yang disediakan dan grup kerja tanpa server, memungkinkan Anda memproses volume data yang lebih besar daripada isolasi SERIALIZABLE dalam waktu yang lebih singkat.

Isolasi SERIALIZABLE membutuhkan lebih banyak waktu, tetapi menerapkan batasan yang lebih ketat pada transaksi bersamaan. Tingkat isolasi ini mencegah masalah seperti anomali write-skew dengan hanya mengizinkan satu transaksi untuk dilakukan, sementara membatalkan semua transaksi bersamaan lainnya dengan kesalahan pelanggaran isolasi serializable.

Berikut ini adalah contoh timeline tentang bagaimana dua operasi penulisan bersamaan akan ditangani saat menggunakan isolasi SNAPSHOT. Setiap pernyataan UPDATE pengguna diizinkan untuk melakukan komit karena mereka tidak bertentangan dengan mencoba memperbarui baris yang sama.

Waktu Pengguna 1 tindakan Tindakan Pengguna 2
1 MULAI;
2 MULAI;
3 PILIH * DARI Angka;

digits
------
0
1
4 PILIH * DARI Angka;

digits
------
0
1
5 UPDATE Nomor SET digit = 0 DIMANA digit = 1;
6 PILIH * DARI Angka;

digits
------
0
0
7 BERKOMITMEN;
8 Perbarui Nomor SET digit = 1 WHERE digit = 0;
9 PILIH * DARI Angka;

digits
------
1
1
10 BERKOMITMEN;
11 PILIH * DARI Angka;

digits
------
1
0
12 PILIH * DARI Angka;

digits
------
1
0

Jika skenario yang sama dijalankan menggunakan isolasi yang dapat diserialisasi, Amazon Redshift menghentikan pengguna 2 karena pelanggaran serial dan mengembalikan kesalahan. 1023 Untuk informasi selengkapnya, lihat Memecahkan masalah kesalahan isolasi serial. Dalam hal ini, hanya pengguna 1 yang dapat melakukan komit dengan sukses.

Pertimbangan-pertimbangan

Saat menggunakan tingkat isolasi di Amazon Redshift, pertimbangkan hal berikut:

  • Kueri tampilan katalog STV_DB_ISOLATION_LEVEL untuk melihat tingkat isolasi yang digunakan database Anda. Untuk informasi selengkapnya, lihat STV_DB_ISOLASI_TINGKAT.

  • Kueri tampilan PG_DATABASE_INFO untuk melihat berapa banyak transaksi bersamaan yang didukung untuk database Anda. Untuk informasi selengkapnya, lihat PG_DATABASE_INFO.

  • Tabel katalog sistem (PG) dan tabel sistem Amazon Redshift lainnya tidak terkunci dalam transaksi. Oleh karena itu, perubahan pada objek database yang muncul dari operasi DDL dan TRUNCATE terlihat pada komit untuk setiap transaksi bersamaan.

    Misalnya, anggaplah tabel A ada dalam database ketika dua transaksi bersamaan, T1 dan T2, dimulai. Misalkan T2 mengembalikan daftar tabel dengan memilih dari tabel katalog PG_TABLES. Kemudian T1 menjatuhkan tabel A dan komit, lalu T2 mencantumkan tabel lagi. Tabel A sekarang tidak lagi terdaftar. Jika T2 mencoba menanyakan tabel yang dijatuhkan, Amazon Redshift mengembalikan kesalahan “relasi tidak ada”. Kueri katalog yang mengembalikan daftar tabel ke T2 atau memeriksa bahwa tabel A ada tidak tunduk pada aturan isolasi yang sama seperti operasi yang dilakukan pada tabel pengguna.

    Transaksi untuk pembaruan tabel ini berjalan dalam mode isolasi komited baca.

  • Tabel katalog awalan PG tidak mendukung isolasi SNAPSHOT.