Mengoptimalkan performa dengan menggunakan teknologi dalam memori di Azure SQL Managed Instance

Berlaku untuk:Azure SQL Managed Instance

Teknologi dalam memori memungkinkan Anda meningkatkan performa aplikasi Anda, dan berpotensi mengurangi biaya instans terkelola SQL Anda. OLTP dalam memori tersedia di tingkat layanan Business Critical dari Azure SQL Managed Instance.

Kapan menggunakan teknologi dalam memori

Dengan menggunakan teknologi dalam memori, Anda dapat mencapai peningkatan performa dalam berbagai beban kerja:

  • Transaksional (pemrosesan transaksional online (OLTP)) di mana sebagian besar permintaan membaca atau memperbarui kumpulan data yang lebih kecil, misalnya, operasi buat/baca/perbarui/hapus (CRUD).
  • Analitik (pemrosesan analitik online (OLAP)) di mana sebagian besar kueri memiliki perhitungan kompleks untuk tujuan pelaporan, dan juga proses terjadwal secara teratur yang melakukan operasi pemuatan (atau beban massal) dan/atau menulis perubahan data ke tabel yang ada. Seringkali, beban kerja OLAP diperbarui secara berkala dari beban kerja OLTP.
  • Campuran (transaksi hibrida/pemrosesan analitik (HTAP)) yang kueri OLTP dan OLAP dijalankan pada set data yang sama.

Teknologi dalam memori dapat meningkatkan performa beban kerja tersebut dengan menyimpan data yang harus diproses ke dalam memori, menggunakan kompilasi asli kueri, atau pemrosesan lanjutan seperti pemrosesan batch dan instruksi SIMD yang tersedia pada perangkat keras yang mendasarinya.

Gambaran Umum

Azure SQL Managed Instance mendukung teknologi dalam memori berikut:

  • OLTP dalam memori meningkatkan jumlah transaksi per detik dan mengurangi latensi untuk pemrosesan transaksi. Skenario yang mendapat manfaat dari OLTP dalam memori adalah: pemrosesan transaksi throughput tinggi seperti perdagangan dan game, penyerapan data dari peristiwa atau perangkat IoT, penembolokan, beban data, dan skenario tabel sementara dan variabel tabel.
  • Indeks penyimpan kolom berkluster mengurangi jejak penyimpanan Anda (hingga 10 kali) dan meningkatkan performa untuk melaporkan dan kueri analitik. Anda dapat menggunakannya dengan tabel fakta di pasar data Anda agar pas dengan lebih banyak data dalam database Anda dan meningkatkan performa. Selain itu, Anda dapat menggunakannya dengan data riwayat dalam database operasional Anda untuk mengarsipkan dan dapat mengkueri hingga 10 kali lebih banyak data.
  • Indeks penyimpan kolom tidak berkluster untuk HTAP membantu Anda memperoleh wawasan real time ke dalam bisnis Anda melalui kueri database operasional secara langsung, tanpa perlu menjalankan proses ekstrak, transformasi, serta pemuatan (ETL) yang mahal dan menunggu agar gudang data diisi. Indeks penyimpan kolom tidak berkluster memungkinkan eksekusi cepat kueri analitik pada database OLTP, sekaligus mengurangi dampak pada beban kerja operasional.
  • Indeks penyimpan kolom berkluster yang dengan memori dioptimalkan untuk HTAP memungkinkan Anda melakukan pemrosesan transaksi cepat, dan untuk menjalankan kueri analitik secara bersamaan dengan sangat cepat pada data yang sama.

Indeks penyimpan kolom dan OLTP dalam memori masing-masing diperkenalkan ke SQL Server pada tahun 2012 dan 2014. Azure SQL Database, Azure SQL Managed Instance, dan SQL Server memiliki penerapan teknologi dalam memori yang sama.

Catatan

Untuk tutorial langkah demi langkah terperinci untuk menunjukkan keunggulan performa teknologi OLTP dalam memori, menggunakan AdventureWorksLT database sampel dan ostress.exe, lihat Sampel dalam memori di Azure SQL Managed Instance.

Keuntungan teknologi dalam memori

Karena kueri dan pemrosesan transaksi yang lebih efisien, teknologi dalam memori juga membantu Anda mengurangi biaya. Setelah berada di tingkat layanan Business Critical dari Azure SQL Managed Instance, Anda biasanya tidak perlu meningkatkan instans terkelola SQL untuk mencapai perolehan performa. Dalam beberapa kasus, Anda bahkan mungkin dapat mengurangi tingkat harga, sambil tetap melihat peningkatan performa dengan teknologi dalam memori.

