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