Statistik untuk Tabel yang Dioptimalkan Memori

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Pengoptimal kueri menggunakan statistik tentang kolom untuk membuat rencana kueri yang meningkatkan performa kueri. Statistik dikumpulkan dari tabel dalam database dan disimpan dalam metadata database.

Statistik dibuat secara otomatis, tetapi juga dapat dibuat secara manual. Misalnya, statistik dibuat secara otomatis untuk kolom kunci indeks saat indeks dibuat. Untuk informasi selengkapnya tentang membuat statistik, lihat Statistik.

Data tabel biasanya berubah seiring waktu saat baris disisipkan, diperbarui, dan dihapus. Ini berarti statistik perlu diperbarui secara berkala. Secara default, statistik pada tabel diperbarui secara otomatis saat pengoptimal kueri menentukan statistik tersebut mungkin kedaluarsa.

Pertimbangan untuk statistik pada tabel yang dioptimalkan memori:

  • Mulai dari SQL Server 2016 dan di Azure SQL Database, pembaruan statistik otomatis didukung untuk tabel yang dioptimalkan memori, saat menggunakan tingkat kompatibilitas database setidaknya 130. Lihat MENGUBAH Tingkat Kompatibilitas DATABASE (Transact-SQL). Jika database memiliki tabel yang sebelumnya dibuat menggunakan tingkat kompatibilitas yang lebih rendah, statistik perlu diperbarui secara manual sekali, untuk mengaktifkan pembaruan statistik otomatis ke depannya.

  • Untuk prosedur tersimpan yang dikompilasi secara asli, rencana eksekusi untuk kueri dalam prosedur dioptimalkan ketika prosedur dikompilasi, yang terjadi pada waktu pembuatan. Mereka tidak dikompresi ulang secara otomatis ketika statistik diperbarui. Oleh karena itu, tabel harus berisi sekumpulan data yang representatif sebelum prosedur dibuat.

  • Prosedur tersimpan yang dikompilasi secara asli dapat dikompilasi ulang secara manual menggunakan sp_recompile (Transact-SQL), dan mereka secara otomatis dikompilasi ulang jika database diambil offline dan dibawa kembali online, atau jika ada failover database atau restart server.

Mengaktifkan Pembaruan Statistik Otomatis dalam Tabel yang Ada

Saat tabel dibuat dalam database yang memiliki tingkat kompatibilitas setidaknya 130, pembaruan statistik otomatis diaktifkan untuk semua statistik pada tabel tersebut, dan tidak diperlukan tindakan lebih lanjut.

Jika database memiliki tabel yang dioptimalkan memori yang dibuat di versi SQL Server yang lebih lama atau di bawah tingkat kompatibilitas yang lebih rendah dari 130, statistik perlu diperbarui secara manual sekali untuk mengaktifkan pembaruan otomatis ke depannya.

Untuk mengaktifkan pembaruan statistik otomatis untuk tabel yang dioptimalkan memori yang dibuat di bawah tingkat kompatibilitas yang lebih lama, ikuti langkah-langkah berikut:

  1. Perbarui tingkat kompatibilitas database: ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL=130

  2. Perbarui statistik tabel yang dioptimalkan memori secara manual. Di bawah ini adalah contoh skrip yang melakukan hal yang sama.

  3. Kompilasi ulang prosedur tersimpan yang dikompilasi secara manual untuk mendapatkan manfaat dari statistik yang diperbarui.

Skrip satu kali untuk statistik: Untuk tabel yang dioptimalkan memori yang dibuat di bawah tingkat kompatibilitas yang lebih rendah, Anda dapat menjalankan skrip Transact-SQL berikut satu kali untuk memperbarui statistik semua tabel yang dioptimalkan memori, dan mengaktifkan pembaruan statistik otomatis sejak saat itu dan seterusnya (dengan asumsi AUTO_UPDATE_STATISTICS diaktifkan untuk database):

-- Assuming AUTO_UPDATE_STATISTICS is already ON for your database:
-- ALTER DATABASE CURRENT SET AUTO_UPDATE_STATISTICS ON;

ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 130;
GO
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT
      @sql += N'UPDATE STATISTICS '
         + quotename(schema_name(t.schema_id))
         + N'.'
         + quotename(t.name)
         + ';' + CHAR(13) + CHAR(10)
   FROM sys.tables AS t
   WHERE t.is_memory_optimized = 1 AND 
		t.object_id IN (SELECT object_id FROM sys.stats WHERE no_recompute=1)
;
EXECUTE sp_executesql @sql;
GO
-- Each row appended to @sql looks roughly like:
-- UPDATE STATISTICS [dbo].[MyMemoryOptimizedTable];

Pastikan pembaruan otomatis diaktifkan: Skrip berikut memverifikasi apakah pembaruan otomatis diaktifkan untuk statistik pada tabel yang dioptimalkan memori. Setelah menjalankan skrip sebelumnya, skrip akan kembali 1 di kolom auto-update enabled untuk semua objek statistik.

SELECT 
	quotename(schema_name(o.schema_id)) + N'.' + quotename(o.name) AS [table],
	s.name AS [statistics object],
	1-s.no_recompute AS [auto-update enabled]
FROM sys.stats s JOIN sys.tables o ON s.object_id=o.object_id
WHERE o.is_memory_optimized=1

Panduan untuk Menyebarkan Tabel dan Prosedur

Untuk memastikan bahwa pengoptimal kueri memiliki statistik terbaru saat membuat rencana kueri, sebarkan tabel yang dioptimalkan memori dan prosedur tersimpan yang dikompilasi secara asli yang mengakses tabel ini menggunakan empat langkah ini:

  1. Pastikan database memiliki tingkat kompatibilitas setidaknya 130. Lihat MENGUBAH Tingkat Kompatibilitas DATABASE (Transact-SQL).

  2. Membuat tabel dan indeks. Indeks harus ditentukan sebaris dalam pernyataan CREATE TABLE .

  3. Muat data ke dalam tabel.

  4. Buat prosedur tersimpan yang mengakses tabel.

Membuat prosedur tersimpan yang dikompilasi secara asli setelah Anda memuat data memastikan bahwa pengoptimal memiliki statistik yang tersedia untuk tabel yang dioptimalkan memori. Ini akan memastikan rencana kueri yang efisien saat prosedur dikompilasi.

Lihat Juga

Tabel yang Dioptimalkan Memori