Bagikan melalui


Statistik untuk Tabel Memory-Optimized

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 dari waktu ke waktu saat baris disisipkan, diperbarui, dan dihapus. Ini berarti statistik perlu diperbarui secara berkala. Secara default, statistik pada tabel berbasis disk diperbarui secara otomatis ketika pengoptimal menentukan statistik tersebut mungkin kedaluarsa.

Statistik pada tabel yang dioptimalkan memori tidak diperbarui secara default. Sebagai gantinya, Anda perlu memperbaruinya secara manual. Gunakan STATISTIK PEMBARUAN (Transact-SQL) untuk kolom, indeks, atau tabel individual. Gunakan sp_updatestats (Transact-SQL) untuk memperbarui statistik untuk semua tabel pengguna dan internal dalam database.

Saat menggunakan CREATE STATISTICS (Transact-SQL) atau UPDATE STATISTICS (Transact-SQL), Anda harus menentukan NORECOMPUTE untuk menonaktifkan pembaruan statistik otomatis untuk tabel yang dioptimalkan memori. Untuk tabel berbasis disk, sp_updatestats (Transact-SQL) hanya memperbarui statistik jika tabel telah dimodifikasi sejak sp_updatestats terakhir (Transact-SQL). Untuk tabel yang dioptimalkan memori, sp_updatestats (Transact-SQL) selalu menghasilkan statistik yang diperbarui. sp_updatestats (Transact-SQL) adalah opsi yang baik untuk tabel yang dioptimalkan memori; jika tidak, Anda perlu mengetahui tabel mana yang memiliki perubahan signifikan sehingga Anda dapat memperbarui statistik satu per satu.

Statistik dapat dihasilkan dengan mengambil sampel data atau melakukan pemindaian penuh. Statistik sampel hanya menggunakan sampel data tabel untuk memperkirakan distribusi data. Statistik fullscan memindai seluruh tabel untuk menentukan distribusi data. Statistik fullscan biasanya lebih akurat tetapi membutuhkan waktu lebih lama untuk dihitung. Statistik sampel dapat dikumpulkan lebih cepat.

Tabel berbasis disk menggunakan statistik sampel secara default. Tabel yang dioptimalkan memori hanya mendukung statistik fullscan. Saat menggunakan CREATE STATISTICS (Transact-SQL) atau UPDATE STATISTICS (Transact-SQL), Anda harus menentukan FULLSCAN opsi untuk tabel yang dioptimalkan memori.

Pertimbangan tambahan untuk statistik pada tabel yang dioptimalkan memori:

  • Indeks pada tabel yang dioptimalkan memori dibuat dengan tabel . Statistik pada kolom kunci indeks dibuat saat tabel kosong. Oleh karena itu, statistik ini perlu diperbarui setelah data dimuat ke dalam tabel.

  • Untuk prosedur tersimpan yang dikompilasi secara asli, rencana eksekusi untuk kueri dalam prosedur dioptimalkan ketika prosedur dikompilasi. Ini hanya terjadi ketika prosedur dibuat dan ketika server dimulai ulang, bukan ketika statistik diperbarui. Oleh karena itu, tabel harus berisi sekumpulan data dan statistik yang representatif harus diperbarui sebelum prosedur dibuat. (Prosedur tersimpan yang dikompilasi secara asli dikompilasi ulang jika database diambil offline dan dibawa kembali online, atau jika ada restart server.)

Panduan Statistik Saat Menyebarkan Tabel Memory-Optimized

Untuk memastikan bahwa pengoptimal kueri memiliki statistik terbaru saat membuat rencana kueri, sebarkan tabel yang dioptimalkan memori menggunakan lima langkah berikut:

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

  2. Muat data ke dalam tabel.

  3. Perbarui statistik pada tabel.

  4. Buat prosedur tersimpan yang mengakses tabel.

  5. Jalankan beban kerja, yang dapat berisi campuran prosedur tersimpan Transact-SQL yang dikompilasi dan ditafsirkan secara asli, serta batch ad hoc.

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

Panduan untuk Mempertahankan Statistik pada Tabel Memory-Optimized

Untuk terus memperbarui statistik, perbarui statistik secara teratur pada tabel yang dioptimalkan memori.

Jika data sering berubah, Anda harus sering memperbarui statistik. Misalnya, perbarui statistik tabel setelah pembaruan batch. Setelah Anda memperbarui statistik, hilangkan dan buat ulang prosedur tersimpan yang dikompilasi secara asli sehingga mereka dapat memperoleh manfaat dari statistik yang diperbarui.

.

Jangan perbarui statistik selama beban kerja puncak.

Untuk memperbarui statistik:

Untuk memperbarui statistik untuk satu tabel yang dioptimalkan memori (myschema. Mytable), jalankan skrip berikut:

UPDATE STATISTICS myschema.Mytable WITH FULLSCAN, NORECOMPUTE  

Untuk memperbarui statistik untuk semua tabel yang dioptimalkan memori dalam database saat ini, jalankan skrip berikut:

DECLARE @sql NVARCHAR(MAX) = N''  
  
SELECT @sql += N'  
   UPDATE STATISTICS ' + quotename(schema_name(schema_id)) + N'.' + quotename(name) + N' WITH FULLSCAN, NORECOMPUTE'  
FROM sys.tables WHERE is_memory_optimized=1  
  
EXEC sp_executesql @sql  

Untuk memperbarui statistik untuk semua tabel dalam database, jalankan sp_updatestats (Transact-SQL).

Sampel berikut melaporkan ketika statistik pada tabel yang dioptimalkan memori terakhir diperbarui. Informasi ini dapat membantu Anda memutuskan apakah Anda perlu memperbarui statistik.

select t.object_id, t.name, sp.last_updated as 'stats_last_updated'  
from sys.tables t join sys.stats s on t.object_id=s.object_id cross apply sys.dm_db_stats_properties(t.object_id, s.stats_id) sp  
where t.is_memory_optimized=1  

Lihat juga

Tabel yang Dioptimalkan Memori