Bagikan melalui


Kompilasi Asli Tabel dan Prosedur Tersimpan

In-Memory OLTP memperkenalkan konsep kompilasi asli. SQL Server dapat mengkompilasi prosedur tersimpan secara asli yang mengakses tabel yang dioptimalkan memori. SQL Server juga dapat mengkompilasi tabel yang dioptimalkan memori secara asli. Kompilasi asli memungkinkan akses data yang lebih cepat dan eksekusi kueri yang lebih efisien daripada Transact-SQL yang ditafsirkan (tradisional). Kompilasi asli tabel dan prosedur tersimpan menghasilkan DLL.

Kompilasi asli dari jenis tabel memori yang dioptimalkan juga didukung. Untuk informasi selengkapnya, lihat Variabel Tabel yang Dioptimalkan Memori.

Kompilasi asli mengacu pada proses konversi konstruksi pemrograman ke kode asli, yang terdiri dari instruksi prosesor tanpa perlu kompilasi atau interpretasi lebih lanjut.

In-Memory OLTP mengkompilasi tabel yang dioptimalkan memori saat dibuat, dan prosedur tersimpan yang dikompilasi secara asli saat dimuat ke DLL asli. Selain itu, DLL dikompresi ulang setelah database atau server dimulai ulang. Informasi yang diperlukan untuk membuat ulang DLL disimpan dalam metadata database. DLL bukan bagian dari database, meskipun dikaitkan dengan database. Misalnya, DLL tidak disertakan dalam cadangan database.

Catatan

Tabel yang dioptimalkan memori dikompresi ulang selama menghidupkan ulang server. Untuk mempercepat pemulihan database, prosedur tersimpan yang dikompilasi secara asli tidak dikompilasi ulang selama menghidupkan ulang server, prosedur tersebut dikompilasi pada saat eksekusi pertama. Sebagai hasil dari kompilasi yang ditangguhkan ini, prosedur tersimpan yang dikompilasi secara asli hanya muncul saat memanggil sys.dm_os_loaded_modules (Transact-SQL) setelah eksekusi pertama.

Pemeliharaan DLL OLTP In-Memory

Kueri berikut ini memperlihatkan semua DLL tabel dan prosedur tersimpan yang saat ini dimuat dalam memori di server:

SELECT name, description FROM sys.dm_os_loaded_modules  
where description = 'XTP Native DLL'  

Administrator database tidak perlu mempertahankan file yang dihasilkan oleh kompilasi asli. SQL Server secara otomatis menghapus file yang dihasilkan yang tidak lagi diperlukan. Misalnya, file yang dihasilkan akan dihapus saat tabel dan prosedur tersimpan dihapus, atau jika database dihilangkan.

Catatan

Jika kompilasi gagal atau terganggu, beberapa file yang dihasilkan tidak dihapus. File-file ini sengaja ditinggalkan untuk dukungan dan dihapus ketika database dihilangkan.

Catatan

Selama startup database, SQL Server mengkompilasi DLL untuk semua tabel yang diperlukan untuk pemulihan database. Jika tabel dihilangkan tepat sebelum menghidupkan ulang database, masih ada sisa tabel dalam file titik pemeriksaan atau log transaksi sehingga DLL untuk tabel mungkin dikompilasi ulang selama mulai database. Setelah memulai ulang DLL akan dibongkar dan file akan dihapus oleh proses pembersihan normal.

Kompilasi Tabel Asli

Membuat tabel yang dioptimalkan memori menggunakan CREATE TABLE pernyataan menghasilkan informasi tabel yang ditulis ke metadata database dan struktur tabel dan indeks yang dibuat dalam memori. Tabel juga akan dikompilasi ke DLL.

Pertimbangkan contoh skrip berikut, yang membuat database dan tabel yang dioptimalkan memori:

use master  
go  
create database db1  
go  
alter database db1 add filegroup db1_mod contains memory_optimized_data  
go  
-- adapt filename as needed  
alter database db1 add file (name='db1_mod', filename='c:\data\db1_mod') to filegroup db1_mod  
go  
use db1  
go  
create table dbo.t1  
   (c1 int not null primary key nonclustered,  
    c2 INT)  
with (memory_optimized=on)  
go  
-- retrieve the path of the DLL for table t1  
select name, description FROM sys.dm_os_loaded_modules  
where name like '%xtp_t_' + cast(db_id() as varchar(10)) + '_' + cast(object_id('dbo.t1') as varchar(10)) + '.dll'  
go  

Membuat tabel juga membuat TABEL DLL dan memuat DLL dalam memori. Kueri DMV segera setelah pernyataan CREATE TABLE mengambil jalur DLL tabel.

DLL tabel memahami struktur indeks dan format baris tabel. SQL Server menggunakan DLL untuk melintas indeks, mengambil baris, serta menyimpan konten baris.

