Saya memiliki situs web ASP.NET yang melakukan caching data sendiri dan data tidak berubah untuk jangka waktu yang lama, sehingga tidak perlu melakukan query SQL Server kedua kalinya dengan permintaan yang sama. Saya perlu meningkatkan kinerja kueri (perawan) pertama kali yang masuk ke SQL Server itu. Beberapa permintaan memproses begitu banyak data sehingga dapat menyebabkan SQL Server digunakan tempdb
. Saya tidak menggunakan variabel tabel temp atau tabel temp, jadi SQL Server memutuskan untuk menggunakannya tempdb
sendiri kapan pun diperlukan.
Ukuran db saya 16Gb, saya memiliki 32Gb RAM fisik yang tersedia di mesin server saya.
Saya mengerti bahwa strategi caching MS SQL Server mencoba untuk menyimpan data dalam RAM untuk mempercepat kinerja pertanyaan serupa jika mereka membutuhkan data yang sama untuk dimuat lagi. Selain itu akan mencoba menggunakan RAM yang tersedia, bukan tempdb untuk mempercepat kinerja tanpa menyebabkan akses disk.
Saya kira ketika permintaan yang perlu menyimpan sesuatu di tempdb SQL Server datang dan tidak ada cukup RAM yang tersedia, SQL Server memiliki 2 pilihan:
1) untuk membongkar beberapa data yang di-cache dan menggunakan RAM yang disimpan alih-alih tempdb untuk menghindari penulisan disk
2) menyimpan data yang di-cache untuk kueri di masa depan dan mulai menggunakan tempdb, yang menyebabkan penulisan memperlambat disk.
Saya tidak tahu pilihan apa yang akan dibuat oleh SQL Server dalam situasi ini, tapi saya ingin itu membuat pilihan # 1 karena saya hanya peduli tentang kinerja kueri (perawan) pertama kali, karena saya tidak pernah mengirim kueri yang sama ke SQL Server lagi (meskipun saya dapat mengirim permintaan serupa).
Apa strategi caching SQL Server untuk skenario ini?
Bagaimana cara menyeimbangkan penggunaan RAM antara menghindari tempdb untuk permintaan perawan dan kecepatan permintaan kedua kalinya?
Apakah mungkin untuk mengkonfigurasi SQL Server sedemikian rupa sehingga akan membuat pilihan # 1? Jika ya lalu bagaimana?
Bagaimana lagi saya bisa meningkatkan kinerja semua pertanyaan SQL perawan?
Karena saya tidak tahu tentang strategi caching SQL Server, saya ingin menempatkan database pada RAM Disk. Ini akan memastikan bahwa setiap perawan permintaan memiliki kecepatan tinggi memuat data yang tidak di-cache bahkan jika SQL Server selalu membuat pilihan # 1. Risiko itu adalah bahwa SQL Server dapat mulai menggunakan lebih banyak tempdb dengan RAM yang tersedia lebih sedikit (hanya 16Gb tersisa setelah saya menggunakan 16Gb untuk RAM Disk) jika terus membuat pilihan # 2, yang akan memperlambat permintaan perawan yang menyebabkan tumpah ke dalam tempdb
.
Saya tertarik pada solusi untuk SQL 2008 R2, tapi saya rasa itu mungkin sama untuk SQL 2008, SQL 2005 dan mungkin SQL 2000.
Klarifikasi:
Tidak ada aplikasi lain yang berjalan di kotak itu, itu didedikasikan untuk SQL Server . Situs web berjalan pada kotak terpisah.
Ini SQL Server 2008 R2 Edisi Standar 64 bit pada Windows Server 2008 R2 Enterprise 64 bit.
Saya menjalankan kueri hanya-baca dan basis data diatur menjadi hanya-baca .
Mari kita asumsikan sudah ada indeks yang bagus . Pertanyaan ini adalah tentang SQL Server membuat pilihan # 1 vs pilihan # 2, bagaimana cara membuatnya, jika ada cara untuk mengendalikannya dan jika RAM Disk membantunya untuk membuat pilihan yang tepat untuk pertanyaan perawan.