Bagikan melalui


Mengikat Database dengan Tabel yang Dioptimalkan Memori ke Kumpulan Sumber Daya

Berlaku untuk: SQL Server

Kumpulan sumber daya mewakili subset sumber daya fisik yang dapat diatur. Secara default, database SQL Server terikat dan menggunakan sumber daya kumpulan sumber daya default. Untuk melindungi SQL Server agar sumber dayanya tidak dikonsumsi oleh satu atau beberapa tabel yang dioptimalkan memori, dan untuk mencegah pengguna memori lain mengonsumsi memori yang diperlukan oleh tabel yang dioptimalkan memori, Anda harus membuat kumpulan sumber daya terpisah untuk mengelola konsumsi memori untuk database dengan tabel yang dioptimalkan memori.

Database hanya dapat terikat pada satu kumpulan sumber daya. Namun, Anda dapat mengikat beberapa database ke kumpulan yang sama. SQL Server memungkinkan pengikatan database tanpa tabel yang dioptimalkan memori ke kumpulan sumber daya tetapi tidak berpengaruh. Anda mungkin ingin mengikat database ke kumpulan sumber daya bernama jika, di masa mendatang, Anda mungkin ingin membuat tabel yang dioptimalkan memori dalam database.

Sebelum Anda bisa mengikat database ke kumpulan sumber daya baik database maupun kumpulan sumber daya harus ada. Pengikatan berlaku saat database dibawa secara online di lain waktu. Lihat Status Database untuk informasi selengkapnya.

Untuk informasi tentang kumpulan sumber daya, lihat Kumpulan Sumber Daya Resource Governor.

Langkah-langkah untuk mengikat database ke kumpulan sumber daya

  1. Membuat database dan kumpulan sumber daya

    1. Membuat database

    2. Tentukan nilai minimum untuk MIN_MEMORY_PERCENT dan MAX_MEMORY_PERCENT

    3. Membuat kumpulan sumber daya dan mengonfigurasi memori

  2. Mengikat database ke kumpulan

  3. Mengonfirmasi pengikatan

  4. Membuat pengikatan efektif

Konten lain dalam topik ini

Membuat database dan kumpulan sumber daya

Anda dapat membuat database dan kumpulan sumber daya dalam urutan apa pun. Yang penting adalah keduanya ada sebelum mengikat database ke kumpulan sumber daya.

Buatlah databasenya

Transact-SQL berikut membuat database bernama IMOLTP_DB yang akan berisi satu atau beberapa tabel yang dioptimalkan memori. DriveAndPath> jalur <harus ada sebelum menjalankan perintah ini.

CREATE DATABASE IMOLTP_DB  
GO  
ALTER DATABASE IMOLTP_DB ADD FILEGROUP IMOLTP_DB_fg CONTAINS MEMORY_OPTIMIZED_DATA  
ALTER DATABASE IMOLTP_DB ADD FILE( NAME = 'IMOLTP_DB_fg' , FILENAME = 'c:\data\IMOLTP_DB_fg') TO FILEGROUP IMOLTP_DB_fg;  
GO  

Tentukan nilai minimum untuk MIN_MEMORY_PERCENT dan MAX_MEMORY_PERCENT

Setelah Anda menentukan kebutuhan memori untuk tabel yang dioptimalkan memori, Anda perlu menentukan persentase memori yang tersedia yang Anda butuhkan, dan mengatur persentase memori ke nilai tersebut atau lebih tinggi.

Contoh:
Untuk contoh ini, kami akan berasumsi bahwa dari perhitungan Anda, Anda menentukan bahwa tabel dan indeks yang dioptimalkan memori Anda membutuhkan memori 16 GB. Asumsikan bahwa Anda memiliki memori 32 GB yang diterapkan untuk penggunaan Anda.

Pada pandangan pertama, tampaknya Anda perlu mengatur MIN_MEMORY_PERCENT dan MAX_MEMORY_PERCENT ke 50 (16 adalah 50% dari 32). Namun, itu tidak akan memberikan memori yang memadai pada tabel yang dioptimalkan memori Anda. Melihat tabel di bawah ini (Persentase memori yang tersedia untuk tabel dan indeks yang dioptimalkan memori) kita melihat bahwa jika ada memori berkomitmen 32 GB, hanya 80% yang tersedia untuk tabel dan indeks yang dioptimalkan memori. Oleh karena itu, kami menghitung persentase min dan maks berdasarkan memori yang tersedia, bukan memori yang diterapkan.

memoryNeedeed = 16
memoryCommitted = 32
availablePercent = 0.8
memoryAvailable = memoryCommitted * availablePercent
percentNeeded = memoryNeeded / memoryAvailable

Mencolokkan angka riil:
percentNeeded = 16 / (32 * 0.8) = 16 / 25.6 = 0.625

Dengan demikian Anda membutuhkan setidaknya 62,5% memori yang tersedia untuk memenuhi persyaratan 16 GB tabel dan indeks yang dioptimalkan memori Anda. Karena nilai untuk MIN_MEMORY_PERCENT dan MAX_MEMORY_PERCENT harus bilangan bulat, kami mengaturnya setidaknya 63%.