Kompilasi Asli Prosedur Tersimpan

Prosedur tersimpan yang ditandai dengan NATIVE_COMPILATION dikompilasi secara asli. Ini berarti pernyataan Transact-SQL dalam prosedur semuanya dikompilasi ke kode asli untuk eksekusi logika bisnis penting performa yang efisien.

Untuk informasi selengkapnya tentang prosedur tersimpan yang dikompilasi secara asli, lihat Prosedur Tersimpan yang Dikompilasi Secara Asli.

Pertimbangkan contoh prosedur tersimpan berikut, yang menyisipkan baris dalam tabel t1 dari contoh sebelumnya:

create procedure dbo.native_sp  
with native_compilation, schemabinding, execute as owner  
as  
begin atomic  
with (transaction isolation level=snapshot, language=N'us_english')  
  
  declare @i int = 1000000  
  while @i > 0  
  begin  
    insert dbo.t1 values (@i, @i+1)  
    set @i -= 1  
  end  
  
end  
go  
exec dbo.native_sp  
go  
-- reset  
delete from dbo.t1  
go  

DLL untuk native_sp dapat berinteraksi langsung dengan DLL untuk t1, serta mesin penyimpanan OLTP In-Memory, untuk menyisipkan baris secepat mungkin.

Pengkompilasi OLTP In-Memory memanfaatkan pengoptimal kueri untuk membuat rencana eksekusi yang efisien untuk setiap kueri dalam prosedur tersimpan. Perhatikan bahwa prosedur tersimpan yang dikompilasi secara asli tidak secara otomatis dikompilasi ulang jika data dalam tabel berubah. Untuk informasi selengkapnya tentang mempertahankan statistik dan prosedur tersimpan dengan OLTP In-Memory lihat Statistik untuk Tabel Memory-Optimized.

Pertimbangan Keamanan untuk Kompilasi Asli

Kompilasi asli tabel dan prosedur tersimpan menggunakan pengkompilasi OLTP In-Memory. Pengkompilasi ini menghasilkan file yang ditulis ke disk dan dimuat ke dalam memori. SQL Server menggunakan mekanisme berikut untuk membatasi akses ke file-file ini.

Pengkompilasi Asli

Compiler executable, serta biner dan file header yang diperlukan untuk kompilasi asli diinstal sebagai bagian dari instans SQL Server di bawah folder MSSQL\Binn\Xtp. Jadi, jika instans default diinstal di bawah C:\Program Files, file pengkompilasi diinstal di C:\Program Files\MicrosoftSQL Server\MSSQL12. MSSQLSERVER\MSSQL\Binn\Xtp.

Untuk membatasi akses ke pengkompilasi, SQL Server menggunakan daftar kontrol akses (ACL) untuk membatasi akses ke file biner. Semua biner SQL Server dilindungi dari modifikasi atau perubahan melalui ACL. ACL pengkompilasi asli juga membatasi penggunaan pengkompilasi; hanya akun layanan SQL Server dan administrator sistem yang telah membaca dan menjalankan izin untuk file kompilator asli.

File yang Dihasilkan oleh Kompilasi Asli

File yang dihasilkan ketika tabel atau prosedur tersimpan dikompilasi termasuk DLL dan file perantara termasuk file dengan ekstensi berikut: .c, .obj, .xml, dan .pdb. File yang dihasilkan disimpan dalam subfolder folder data default. Subfolder disebut Xtp. Saat menginstal instans default dengan folder data default, file yang dihasilkan ditempatkan di C:\Program Files\MicrosoftSQL Server\MSSQL12. MSSQLSERVER\MSSQL\DATA\Xtp.

SQL Server mencegah perubahan dengan DLL yang dihasilkan dengan tiga cara:

  • Ketika tabel atau prosedur tersimpan dikompilasi ke DLL, DLL ini segera dimuat ke dalam memori dan ditautkan ke proses sqlserver.exe. DLL tidak dapat dimodifikasi saat ditautkan ke proses.

  • Saat database dimulai ulang, semua tabel dan prosedur tersimpan dikompresi ulang (dihapus dan dibuat ulang) berdasarkan metadata database. Ini akan menghapus perubahan apa pun yang dibuat pada file yang dihasilkan oleh agen berbahaya.

  • File yang dihasilkan dianggap sebagai bagian dari data pengguna, dan memiliki batasan keamanan yang sama, melalui ACL, sebagai file database: hanya akun layanan SQL Server dan administrator sistem yang dapat mengakses file-file ini.

Tidak diperlukan interaksi pengguna untuk mengelola file-file ini. SQL Server akan membuat dan menghapus file seperlunya.

Lihat juga

Tabel yang Dioptimalkan Memori
Prosedur Tersimpan yang Dikompilasi Secara Asli