Pertanyaan SQL Server - Paksa DB dalam memori?


Kami memiliki Windows 2008 x64 server yang gemuk (4 x 4 core CPU, 32GB RAM) menjalankan SQL Server 2005 64-bit. Kami memiliki database kecil (6GB) tetapi sangat penting yang agak lambat untuk diakses sampai halaman di-cache dalam memori (penggunaannya sangat acak I / O sehingga kemungkinan sangat rendah halaman tertentu dalam memori dan pengguna akhir mengeluh tentang kelambatan awal). Disk cukup cepat (lokal 15K SAS) tapi saya kira aplikasi ini agak kikuk ditulis (ini adalah solusi COTS) jadi saya bertanya-tanya apakah ada cara untuk "memaksa" database dalam memori di SQL Server 2005 (2008 tidak didukung oleh vendor, jadi kita tidak perlu meng-upgrade ke yang belum) untuk membantu menghindari blues pengisian-cache awal?

Metode saya saat ini adalah saya menjalankan SELECT * dari setiap tabel dalam skrip untuk mendapatkan halaman data dalam memori tetapi beberapa objek (indeks, pencarian teks lengkap, dll.) Tidak di-cache oleh metode ini (dan memodifikasi skrip untuk menginterogasi indeks dan tulis sesuai klausa WHERE untuk cache adalah kompromi boil-the-ocean).


13
2018-05-01 20:37






Jawaban:


Tidak, tidak ada cara untuk memaksa database ke cache, sayangnya. Metode brute force Anda mungkin yang paling mudah. Anda mungkin bisa lebih dekat dengan menggunakan skrip defrag indeks dengan pengaturan ambang yang sangat rendah, seperti mengatakan membangun kembali indeks jika 1% terpecah, seperti ini:

http://sqlserverpedia.com/wiki/Index_Maintenance

Ini akan memakan waktu lebih lama dan melibatkan lebih banyak menulis ke disk, tetapi itu akan memiliki efek samping defragging indeks Anda dan memperbarui statistik, yang merupakan ide yang baik pula.


15
2018-05-01 20:59





Ok - Saya tidak bisa mengomentari jawaban Brent (namun, karena saya tidak memiliki cukup repetisi) - tetapi jika Anda akan pergi ke rute defrag, tidak perlu membangun kembali indeks - karena itu akan membangun indeks baru, mungkin menumbuhkan database jika tidak ada cukup ruang kosong, dan menjamin bahwa cadangan log Anda berikutnya setidaknya ukuran indeks Anda dan log Anda mungkin memiliki banyak catatan log juga (tergantung pada model pemulihan). Jika Anda akan melakukan rute defrag, lakukan ALTER INDEX ... REORGANIZE, yang tidak memerlukan ruang kosong (baik, satu halaman 8k) tetapi akan membaca tingkat daun ke dalam memori dan hanya beroperasi pada bagian yang terfragmentasi. halaman. Tingkat non-daun harus datang dengan cepat setelah beberapa pertanyaan dan (tergantung pada fan-out) harus lebih sedikit data daripada tingkat daun.


9
2018-05-05 17:48



Saya suka --extrachars - Matt Rogish


Mengapa objek database memerah dari cache di tempat pertama? Apakah Anda me-restart layanan SQL atau menghapus database / online? Atau apakah mereka didorong oleh caching dari database lain?

Salam,

SCM.


1
2018-05-18 14:42



Saat ini sistem sedang dalam pengujian dan reboot sering; pengguna mengeluh setelah itu. Dalam produksi semoga jauh lebih sedikit - Matt Rogish
Kedengarannya lebih seperti penundaan dari inisiasi koneksi; Saya tidak mengharapkan pengguna untuk melihat perbedaan nyata dalam bacaan yang tersembunyi / tidak terbaca; kecuali ada faktor lain seperti disk yang kelebihan beban atau lambat yang terlibat. - SqlACID


Jika basis datanya kecil, pertimbangkan untuk meletakkannya di SSD?


1
2017-07-07 07:49





Saya telah memiliki beberapa skenario yang memperbarui statistik dengan FULLSCAN pada tabel kunci telah memaksa data ke cache dan membuat DML saya berikutnya di sekitar tabel tersebut jauh lebih cepat. Dan ini bukan hasil dari statistik yang sudah ketinggalan zaman karena tidak ada perubahan dalam rencana pelaksanaan.


1
2018-05-01 22:14





Mengapa Anda tidak menginstal contoh kedua SQL Server dengan hanya database itu, dan mengatur memori minimum misalnya untuk 6GB?

Ini akan menjamin bahwa database Anda yang lain tidak pernah mengeluarkan memori dari database "kecil tetapi sangat penting" Anda.

Ini juga berarti Anda dapat mengambil contoh lain secara offline dan DB kecil Anda akan tetap berada di memori.


0
2018-05-02 15:01





Saya akan menggunakan profiler untuk memeriksa sql Anda. Bandingkan bacaan 'logis' dengan bacaan 'fisik'. Server SQL pintar dan akan menggunakan RAM yang dibutuhkan untuk hasil yang paling efisien.

Periksa juga apakah autostats Anda sudah diperbarui.

Tanpa gagasan tentang jenis kueri dan ukuran tabel db kedengarannya agak aneh.


0
2018-05-02 18:50