Salah satu dari SQL Server kami, yang telah berjalan stabil selama beberapa waktu (tahun), baru-baru ini melempar kesalahan memori yang tidak mencukupi. Dari Log Acara Aplikasi, kita melihat:
ID Peristiwa: 701
Deskripsi: Memori sistem tidak cukup untuk menjalankan kueri ini.
Tim kami yang mengelola server ini terdiri dari sebagian besar pengembang yang menggandakan tugas sysadmin. Namun, keahlian utama kami adalah pengembangan. Yang sedang berkata, kita bingung bagaimana kita mengatasi masalah ini. Kami telah menjelajahi forum dan yang lainnya dan belum menemukan yang cocok
Jadi, berikut ini beberapa detail lainnya untuk membantu pemecahan masalah:
- Memori server minimum kami diatur ke 0.
- Memori server maksimum kami diatur ke 2000.
- Total Memori Fisik adalah 3.325,85 MB (dari sysinfo).
- Total Memori Virtual adalah 7.10 GB (dari sysinfo).
- Kami tidak menggunakan AWE untuk mengalokasikan memori, tetapi kami sekarang untuk melihat apakah itu membuat perbedaan.
- Kesalahan ini dilemparkan oleh pekerjaan yang membuat cadangan log transaksi, tidak menjalankan kueri.
- Kami memiliki banyak server yang tertaut. Jenis RDBMS di sisi lain adalah SQL Server (2005 dan 2000), Oracle 10g, dan sistem OSI PI.
- Berselang pada titik ini. Tampaknya kami tidak dapat menghubungkan waktu atau peristiwa dengan kesalahan.
- Tentu saja, me-reboot tampaknya membuatnya pergi untuk sementara waktu, yang masuk akal karena sifat dari pesan kesalahan.
- Server ini tiga kali lipat sebagai server aplikasi (beberapa Layanan Windows) dan server web, serta server basis data.
EDIT:
Kami berada di SP3. Sebagian besar posting yang kami temukan adalah pra SP1, yang tidak berlaku untuk kami.
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
kembali
9.00.4035.00 Edisi Standar SP3
sumber
Jawaban:
Saya akan menyarankan menggunakan parameter startup -g juga. Tampaknya bekerja untuk kebanyakan orang dan mungkin akan bekerja untuk Anda juga. Satu-satunya kekhawatiran saya adalah bahwa masalah mendasar mungkin tidak terselesaikan. Sebagai contoh jika ada kebocoran memori karena server yang ditautkan, dan MTL ditingkatkan menjadi 512Mb apakah itu hanya periode yang lebih lama antara masalah memori? Saya tidak tahu jawabannya, tetapi saya cenderung setuju dengan UndertheFold karena perfmon mungkin merupakan awal yang baik.
sumber
Pesan kesalahan "Ada memori sistem tidak cukup untuk menjalankan permintaan ini." mengacu pada Virtual Address Space (VAS) yang tidak tersedia dan bukan memori dalam arti konvensional yaitu dalam ruang proses SQL Server.
Mengingat bahwa Anda hanya menjalankan dengan 3GB di server ini dan SQL Server telah ditetapkan hingga 2GB, ini berarti OS dan yang lebih penting apa pun di kotak memiliki kurang dari 1GB untuk dimainkan. Itu tidak banyak memori.
Jika masalah ini memang sebagai akibat dari kebocoran memori maka VAS di luar ruang proses SQL Server (memToLeave) yang sedang dikonsumsi.
Saya akan menyarankan menggunakan parameter startup -g untuk menetapkan lebih banyak memori ke bagian memToLeave.
Lihat artikel berikut untuk informasi lebih lanjut:
http://www.johnsansom.com/sql-server-memory-configuration-determining-memtoleave-settings/
Anda mungkin juga ingin mengurangi pengaturan memori maks SQL Server tapi saya akan melakukan ini sebagai pilihan terakhir.
sumber
Ini bisa terkait dengan kebocoran memori driver server yang terhubung, menurut utas forum ini :
sumber
Saya akan mengatur memori min Anda - sangat mungkin bahwa proses lain ini adalah "mencuri" memori dari SQL
Anda dapat menjalankan penghitung log menggunakan perfmon untuk mengonfirmasi ini dan / atau memberi diri Anda lebih banyak informasi untuk mengidentifikasi apa masalah sebenarnya.
sumber
Referensi diambil dari blog ini!
Ada beberapa alternatif untuk menyelesaikan masalah ini.
Pertama, Periksa pengaturan SQL Server Anda untuk "memori server minimal" dan "memori server maks". Jika Anda menemukan perbedaan yang sangat kecil di kedua nilai, naikkan "memori server maks" Anda.
Kedua, Mengetahui kueri yang sudah berjalan lama dengan informasi penggunaan memorinya dan jika kueri ini dalam status siaga, harap verifikasi dan matikan proses ini. Optimalisasi kinerja basis data adalah hal utama untuk penggunaan memori.
Ketiga, Mengetahui penggunaan indeks untuk permintaan yang berjalan lama karena tanpa pengindeksan sistem yang tepat, DISK I / O Anda meningkat dan secara langsung memengaruhi memori Anda.
Keempat, Periksa ukuran file paging memori virtual dan tingkatkan ukuran file ini.
Kelima, Periksa ukuran "memori min per query" sebenarnya itu secara default 1024 KB tetapi dalam situasi yang jarang terjadi Anda dapat mengurangi ukuran parameter ini. Sebenarnya ini tidak disarankan, tetapi Anda bisa mencobanya.
Keenam, Cobalah untuk mengeksekusi perintah DBCC ini dan sekali lagi ini tidak dianjurkan karena dapat mempengaruhi keseluruhan kinerja server. Tetapi Anda dapat mencoba ini.
sumber