Tabel temporal versi sistem dengan tabel memori yang dioptimalkan
Berlaku untuk: SQL Server 2016 (13.x) dan Azure SQL Database Azure SQL Managed Instance yang lebih baru
Tabel temporal versi sistem untuk tabel yang dioptimalkan memori memberikan solusi hemat biaya untuk skenario di mana audit data dan analisis titik waktu diperlukan di atas data yang dikumpulkan dengan beban kerja OLTP Dalam Memori.
Gambaran Umum
Tabel temporal versi sistem secara otomatis menyimpan riwayat lengkap perubahan data, dan mengekspos ekstensi Transact-SQL yang nyaman untuk analisis titik waktu. Dalam skenario umum, riwayat data dipertahankan untuk jangka waktu yang lama (beberapa bulan, bahkan bertahun-tahun), meskipun tidak dikueri secara teratur.
Audit data dan analisis berbasis waktu dapat diminta di lingkungan yang berbeda, terutama dalam sistem OLTP yang memproses sejumlah besar permintaan dan di mana teknologi OLTP Dalam Memori digunakan. Namun, menggunakan tabel memori yang dioptimalkan dalam skenario temporal sangat menantang karena sejumlah besar data historis yang dihasilkan biasanya melebihi batas RAM yang tersedia. Pada saat yang sama, menggunakan RAM untuk menyimpan data historis baca-saja yang diakses lebih jarang karena menjadi lebih lama, bukanlah solusi optimal.
Tabel temporal versi sistem untuk tabel yang dioptimalkan memori memberikan throughput transaksional tinggi, dan konkurensi bebas kunci. Mereka memberi Anda kemampuan untuk menyimpan sejumlah besar data riwayat dengan menggunakan tabel dalam memori untuk menyimpan data saat ini (tabel temporal), dan tabel berbasis disk untuk data historis. Efek pada operasi DML dikurangi dengan menggunakan tabel penahapan internal yang dioptimalkan memori otomatis yang menyimpan riwayat terbaru, dan memungkinkan DML dijalankan dari kode yang dikompilasi secara asli.
Diagram berikut mengilustrasikan arsitektur ini.
Detail implementasi
Saat Anda membuat tabel yang dioptimalkan memori versi sistem, ketahui pertimbangan berikut. Untuk opsi sintaks dan misalnya, lihat CREATE TABLE.
Hanya tabel yang dioptimalkan memori tahan lama yang dapat di-versi sistem (
DURABILITY = SCHEMA_AND_DATA
).Tabel riwayat untuk tabel versi sistem yang dioptimalkan memori harus berbasis disk, baik itu dibuat oleh pengguna akhir atau sistem.
Kueri yang hanya memengaruhi tabel dalam memori saat ini yang dapat digunakan dalam modul T-SQL yang dikompilasi secara asli. Kueri temporal menggunakan
FOR SYSTEM TIME
klausul tidak didukung dalam modul yang dikompilasi secara asli. KlausaFOR SYSTEM TIME
ini didukung dengan tabel yang dioptimalkan memori dalam kueri ad hoc dan modul non-asli.Dengan
SYSTEM_VERSIONING = ON
, tabel penahapan internal yang dioptimalkan memori secara otomatis dibuat untuk menerima perubahan versi sistem terbaru, yang merupakan hasil operasi pembaruan dan penghapusan pada tabel yang dioptimalkan memori saat ini.Data dari tabel penahapan internal yang dioptimalkan memori secara teratur dipindahkan ke tabel riwayat berbasis disk oleh tugas flush data asinkron. Mekanisme flush data ini menjaga buffer memori internal kurang dari 10 persen dari konsumsi memori objek induknya. Anda dapat melacak total konsumsi memori tabel temporal versi sistem yang dioptimalkan memori dengan mengkueri sys.dm_db_xtp_memory_consumers, dan meringkas data untuk tabel penahapan internal yang dioptimalkan memori dan tabel temporal saat ini.
Anda dapat menjalankan flush data secara manual dengan menjalankan sp_xtp_flush_temporal_history.
Dengan
SYSTEM_VERSIONING = OFF
, atau ketika skema tabel versi sistem dimodifikasi dengan menambahkan, menghilangkan, atau mengubah kolom, seluruh konten buffer penahapan internal dipindahkan ke dalam tabel riwayat berbasis disk.Kueri data historis secara efektif di bawah tingkat isolasi rekam jepret, dan selalu mengembalikan penyatuan antara buffer penahapan dalam memori dan tabel berbasis disk tanpa duplikat.
ALTER TABLE
operasi yang mengubah skema tabel secara internal harus melakukan flush data, yang mungkin memperpanjang durasi operasi.
Tabel penahapan memori internal yang dioptimalkan
Sistem membuat tabel penahapan internal yang dioptimalkan memori untuk mengoptimalkan operasi DML.
Nama tabel dihasilkan dalam format berikut:
Memory_Optimized_History_Table_<object_id>
di mana<object_id>
adalah pengidentifikasi tabel temporal saat ini.Tabel mereplikasi skema tabel temporal saat ini ditambah satu kolom bigint . Kolom tambahan ini menjamin keunikan baris yang dipindahkan ke buffer riwayat internal.
Kolom tambahan memiliki format nama berikut:
Change_ID[<suffix>]
, di mana<suffix>
secara opsional ditambahkan dalam kasus di mana tabel sudah memilikiChange_ID
kolom.Ukuran baris maksimum untuk tabel yang dioptimalkan memori versi sistem dikurangi 8 byte karena kolom ekstra besar dalam tabel penahapan. Maksimum baru sekarang adalah 8.052 byte.
Tabel penahapan memori internal yang dioptimalkan tidak diwakili di Object Explorer dari SQL Server Management Studio.
Metadata tentang tabel ini, dan koneksinya dengan tabel temporal saat ini, dapat ditemukan di sys.internal_tables.
Tugas flush data
Flush data adalah tugas yang diaktifkan secara teratur yang memeriksa apakah tabel yang dioptimalkan memori memenuhi kondisi berbasis ukuran memori untuk pergerakan data. Pergerakan data dimulai ketika konsumsi memori tabel penahapan internal mencapai delapan persen dari konsumsi memori tabel temporal saat ini.
Tugas flush data diaktifkan secara teratur dengan jadwal yang bervariasi berdasarkan beban kerja yang ada. Dengan beban kerja yang berat, tugas berjalan sesering setiap 5 detik. Dengan beban kerja ringan, frekuensi naik ke setiap menit. Satu utas diluapkan untuk setiap tabel penahapan internal yang dioptimalkan memori yang membutuhkan pembersihan.
Flush data menghapus semua rekaman dari buffer internal dalam memori yang lebih lama dari transaksi terlama yang saat ini berjalan untuk memindahkan rekaman ini ke tabel riwayat berbasis disk.
Anda dapat menjalankan flush data dengan menjalankan sp_xtp_flush_temporal_history
dan menentukan skema dan nama tabel:
EXEC sys.sp_xtp_flush_temporal_history <schema_name>, <object_name>;
Proses pergerakan data yang sama dipanggil seperti ketika sistem menjalankan tugas flush data pada jadwal internalnya.
Konten terkait
- Tabel temporal
- Mulai menggunakan tabel temporal versi sistem
- Skenario penggunaan tabel temporal
- Pemeriksaan konsistensi sistem tabel temporal
- Partisi dengan tabel temporal
- Pertimbangan dan batasan tabel temporal
- Keamanan tabel temporal
- Mengelola retensi data historis dalam tabel temporal versi sistem
- Tampilan dan fungsi metadata tabel temporal