Artikel ini menjelaskan aspek indeks OLTP dan penyimpan kolom dalam memori yang khusus untuk Azure SQL Managed Instance, dan juga mencakup sampel:

  • Anda akan melihat dampak teknologi tersebut pada batas penyimpanan dan ukuran data.
  • Anda akan melihat cara mengelola pergerakan database yang menggunakan teknologi tersebut di antara berbagai tingkat harga.
  • Anda akan melihat dua sampel yang mengilustrasikan penggunaan OLTP dalam memori, serta indeks penyimpan kolom.

Untuk informasi selengkapnya tentang OLTP dalam memori di SQL Server, lihat:

OLTP dalam memori

Teknologi OLTP dalam memori menyediakan operasi akses data yang sangat cepat dengan menyimpan semua data dalam memori. Ini juga menggunakan indeks khusus, kompilasi kueri asli, dan akses data bebas latch untuk meningkatkan performa beban kerja OLTP. Ada dua cara untuk mengatur data OLTP dalam memori Anda:

  • Format rowstore dengan memori dioptimalkan yang setiap barisnya adalah objek memori terpisah. Ini adalah format OLTP dalam memori klasik yang dioptimalkan untuk beban kerja OLTP berkinerja tinggi. Ada dua jenis tabel dengan memori dioptimalkan yang dapat digunakan dalam format rowstore dengan memori dioptimalkan:

    • Tabel yang tahan lama (SCHEMA_AND_DATA) di mana baris yang ditempatkan dalam memori dipertahankan setelah menghidupkan ulang server. Jenis tabel ini befungsi seperti tabel rowstore tradisional dengan keuntungan tambahan dari pengoptimalan dalam memori.
    • Tabel yang tidak dapat ditahan (SCHEMA_ONLY) di mana baris tidak dipertahankan setelah dihidupkan ulang. Jenis tabel ini didesain untuk data sementara (misalnya, penggantian tabel sementara), atau tabel di mana Anda perlu memuat data dengan cepat sebelum Anda memindahkannya ke beberapa tabel yang bertahan (disebut tabel penahapan).
  • Format penyimpan kolom dengan memori dioptimalkan yang datanya diatur dalam format kolom. Struktur ini dirancang untuk skenario HTAP di mana Anda perlu menjalankan kueri analitik pada struktur data yang sama saat beban kerja OLTP Anda berjalan.

Catatan

Teknologi OLTP dalam memori dirancang untuk struktur data yang dapat sepenuhnya berada dalam memori. Karena data Dalam memori tidak dapat dilepas ke disk, pastikan Anda menggunakan instans terkelola SQL yang memiliki memori yang cukup. Untuk informasi selengkapnya, lihat Ukuran data dan batas penyimpanan untuk OLTP dalam memori.

Ukuran data dan batas penyimpanan untuk OLTP dalam memori

OLTP dalam memori mencakup tabel yang dioptimalkan memori, yang digunakan untuk menyimpan data pengguna. Tabel tersebut diperlukan agar pas dalam memori. Ide ini disebut sebagai penyimpanan OLTP dalam memori.

Tingkat layanan Business Critical mencakup sejumlah memori Max In-Memory OLTP, yang ditentukan oleh jumlah vCore.

Item berikut dihitung untuk batas penyimpanan OLTP dalam memori Anda:

  • Baris data pengguna aktif dalam tabel dengan memori dioptimalkan dan variabel tabel. Versi baris lama tidak dihitung terhadap batas.
  • Indeks pada tabel dengan memori dioptimalkan.
  • Overhead operasional operasi ALTER TABLE.

Jika Anda mencapai tutup, Anda menerima kesalahan di luar kuota, dan Anda tidak lagi dapat menyisipkan atau memperbarui data. Untuk mengurangi kesalahan ini, hapus data atau tingkatkan tingkat harga database atau kumpulan.

Untuk detail tentang memantau pemanfaatan penyimpanan OLTP dalam memori dan mengonfigurasi pemberitahuan saat Anda hampir mencapai batas, lihat Memantau penyimpanan dalam memori.

Mengubah konfigurasi perangkat keras atau jumlah vCore

Menurunkan konfigurasi perangkat keras atau jumlah vCore Anda dapat berdampak negatif pada instans terkelola SQL Anda.

Data dalam tabel yang dioptimalkan memori harus pas dalam batas penyimpanan OLTP dalam memori untuk konfigurasi perangkat keras dan jumlah vCore Anda. Jika Anda mencoba menurunkan skala ke pengaturan yang tidak memiliki cukup penyimpanan OLTP dalam memori, operasi gagal.

Menentukan apakah objek dalam memori ada

Ada cara terprogram untuk memahami apakah database tertentu dalam instans terkelola SQL Anda mendukung OLTP dalam memori. Anda dapat menjalankan kueri T-SQL berikut:

SELECT DatabasePropertyEx(DB_NAME(), 'IsXTPSupported');

Jika kueri mengembalikan 1, OLTP dalam memori didukung dalam database ini.