Membuat kumpulan sumber daya dan mengonfigurasi memori

Saat mengonfigurasi memori untuk tabel yang dioptimalkan memori, perencanaan kapasitas harus dilakukan berdasarkan MIN_MEMORY_PERCENT, bukan pada MAX_MEMORY_PERCENT. Lihat MENGUBAH KUMPULAN SUMBER DAYA (Transact-SQL) untuk informasi tentang MIN_MEMORY_PERCENT dan MAX_MEMORY_PERCENT. Ini memberikan ketersediaan memori yang lebih dapat diprediksi untuk tabel yang dioptimalkan memori karena MIN_MEMORY_PERCENT menyebabkan tekanan memori ke kumpulan sumber daya lain untuk memastikannya terhormat. Untuk memastikan bahwa memori tersedia dan membantu menghindari kondisi di luar memori, nilai untuk MIN_MEMORY_PERCENT dan MAX_MEMORY_PERCENT harus sama. Lihat Persentase memori yang tersedia untuk tabel dan indeks yang dioptimalkan memori di bawah ini untuk persentase memori yang tersedia untuk tabel yang dioptimalkan memori berdasarkan jumlah memori yang diterapkan.

Lihat Praktik Terbaik: Menggunakan OLTP Dalam Memori di lingkungan VM untuk informasi selengkapnya saat bekerja di lingkungan VM.

Kode Transact-SQL berikut membuat kumpulan sumber daya bernama Pool_IMOLTP dengan setengah dari memori yang tersedia untuk digunakan. Setelah kumpulan dibuat, Resource Governor dikonfigurasi ulang untuk menyertakan Pool_IMOLTP.

-- set MIN_MEMORY_PERCENT and MAX_MEMORY_PERCENT to the same value  
CREATE RESOURCE POOL Pool_IMOLTP   
  WITH   
    ( MIN_MEMORY_PERCENT = 63,   
    MAX_MEMORY_PERCENT = 63 );  
GO  
  
ALTER RESOURCE GOVERNOR RECONFIGURE;  
GO  

Mengikat database ke kumpulan

Gunakan fungsi sp_xtp_bind_db_resource_pool sistem untuk mengikat database ke kumpulan sumber daya. Fungsi ini mengambil dua parameter: nama database dan nama kumpulan sumber daya.

Transact-SQL berikut mendefinisikan pengikatan database IMOLTP_DB ke kumpulan sumber daya Pool_IMOLTP. Pengikatan tidak menjadi efektif sampai Anda membuat database online.

EXEC sp_xtp_bind_db_resource_pool 'IMOLTP_DB', 'Pool_IMOLTP'  
GO  

Fungsi sistem sp_xtp_bind_db_resourece_pool mengambil dua parameter string: database_name dan pool_name.

Mengonfirmasi pengikatan

Konfirmasikan pengikatan, catat id kumpulan sumber daya untuk IMOLTP_DB. Seharusnya tidak NULL.

SELECT d.database_id, d.name, d.resource_pool_id  
FROM sys.databases d  
GO  

Membuat pengikatan efektif

Anda harus mengambil database offline dan kembali online setelah mengikatnya ke kumpulan sumber daya agar pengikatan diterapkan. Jika database Anda terikat ke kumpulan yang berbeda sebelumnya, ini akan menghapus memori yang dialokasikan dari kumpulan sumber daya sebelumnya dan alokasi memori untuk tabel dan indeks yang dioptimalkan memori Anda sekarang akan berasal dari kumpulan sumber daya yang baru terikat dengan database.

USE master  
GO  
  
ALTER DATABASE IMOLTP_DB SET OFFLINE  
GO  
ALTER DATABASE IMOLTP_DB SET ONLINE  
GO  
  
USE IMOLTP_DB  
GO  

Dan sekarang, database terikat ke kumpulan sumber daya.

Mengubah MIN_MEMORY_PERCENT dan MAX_MEMORY_PERCENT pada kumpulan yang ada

Jika Anda menambahkan memori tambahan ke server atau jumlah memori yang diperlukan untuk perubahan tabel yang dioptimalkan memori, Anda mungkin perlu mengubah nilai MIN_MEMORY_PERCENT dan MAX_MEMORY_PERCENT. Langkah-langkah berikut menunjukkan cara mengubah nilai MIN_MEMORY_PERCENT dan MAX_MEMORY_PERCENT pada kumpulan sumber daya. Lihat bagian di bawah ini, untuk panduan tentang nilai apa yang akan digunakan untuk MIN_MEMORY_PERCENT dan MAX_MEMORY_PERCENT. Lihat topik Praktik Terbaik: Menggunakan OLTP Dalam Memori di lingkungan VM untuk informasi selengkapnya.

  1. Gunakan ALTER RESOURCE POOL untuk mengubah nilai MIN_MEMORY_PERCENT dan MAX_MEMORY_PERCENT.

  2. Gunakan ALTER RESOURCE GOVERNOR untuk mengonfigurasi ulang Resource Governor dengan nilai baru.

Kode Sampel

