MEMPERBAIKI: Masalah kinerja yang terjadi di lingkungan NUMA selama asing halaman pemrosesan di SQL Server 2012 atau SQL Server 2014

BUG #: 201012 (pemeliharaan konten) VSTS:1952739

Gejala

Di lingkungan NUMA, Microsoft SQL Server mengalami satu atau lebih masalah kinerja berikut ini:

  • SQL Server proses pengalaman penggunaan CPU yang berlebihan.

  • Permintaan memakan waktu lama untuk diselesaikan.

  • Aplikasi atau pekerjaan agen Server SQL mengalami waktu habis permintaan atau waktu sambungan habis.

  • SQL Server proses restart dengan layanan Cluster.

Selain itu, Anda mungkin mengalami gejala berikut ini:

  • Peningkatan nilai untuk SOS_PHYS_PAGE_CACHE menunggu jenis ketika Anda meminta sys.dm_os_wait_stats tampilan manajemen dinamis (DMV)

  • Peningkatan nilai untuk CMEMTHREAD menunggu jenis dan SOS_SUSPEND_QUEUE spinlock ketika Anda meminta sys.dm_os_spinlock_stats DMV

Pemecahan masalah

Informasi pembaruan kumulatif

Masalah pertama kali diperbaiki dalam pemutakhiran kumulatif berikut ini dari SQL Server.

Pemutakhiran kumulatif 2 untuk SQL Server 2014/en-us/help/2967546

Pemutakhiran kumulatif 1 untuk SQL Server 2014/en-us/help/2931693

Pembaruan kumulatif 9 untuk SQL Server 2012 SP1/en-us/help/2931078

Setiap pembaruan kumulatif yang baru untuk SQL Server berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan pembaruan kumulatif sebelumnya. Periksa pembaruan kumulatif terbaru untuk SQL Server:


Informasi Hotfix
Tersedia hotfix yang didukung dari Microsoft. Namun, hotfix ini ditujukan untuk memperbaiki masalah yang dijelaskan di artikel ini. Menerapkan hotfix ini hanya ke sistem yang mengalami masalah khusus ini.

Apabila hotfix tersedia untuk diunduh, ada bagian "Tersedia Unduhan Hotfix" di bagian atas artikel Pangkalan Pengetahuan ini. Jika bagian ini tidak muncul, kirimkan permintaan ke layanan pelanggan Microsoft dan dukungan untuk mendapatkan hotfix.

Catatan Jika terjadi masalah tambahan atau apabila pemecahan masalah apa pun diperlukan, Anda mungkin harus membuat permintaan layanan secara terpisah. Biaya dukungan biasa akan berlaku untuk dukungan tambahan pertanyaan dan masalah yang tidak memenuhi syarat untuk hotfix ini. Untuk daftar lengkap nomor telepon layanan pelanggan Microsoft dan dukungan atau untuk membuat permintaan layanan terpisah, kunjungi situs web Microsoft berikut:

http://support.microsoft.com/contactus/?ws=supportCatatan Formulir "Tersedia Unduhan Hotfix" menampilkan bahasa hotfix tersedia. Jika Anda tidak melihat bahasa Anda, hal ini karena hotfix tidak tersedia untuk bahasa tersebut.

Penting Perbaikan ini disarankan bagi semua contoh SQL Server yang diinstal di sistem NUMA, tanpa memandang pengaturan mask afinitas SQL Server. Perbaikan ini membahas jauh pemrosesan kinerja penyumbatan di Manajer memori SQL Server.
Masalah pertama kali diperbaiki dalam pemutakhiran kumulatif berikut ini dari SQL Server.

Pemecahan masalah

Untuk mengatasi masalah ini, Tambah nilai batas waktu masuk dan permintaan untuk aplikasi Anda.

Catatan Pemecahan masalah ini mungkin terbatas pada efek. Kami menyarankan agar Anda menerapkan perbaikan terbaru untuk mengatasi masalah yang dijelaskan di bagian "Gejala".

Status

