Memori SQL Server

Oct 25 2020

Ini tentang memori SQL Server. Saat server kehabisan memori, sebaiknya tambahkan memori tambahan ke perangkat keras untuk mengatasi masalah penggunaan CPU.

Tetapi sebelum melanjutkan ke peningkatan memori, sebagai bagian dari pemecahan masalah, bagaimana kami memeriksa / menghitung memori SQL yang saat ini digunakan pada instans.

Sebagai contoh:

NAMA SERVER: XXXXXXXXXXXXX

Memori Fisik Terpasang (RAM): 64.0 GB

Memori SQL Server saat ini dialokasikan: 58982 MB -> 58,982 GB

Dalam hal ini, kami hanya memiliki satu instance (MSSQLSERVER) di server dan 80% memori telah dialokasikan ke instance sesuai standar. Dan 20% dialokasikan untuk Aplikasi & OS.

Ketika kami memeriksa Resource Monitor, itu akan menunjukkan 80% terisi karena kami telah mengatur Memori SQL Server untuk itu.

Tetapi itu tidak berarti bahwa 80% dari SQL digunakan sepenuhnya, karena SQL akan menyimpan beberapa ruang di buffer di backend. Ketika saya berselancar, saya mendapat rumus di bawah ini untuk menghitung Memori SQL yang dikonsumsi pada instans tetapi parameter ini telah dihapus pada alat monitor kinerja sejak lama.

Apakah ada cara untuk memeriksa, saat ini seberapa banyak SQL yang digunakan dari 80% (OR) pada metrik apa yang dapat kita lanjutkan dengan peningkatan memori.

FORMULA UNTUK MENGHITUNG MEMORI SQL: (Parameter di bawah ini telah dihapus dari Monitor Kinerja)

*Database Usage(GB) = (Totalpages-Freepages-Stolenpages)8/1024=MB/1024=GB

Jawaban

3 Shanky Oct 26 2020 at 09:51

bagaimana kami memeriksa / menghitung memori SQL yang saat ini digunakan pada instance.

Itu cukup mudah dilakukan. Anda memiliki sys.dm_os_process_memory DMV yang akan memberi Anda informasi. Ini akan memberi Anda physical memory useddantotal memory used (RAM+Page file)

    select (physical_memory_in_use_kb/1024) as Phy_Mem_used_MB, (virtual_address_space_committed_kb/1024) as Total_mem_Used_MB
   from sys.dm_os_process_memory

Tetapi itu tidak berarti bahwa 80% dari SQL digunakan sepenuhnya, karena SQL akan menyimpan beberapa ruang di buffer di backend

Setelah SQL Server mencapai nilai memori server maksimum, SQL Server akan menyimpan memori itu kecuali pemberitahuan memori rendah meminta untuk melepaskan memori. Jadi ya itu mungkin tidak menggunakan semuanya tapi tetap akan menahannya. Ini disebut caching karena ini membantu menghindari kesalahan halaman keras.

Apakah ada cara untuk memeriksa, saat ini seberapa banyak SQL yang digunakan dari 80% (OR) pada metrik apa yang dapat kita lanjutkan dengan peningkatan memori.

Seperti yang saya katakan setelah digunakan, itu akan menunjukkan semua memori yang digunakan bahkan ketika tidak membutuhkan halaman itu dalam pemrosesan kueri. Ketika permintaan baru datang, halaman-halaman ini akan dipindahkan untuk memberi ruang bagi halaman-halaman baru.

2 TiborKaraszi Oct 26 2020 at 12:18

Bagaimana Anda mendefinisikan "dimanfaatkan"? Sebuah halaman yang dibaca ke dalam cache beberapa saat yang lalu, apakah itu dianggap digunakan? Semenit yang lalu? Satu jam? Seminggu?

Intinya adalah bahwa tidak ada yang "dimanfaatkan". SQL server menyimpan halaman (dan hal lainnya) dalam memori. Ketika ada tekanan memori (internal atau eksternal) mekanisme penuaan cache tradisional (pada dasarnya) digunakan untuk menghapus barang-barang yang paling terakhir digunakan. Tentu saja ada lebih banyak detail tentang penanganan memori (cache), tetapi pada prinsipnya penanganannya seperti mekanisme cache apa pun.

Jadi, konsep seperti "dimanfaatkan" atau konfigurasi optimal tidak ada. Anda dapat melihat apakah ada banyak memori yang tidak digunakan oleh SQL server sama sekali. Tetapi ketika SQL server mengalokasikan memori, itu akan bertahan kecuali ada tekanan memori. Siapa tahu, mungkin seseorang akan membutuhkan halaman itu pada detik berikutnya?

Anda dapat mengurangi memori server maksimal dan melihat kapan kinerja Anda mulai memburuk, misalnya.

2 AlekseyVitsko Oct 26 2020 at 16:09

Gunakan MemoryManagerInfoprosedur tersimpan, yang dapat ditemukan di sini:

https://github.com/aleksey-vitsko/Database-Administrator-Tools

Ini memberikan rincian yang bagus tentang bagaimana SQL Server saat ini menggunakan memori:
Lihat contoh pada gambar di bawah ini - inilah yang saat ini dikonsumsi oleh server saya:

Secara kasar, Total Server Memory= Database Cache Memory+ Free Memory+ Stolen Server Memory(Memori Server yang Dicuri termasuk Cache Paket, Kunci, dll.)