ALTER RESOURCE POOL Pool_IMOLTP  
WITH  
     ( MIN_MEMORY_PERCENT = 70,  
       MAX_MEMORY_PERCENT = 70 )   
GO  
  
-- reconfigure the Resource Governor  
ALTER RESOURCE GOVERNOR RECONFIGURE  
GO  

Persentase memori yang tersedia untuk tabel dan indeks yang dioptimalkan memori

Jika Anda memetakan database dengan tabel yang dioptimalkan memori dan beban kerja SQL Server ke kumpulan sumber daya yang sama, Resource Governor menetapkan ambang internal untuk penggunaan OLTP Dalam Memori sehingga pengguna kumpulan tidak memiliki konflik atas penggunaan kumpulan. Secara umum, ambang batas untuk penggunaan OLTP Dalam Memori adalah sekitar 80% dari kumpulan. Tabel berikut menunjukkan ambang batas aktual untuk berbagai ukuran memori.

Saat Anda membuat kumpulan sumber daya khusus untuk database OLTP Dalam Memori, Anda perlu memperkirakan berapa banyak memori fisik yang Anda butuhkan untuk tabel dalam memori setelah memperhitungkan versi baris dan pertumbuhan data. Setelah memperkirakan memori yang diperlukan, Anda membuat kumpulan sumber daya dengan persentase memori target penerapan untuk Instans SQL seperti yang dicerminkan oleh kolom 'committed_target_kb' di DMV sys.dm_os_sys_info. Misalnya, Anda dapat membuat kumpulan sumber daya P1 dengan 40% dari total memori yang tersedia untuk instans. Dari 40%, mesin OLTP Dalam Memori mendapatkan persentase yang lebih kecil untuk menyimpan data OLTP Dalam Memori. Ini dilakukan untuk memastikan OLTP Dalam Memori tidak mengonsumsi semua memori dari kumpulan ini. Nilai persentase yang lebih kecil ini tergantung pada Memori yang diterapkan Target. Tabel berikut ini menjelaskan memori yang tersedia untuk database OLTP Dalam Memori dalam kumpulan sumber daya (bernama atau default) sebelum kesalahan OOM dimunculkan.

Memori Berkomitmen Target Persentase tersedia untuk tabel dalam memori
<= 8 GB 70%
<= 16 GB 75%
<= 32 GB 80%
<= 96 GB 85%
>96 GB 90%

Misalnya, jika 'memori berkomitmen target' Anda adalah 100 GB, dan Anda memperkirakan tabel dan indeks memori yang dioptimalkan membutuhkan memori 60GB, kemudian Anda dapat membuat kumpulan sumber daya dengan MAX_MEMORY_PERCENT = 67 (60GB diperlukan / 0,90 = 66,667GB - membulatkan hingga 67GB; 67GB / 100GB diinstal = 67%) untuk memastikan bahwa objek OLTP Dalam Memori Anda memiliki 60GB yang mereka butuhkan.

Setelah database terikat ke kumpulan sumber daya bernama, gunakan kueri berikut untuk melihat alokasi memori di berbagai kumpulan sumber daya.

SELECT pool_id  
     , Name  
     , min_memory_percent  
     , max_memory_percent  
     , max_memory_kb/1024 AS max_memory_mb  
     , used_memory_kb/1024 AS used_memory_mb   
     , target_memory_kb/1024 AS target_memory_mb  
   FROM sys.dm_resource_governor_resource_pools  

Output sampel ini menunjukkan bahwa memori yang diambil oleh objek yang dioptimalkan memori adalah 1356 MB dalam kumpulan sumber daya, PoolIMOLTP, dengan batas atas 2307 MB. Batas atas ini mengontrol total memori yang dapat diambil oleh objek yang dioptimalkan memori pengguna dan sistem yang dipetakan ke kumpulan ini.

Output sampel
Output ini berasal dari database dan tabel yang kami buat di atas.

pool_id     Name        min_memory_percent max_memory_percent max_memory_mb used_memory_mb target_memory_mb  
----------- ----------- ------------------ ------------------ ------------- -------------- ----------------   
1           internal    0                  100                3845          125            3845  
2           default     0                  100                3845          32             3845  
259         Pool_IMOLTP 0                  100                3845          1356           2307  

Untuk informasi selengkapnya, lihat sys.dm_resource_governor_resource_pools (Transact-SQL).

Jika Anda tidak mengikat database Anda ke kumpulan sumber daya bernama, database tersebut terikat ke kumpulan 'default'. Karena kumpulan sumber daya default digunakan oleh SQL Server untuk sebagian besar alokasi lain, Anda tidak akan dapat memantau memori yang digunakan oleh tabel yang dioptimalkan memori menggunakan DMV sys.dm_resource_governor_resource_pools secara akurat untuk database yang menarik.

Lihat Juga

sys.sp_xtp_bind_db_resource_pool (T-SQL)
sys.sp_xtp_unbind_db_resource_pool (T-SQL)
Resource Governor
Kumpulan Sumber Daya Resource Governor
Membuat Pusat Sumber Daya
Mengubah Pengaturan Pusat Sumber Daya
Menghapus Kumpulan Sumber Daya