Mengoptimalkan konsumsi memori tinggi dalam instance

Dokumen ini menjelaskan cara meninjau dan mengoptimalkan instance Cloud SQL untuk SQL Server jika instance tersebut diidentifikasi oleh pemberi rekomendasi instance yang tidak memadai sebagai instance yang mengalami pemakaian memori yang tinggi.

Memori SQL Server

Memori SQL Server dapat dibagi sebagai berikut:

Cache

Objek ini pada disk yang dapat dimuat ulang, seperti halaman database dan prosedur yang disimpan. Hasilnya, SQL Server dapat menambah dan mengurangi objek ini berdasarkan pemakaian memori. Cache mencakup kumpulan buffer dan cache rencana.

Memori tetap

Memori tetap dapat bertambah dan menyusut. Ini hanya akan menyusut jika tidak digunakan; misalnya, saat jumlah koneksi menurun atau jumlah kueri yang dieksekusi berkurang. Ini berbeda dengan cache. Jika memori tetap tidak cukup, SQL Server dapat kehabisan memori. Memori tetap mencakup memori koneksi dan hibah memori.

Overhead SQL Server

Overhead SQL Server mencakup thread dan stack.

OLTP Dalam Memori

OLTP Dalam Memori mencakup tabel Dalam Memori dan grup file Dalam Memori,

Konsumsi memori oleh SQL Server dikontrol dengan menetapkan maximum server memory dan memory.memory.limitmb. Parameter memory.memory.limitmb ditetapkan oleh Cloud SQL secara otomatis.

Untuk mempelajari memory.memory.limitmb lebih lanjut, lihat dokumentasi Microsoft.

Anda harus menetapkan batas max server memory ke nilai yang sesuai. Di SQL Server, jika max server memory tidak ditetapkan, halaman database dapat memakai sebagian besar memori mendekati dan hingga 100%. Kadang ini bisa menyesatkan.

Opsi pengoptimalan memori

Untuk menentukan apakah sebuah instance memerlukan lebih banyak penyesuaian memori, lakukan hal berikut:

  • Tetapkan nilai max server memory. Rekomendasi umumnya adalah menyetel max server memory ke sekitar 80% agar SQL Server tidak menggunakan semua memori yang tersedia. Untuk instance yang memiliki jumlah memori besar, 80% mungkin terlalu rendah dan dapat menyebabkan pemborosan memori.

  • Memantau Page life expectancy

    Page life expectancy menunjukkan jumlah waktu, dalam detik, saat halaman terlama tetap berada di kumpulan buffer. Nilai ini harus lebih dari 300 seperti yang direkomendasikan oleh Microsoft. Jika secara konsisten turun di bawah 300, ini dapat menjadi indikasi bahwa instance menghadapi penggunaan memori yang tinggi. Jalankan kueri berikut untuk memantau Page life expectancy.

    SELECT 
      [object_name],
      [counter_name],
      [cntr_value] 
    FROM 
      sys.dm_os_performance_counters
    WHERE 
      [object_name] 
    LIKE 
      '%Manager%'
    AND 
      [counter_name] = 'Page life expectancy'
    
  • Checks Memory Grants Pending

    Memory Grants Pending menentukan jumlah total proses yang menunggu pemberian memori ruang kerja. Jalankan kueri berikut untuk memeriksa Memory Grants Pending. Jika kueri ini secara konsisten menunjukkan hibah yang tertunda, berarti ini menandakan penggunaan memori yang tinggi. Anda dapat menguranginya dengan membuat kueri agar database menunggu dan menyesuaikan pernyataan apa pun yang menunggu memori.

    SELECT
      @@SERVERNAME AS [Server Name],
      RTRIM([object_name]) AS [Object Name],
      cntr_value AS [Memory Grants Pending]
    FROM 
      sys.dm_os_performance_counters WITH(NOLOCK)
    WHERE
      [object_name] 
    LIKE 
      N'%Memory Manager%'  -- Handles named instances
    AND 
      counter_name = N'Memory Grants Pending'