MSSQLSERVER_8645
Berlaku untuk: SQL Server
Detail
Atribut | Nilai |
---|---|
Nama Produk | SQL Server |
ID Peristiwa | 8645 |
Sumber Kejadian | MSSQLSERVER |
Komponen | SQLEngine |
Nama Simbolis | MEMTIMEDOUT_ERR |
Teks Pesan | Waktu habis terjadi saat menunggu sumber daya memori menjalankan kueri di kumpulan sumber daya '%ls' (%ld). Jalankan ulang kueri. |
Penjelasan
Kesalahan ini muncul jika permintaan SQL Server telah menunggu memori eksekusi kueri (QE) untuk jangka waktu yang lama dan memori tidak tersedia. Memori eksekusi kueri terutama digunakan untuk operasi pengurutan, operasi hash, operasi penyalinan massal, serta pembuatan dan populasi indeks. Kueri yang melakukan salah satu operasi ini meminta peruntukan memori. Jika tidak ada memori yang tersedia, kueri diatur untuk menunggu di RESOURCE_SEMAPHORE hingga memori tersedia. Jika memori tidak tersedia setelah lebih dari 20 menit menunggu, maka SQL Server mengakhiri kueri dengan kesalahan 8645 "Waktu habis terjadi saat menunggu sumber daya memori menjalankan kueri di kumpulan sumber daya 'default'. Nilai batas waktu sedikit bervariasi di antara versi SQL Server. Anda mungkin melihat nilai batas waktu yang ditetapkan di tingkat server dengan melihat timeout_sec
di sys.dm_exec_query_memory_grants.
Penyebab
Kesalahan ini dapat dilihat dalam kaitannya dengan pemberian memori dan penantian berkepanjangan hingga memori tersebut tersedia. Biasanya ketika kueri menyelesaikannya, kueri merilis memori eksekusi yang digunakannya. Oleh karena itu, jika Anda melihat kesalahan ini, itu berarti bahwa kueri kehabisan waktu telah menunggu beberapa permintaan lain selama lebih dari 20 menit untuk menyelesaikan pekerjaan mereka. Mungkin hanya ada satu permintaan tunggal yang mengonsumsi semua memori QE yang tersedia atau mungkin ada banyak permintaan dan bersama-sama pemberian memori mereka telah kelelahan memori QE. Jika Anda memiliki permintaan yang berjalan lama dalam beban kerja, Anda harus mengambil langkah-langkah untuk meningkatkan durasi eksekusinya dan mengurangi jumlah memori QE yang mereka gunakan.
Tindakan pengguna
Jika Anda tidak menggunakan Resource Governor untuk membatasi kumpulan memori untuk beban kerja tertentu, Anda dapat memverifikasi status server dan beban kerja secara keseluruhan. Jika Anda menggunakan Resource Governor, periksa kumpulan sumber daya atau pengaturan grup beban kerja.
Penjelasan terperinci dan langkah-langkah pemecahan masalah tercakup dalam Memecahkan masalah performa lambat atau memori rendah yang disebabkan oleh pemberian memori di SQL Server.
Daftar berikut ini meringkas langkah-langkah yang dirinci dalam artikel tersebut. Langkah-langkah ini dapat membantu mengurangi atau menghilangkan kesalahan memori QE:
Identifikasi permintaan mana di SQL Server yang merupakan peruntukan memori besar atau konsumen memori QE. Untuk informasi selengkapnya, lihat Cara mengidentifikasi tunggu memori eksekusi kueri.
Tulis ulang kueri untuk meminimalkan atau menghindari operasi pengurutan dan hash.
Perbarui statistik dan terus perbarui secara teratur untuk memastikan SQL Server memperkirakan pemberian memori dengan benar.
Buat indeks yang sesuai untuk kueri atau kueri yang diidentifikasi. Indeks dapat mengurangi sejumlah besar baris yang diproses, sehingga mengubah algoritma JOIN dan mengurangi ukuran hibah atau sepenuhnya menghilangkannya.
Gunakan petunjuk OPTION (min_grant_percent = XX, max_grant_percent = XX) dalam kueri Anda jika memungkinkan.
Gunakan Resource Governor untuk membatasi efek penggunaan memori QE hanya pada beban kerja tertentu.
SQL Server 2017 dan 2019 menggunakan pemrosesan kueri adaptif, memungkinkan mekanisme umpan balik peruntukan memori untuk menyesuaikan ukuran pemberian memori secara dinamis pada runtime. Fitur ini dapat mencegah masalah pemberian memori pada awalnya.
Tingkatkan memori SQL Server atau sesuaikan pengaturan yang ada.
Periksa parameter konfigurasi memori SQL Server berikut:
- memori server maks - tingkatkan jika diperlukan
- memori server min
- memori min per kueri
Perhatikan pengaturan yang tidak biasa. Koreksi seperlunya. Memperhitungkan peningkatan persyaratan memori untuk SQL Server. Pengaturan default dan yang direkomendasikan tercantum dalam opsi konfigurasi memori Server.
Tingkatkan memori di tingkat OS (RAM fisik atau virtual).
Verifikasi apakah aplikasi atau layanan lain mengonsumsi memori di server ini. Konfigurasi ulang aplikasi atau layanan yang kurang penting untuk mengonsumsi lebih sedikit memori atau memindahkannya ke server terpisah. Tindakan ini dapat menghilangkan tekanan memori eksternal.
Jalankan perintah DBCC berikut untuk membebaskan beberapa cache memori SQL Server - ukuran sementara.
- DBCC FREESYSTEMCACHE
- DBCC FREESESSIONCACHE
- DBCC FREEPROCCACHE