Microsoft telah memastikan bahwa ini merupakan masalah di dalam produk Microsoft sebagaimana tercantum di bagian "Berlaku untuk".

Informasi lebih lanjut

Saat Manajer memori Microsoft SQL Server mengalokasikan memori untuk node dalam akses memori non-seragam (NUMA)-lingkungan diaktifkan, Windows dapat mengalokasikan memori dari kedua lokal maupun jauh node (disebut sebagai "jauh" atau "asing" halaman) sampai target yang diinginkan untuk setiap node tercapai. Karena "halaman jauh" tersebut tidak ideal dari sudut pandang kinerja, proses SQL Server mencoba menetapkan buffer pergi ke simpul memori yang tepat atau rilis Halaman ini kembali ke sistem operasi. "Pengolahan jauh" ini dapat CPU intensif dan menyebabkan penurunan dalam tingkat batch selama periode peningkatan penggunaan CPU.

Saat simpul lokal mencapai target memori, alur kerja bantuan jauh node mencapai target mereka. Alokasi simpul jauh dan rilis buffer jauh di node yang sama dapat terjadi pada saat yang sama. Ini terjadi karena jalur kode ini dilindungi oleh sinkronisasi objek yang sama. Hal ini menyebabkan sanggahan, yang menyebabkan peningkatan penggunaan CPU dan menunggu lama waktu.

Saat ini rancangan selama rilis blok jauh, kami terlebih dahulu unmap halaman dan kemudian gratis secara fisik halaman cache. Selama alokasi, kami lagi mengalokasikan halaman dan melakukan pemetaan lagi. Hal ini menyebabkan akses ke halaman fisik cache dan menambah sanggahan fisik halaman cache kunci.

Perubahan dari hotfix ini menambahkan satu parameter ReleaseAwayBlock untuk menunjukkan bahwa halaman harus unmapped hanya dan tidak dibebaskan ke cache. Ketika bendera diatur, halaman yang hanya unmapped, dan array PFN untuk halaman unmapped kembali. Selama alokasi, ini kembali PFN array digunakan untuk langsung menghubungi MapUserPhysicalPages. Oleh karena itu, tembolok halaman fisik tidak diakses.

Informasi tumpukan panggilanntdll!ZwSignalAndWaitForSingleObjectkernel32!SignalObjectAndWait
sqldk!SystemThread::SignalAndWait
sqldk!SOS_Scheduler::Switch
sqldk!SOS_Scheduler::SuspendNonPreemptive
sqldk!SOS_Scheduler::Suspend
sqldk!UnfairRecursiveMutexInternal<SuspendQueueSLock,0>::LongWait
sqldk!UnfairRecursiveMutexInternal<SuspendQueueSLock,0>::Wait
sqldk!UnfairRecursiveMutexInternal<SuspendQueueSLock,0>::Wait
sqldk!TAutoMutex<UnfairRecursiveMutexInternal<SuspendQueueSLock,0>,4294967295>::GetAccess
sqldk!PhysicalPageCache::AllocatePhysicalPages
sqldk!MemoryNode::AllocateUserPhysicalPages
sqldk!SOS_MemoryBlockAllocator::CommitBlockAndCheckNumaLocality
sqldk!SOS_MemoryBlockAllocator::AllocateBlock
sqldk!SOS_MemoryWorkSpace::AllocatePage
sqldk!MemoryNode::AllocatePagesInternal
sqldk!MemoryClerkInternal::GetParentBrokerType
sqldk!MemoryClerkInternal::AllocatePages
sqldk!MemoryObjectFactory::CreateMemObjectInt
sqldk!MemoryObjectFactory::CreateMemObject
sqldk!SOS_UserStore::InitMemoryComponents
sqldk!SOS_UserStore::CreateStore
sqllang!FCreateAccessCheckResultStore
sqllang!CUserToken::InitToken
sqllang!CreateUserToken
sqllang!CUEnvTransient::PSecc
sqllang!FCheckDbAccess
sqllang!CSecurityContext::GetUserToken
sqllang!CSecurityContext::IdUser
sqllang!FHasEntityPermissionsWithAuditState
sqllang!FHasEntityPermissions
sqllang!CSQLObject::FPostCacheLookup
sqllang!CSQLSource::EpgParsingGrammar
sqllang!CAutoRestoreParsingGrammar::{ctor}
sqllang!CSQLSource::Transform
sqllang!CSQLSource::Execute
sqllang!CProtocolHeaderInfo::{dtor}
sqllang!process_request
sqllang!process_commands
sqldk!SOS_Task::Param::Execute
sqldk!SOS_Scheduler::RunTask
sqldk!SOS_Scheduler::ProcessTasks
sqldk!SchedulerManager::WorkerEntryPoint
sqldk!SystemThread::RunWorker
sqldk!SystemThreadDispatcher::ProcessWorker
sqldk!SchedulerManager::ThreadEntryPoint
kernel32!BaseThreadInitThunk
ntdll!RtlUserThreadStart