Kueri berikut mengidentifikasi semua objek menggunakan teknologi dalam memori:

SELECT * FROM sys.tables WHERE is_memory_optimized=1
SELECT * FROM sys.table_types WHERE is_memory_optimized=1
SELECT * FROM sys.sql_modules WHERE uses_native_compilation=1

Penyimpan kolom dalam memori

Teknologi penyimpan kolom dalam memori memungkinkan Anda untuk menyimpan dan mengkueri sejumlah besar data dalam tabel. Teknologi penyimpan kolom menggunakan format penyimpanan data berbasis kolom dan pemrosesan kueri batch untuk mencapai perolehan hingga 10 kali performa kueri dalam beban kerja OLAP melalui penyimpanan tradisional berorientasi baris. Anda juga dapat memperoleh keuntungan hingga 10 kali pemadatan data atas ukuran data yang tidak dipadatkan.

Ada dua jenis model penyimpan kolom yang bisa Anda gunakan untuk mengatur data Anda:

  • Penyimpan kolom berkluster yang semua datanya dalam tabel diatur dalam format kolom. Dalam model ini, semua baris dalam tabel ditempatkan dalam format kolom yang sangat memadatkan data dan memungkinkan Anda untuk menjalankan kueri dan laporan analitik cepat di tabel. Bergantung pada sifat data Anda, ukuran data Anda mungkin berkurang 10x-100x. Model penyimpan kolom berkluster juga memungkinkan penyerapan cepat data dalam jumlah besar (beban massal) karena batch besar data yang lebih besar dari 100.000 baris dikompresi sebelum disimpan di disk. Model ini adalah pilihan yang baik untuk skenario gudang data klasik.
  • Penyimpan kolom tidak berkluster di mana data disimpan dalam tabel rowstore tradisional dan ada indeks dalam format penyimpan kolom yang digunakan untuk kueri analitik. Model ini memungkinkan Transaksi Hibrida/Pemrosesan Analitik (HTAP): kemampuan untuk menjalankan analitik real time yang berperforma pada beban kerja transaksional. Kueri OLTP dijalankan pada tabel rowstore yang dioptimalkan untuk mengakses set kecil baris, sementara kueri OLAP dijalankan pada indeks penyimpan kolom yang merupakan pilihan yang lebih baik untuk pemindaian dan analitik. Pengoptimal kueri secara dinamis memilih format rowstore atau penyimpan kolom berdasarkan kueri. Indeks penyimpan kolom noncluster tidak mengurangi ukuran data karena himpunan data asli disimpan dalam tabel rowstore asli tanpa perubahan apa pun. Namun, ukuran indeks penyimpan kolom tambahan harus dalam urutan besarnya lebih kecil dari indeks pohon B yang setara.

Catatan

Teknologi penyimpan kolom dalam memori hanya menyimpan data yang diperlukan untuk diproses dalam memori, sementara data yang tidak dapat masuk ke dalam memori disimpan di disk. Oleh karena itu, jumlah data dalam struktur penyimpan kolom dalam memori dapat melebihi jumlah memori yang tersedia.

Ukuran dan penyimpanan data untuk indeks penyimpan kolom

Indeks penyimpan kolom tidak diperlukan agar pas dalam memori. Oleh karena itu, satu-satunya batas pada ukuran indeks adalah ukuran database keseluruhan maksimum. Untuk informasi selengkapnya, lihat Batas sumber daya Azure SQL Managed Instance. Azure SQL Managed Instance mendukung indeks penyimpan kolom di semua tingkatan.

Saat Anda menggunakan indeks penyimpan kolom berkluster, kompresi kolom digunakan untuk penyimpanan tabel dasar. Kompresi ini dapat secara signifikan mengurangi jejak penyimpanan data pengguna Anda, yang berarti Anda dapat memasukkan lebih banyak data dalam database. Dan kompresi tersebut dapat lebih ditingkatkan dengan kompresi arsip kolom. Jumlah kompresi yang dapat Anda capai tergantung pada sifat data, tetapi 10 kali kompresi tidaklah jarang.

Misalnya, jika Anda memiliki database dengan ukuran maksimum 1 terabyte (TB) dan Anda mencapai 10 kali kompresi dengan menggunakan indeks penyimpan kolom, Anda dapat memasukkan total 10 TB data pengguna dalam database.

Saat Anda menggunakan indeks penyimpan kolom tidak berkluster, tabel dasar masih disimpan dalam format rowstore tradisional. Oleh karena itu, penghematan penyimpanan tidak signifikan seperti indeks penyimpan kolom berkluster. Namun, jika Anda mengganti banyak indeks nonclustered tradisional dengan satu indeks penyimpan kolom, Anda masih dapat melihat penghematan keseluruhan dalam jejak penyimpanan untuk tabel.