ntdll!ZwSignalAndWaitForSingleObject
kernel32!SignalObjectAndWait
sqldk!SystemThread::SignalAndWait
sqldk!SOS_Scheduler::Switch
sqldk!SOS_Scheduler::SuspendNonPreemptive
sqldk!SOS_Scheduler::Suspend
sqldk!UnfairRecursiveMutexInternal<SuspendQueueSLock,0>::LongWait
sqldk!UnfairRecursiveMutexInternal<SuspendQueueSLock,0>::Wait
sqldk!UnfairRecursiveMutexInternal<SuspendQueueSLock,0>::Wait
sqldk!TAutoMutex<UnfairRecursiveMutexInternal<SuspendQueueSLock,0>,4294967295>::GetAccess
sqldk!PhysicalPageCache::FreePhysicalPages
sqldk!MemoryNode::FreeUserPhysicalPages
sqldk!SOS_MemoryWorkSpace::DeCommitBlock
sqldk!SOS_MemoryBlockAllocator::DeCommitBlock
sqldk!MemoryNode::ReleaseAwayBlocks
sqldk!SOS_MemoryBlockAllocator::CommitBlockAndCheckNumaLocality
sqldk!SOS_MemoryBlockAllocator::AllocateBlock
sqldk!SOS_MemoryWorkSpace::AllocatePage
sqldk!MemoryNode::AllocatePagesInternal
sqldk!MemoryClerkInternal::GetParentBrokerType
sqldk!MemoryClerkInternal::AllocatePages
sqldk!MemoryObjectFactory::CreateMemObjectInt
sqldk!MemoryObjectFactory::CreateMemObject
sqllang!SOS_OS::CreateMemObject
sqllang!PmoNewMemObjNoX
sqllang!TDSSNIClient::ProcessCommon
sqldk!SOS_Task::Param::Execute
sqldk!SOS_Scheduler::RunTask
sqldk!SOS_Scheduler::ProcessTasks
sqldk!SchedulerManager::WorkerEntryPoint
sqldk!SystemThread::RunWorker
sqldk!SystemThreadDispatcher::ProcessWorker
sqldk!SchedulerManager::ThreadEntryPoint
kernel32!BaseThreadInitThunk
ntdll!RtlUserThreadStart

Referensi

Untuk informasi lebih lanjut mengenai cara memahami konsep asing halaman, kunjungi situs posting blog MSDN berikut:

Cara kerjanya: SQL Server (NUMA lokal, asing dan jauh memori blok)

Author:jannaw;
Penulis: v-shysun
Pemeriksa teknis: Bob Dorr; Lingkungan Bob; Ajayj; Sureshka; ramakoni; jannaw; sqlprev
Editor: v-jesits

Perlu bantuan lainnya?

Kembangkan keterampilan Anda
Jelajahi pelatihan
Dapatkan fitur baru terlebih dahulu
Gabung Microsoft Insider

Apakah informasi ini bermanfaat?

Terima kasih atas umpan balik Anda!

Terima kasih atas umpan balik Anda! Sepertinya menghubungkan Anda ke salah satu agen dukungan Office kami akan sangat membantu.

×