Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analytics Platform Sistemi (PDW)
Microsoft Fabric SQL veritabanı
Hafıza hibsi talep eden ve bekleyen ya da hafıza hibsi alan tüm sorgular hakkında bilgi döndürür. Bellek desteği gerektirmeyen sorgular bu görünümde görünmez. Örneğin, sıralama ve hash birleştirme işlemlerinde sorgu çalıştırma için bellek hakkı verilirken, cümle ORDER BY olmayan sorgularda bellek bağışları olmaz.
Azure SQL Veritabanı'nda dinamik yönetim görünümleri, veritabanının kapsamasını etkileyecek bilgileri veya kullanıcının erişimi olan diğer veritabanları hakkındaki bilgileri kullanıma sunmaz. Bu bilgiyi açığa çıkarmamak için, bağlı kiracına ait olmayan veri içeren her satır filtrelenir. Ayrıca, sütunlardaki scheduler_iddeğerler , wait_order, pool_id, group_id filtrelenir; sütun değeri NULL olarak ayarlanır.
Uyarı
Bunu Azure Synapse Analytics veya Analytics Platform Sistemi'nden (PDW) çağırmak için adını sys.dm_pdw_nodes_exec_query_memory_grantskullanın. Bu söz dizimi, Azure Synapse Analytics'teki sunucusuz SQL havuzu tarafından desteklenmez.
| Sütun adı | Veri türü | Açıklama |
|---|---|---|
| session_id | smallint | Bu sorgu çalıştığı oturumun kimliği (SPID) olarak kullanılır. |
| request_id | int | İsteğin tanımlayıcısı. Oturum bağlamında benzersiz. |
| scheduler_id | int | Bu sorguyu zamanlayan zamanlayıcının kimliği. |
| Dop | smallint | Bu sorgunun paralellik derecesi. |
| request_time | datetime | Bu sorgu hafıza izni talep ettiği tarih ve saat. |
| grant_time | datetime | Bu sorgu için hafızanın verildiği tarih ve saat. Henüz bellek verilmediyse NULL. |
| requested_memory_kb | bigint | İstenen toplam bellek miktarı kilobayt cinsinden. |
| granted_memory_kb | bigint | Verilen toplam bellek miktarı kilobayt cinsinden. Bellek henüz verilmediyse NULL olabilir. Tipik bir durumda bu değer ile requested_memory_kbaynı olmalıdır. Indeks oluşturma için, sunucu başlangıçta verilen belleğin ötesinde ek talep üzerine bellek izin verebilir. |
| required_memory_kb | bigint | Bu sorguyu çalıştırmak için gereken minimum bellek kilobayt cinsinden.
requested_memory_kb bu miktardan aynı veya daha büyük. |
| used_memory_kb | bigint | Şu anda kullanılan fiziksel hafıza kilobaytlar cinsinden. |
| max_used_memory_kb | bigint | Bu ana kadar kullanılan maksimum fiziksel hafıza kilobayt cinsinden. |
| query_cost | float | Tahmini sorgu maliyeti. |
| timeout_sec | int | Bu sorgu bellek izin talebini vermeden önce saniyeler içinde zaman aşımı. |
| resource_semaphore_id | smallint | Bu sorguyu beklediği kaynak semaforunun benzersiz olmayan kimliği. Not: Bu ID, SQL Server 2008'den (10.0.x) önceki SQL Server sürümlerinde benzersizdir. Bu değişiklik, sorun giderme sorgusu yürütülmesini etkileyebilir. Daha fazla bilgi için bu makalenin ilerleyen bölümlerinde "Açıklamalar" bölümüne bakınız. |
| queue_id | smallint | Bu sorgu bellek izlerini beklediği bekleme kuyruğunun kimliği. Eğer bellek zaten verilmişse, NULL olabilir. |
| wait_order | int | Belirtilen queue_idsorgu içinde bekleme sorgularının ardışık sırası . Bu değer, diğer sorgular bellek bağışları veya zaman aşımı alırsa belirli bir sorgu için değişebilir. Bellek zaten verilmişse NULL. |
| is_next_candidate | bit | Bir sonraki anı bursu için aday. 1 = Evet 0 = Hayır NULL = Bellek zaten verilmiştir. |
| wait_time_ms | bigint | Bekleme süresi milisaniyelerde. Eğer bellek zaten verilmişse, NULL olabilir. |
| plan_handle | varbinary(64) | Bu sorgu planı için tanımlayıcı. Gerçek XML planını çıkarmak için kullanılır sys.dm_exec_query_plan . |
| sql_handle | varbinary(64) | Bu sorgu için Transact-SQL metin tanımlayıcısı. Eskiden sys.dm_exec_sql_text gerçek Transact-SQL metni almak için kullanılırdı. |
| group_id | int | Bu sorgu çalıştığı iş yükü grubunun kimliği. |
| pool_id | int | Bu iş yükü grubunun ait olduğu kaynak havuzunun ID'si. |
| is_small | tinyint | 1 olarak ayarlandığında, bu hibe küçük kaynak semaforunu kullandığını gösterir. 0 olarak ayarlandığında, düzenli bir semafor kullanıldığını gösterir. |
| ideal_memory_kb | bigint | Her şeyi fiziksel belleğe sığdırmak için bellek veriminin kilobayt cinsinden (KB) boyutu. Bu, kardinalite tahminine dayanır. |
| pdw_node_id | int | Bu dağıtımın üzerinde olduğu düğümün tanımlayıcısı. için geçerlidir: Azure Synapse Analytics, Analiz Platformu Sistemi (PDW) |
| reserved_worker_count | bigint | Rezerve edilen işçi ipliklerinin sayısı. Şunlara uygulanır: SQL Server (SQL Server 2016 (13.x)'dan başlayarak) ve Azure SQL Database |
| used_worker_count | bigint | Şu anda kullanılan işçi ipliklerinin sayısı. Şunlara uygulanır: SQL Server (SQL Server 2016 (13.x)'dan başlayarak) ve Azure SQL Database |
| max_used_worker_count | bigint | Bugüne kadar kullanılan maksimum işçi iş parçacığı . Şunlara uygulanır: SQL Server (SQL Server 2016 (13.x)'dan başlayarak) ve Azure SQL Database |
| reserved_node_bitmap | bigint |
İşçi iş parçacıklarının ayrıldığı NUMA düğümlerinin bitmap haritası. Şunlara uygulanır: SQL Server (SQL Server 2016 (13.x)'dan başlayarak) ve Azure SQL Database |
Permissions
SQL Server'da ise izin gerekiyor VIEW SERVER STATE .
Azure SQL Veritabanı için, veritabanında izin gerektirir VIEW DATABASE STATE .
SQL Server 2022 ve üzeri için izinler
Sunucuda SUNUCU PERFORMANS DURUMUNU GÖRÜNTÜLE izni gerektirir.
Açıklamalar
Dinamik yönetim görünümlerini içeren veya ORDER BY toplayan sorgular, bellek tüketimini artırabilir ve böylece sorun gidermeye katkıda bulunabilir.
Resource Governor özelliği, veritabanı yöneticisinin sunucu kaynaklarını en fazla 64 havuza kadar kaynak havuzları arasında dağıtmasını sağlar. SQL Server 2008 (10.0.x) ile itibaren, her havuz küçük bağımsız bir sunucu örneği gibi davranır ve iki semafor gerektirir. Geri sys.dm_exec_query_resource_semaphores dönen satır sayısı, SQL Server 2005'te (9.x) döndürülen satırlardan 20 katına kadar fazla olabilir.
Örnekler
Sorgu zamanlatımı için tipik bir hata ayıklama senaryosu aşağıdakileri inceleyebilir:
Genel sistem bellek durumunu sys.dm_os_memory_clerks, sys.dm_os_sys_info ve çeşitli performans sayacları kullanarak kontrol edin.
Sorgu yürütme belleği rezervasyonlarını kontrol
sys.dm_os_memory_clerksedin, buradatype = 'MEMORYCLERK_SQLQERESERVATIONS'.Hibeiçin 1 bekleyen soruları şu adresle
sys.dm_exec_query_memory_grantskontrol edin:--Find all queries waiting in the memory queue SELECT * FROM sys.dm_exec_query_memory_grants WHERE grant_time IS NULL;1 Bu senaryoda, bekleme türü genellikle RESOURCE_SEMAPHORE. Daha fazla bilgi için bkz. sys.dm_os_wait_stats (Transact-SQL).
Bellek izleri olan sorguları sys.dm_exec_cached_plans (Transact-SQL) ve sys.dm_exec_query_plan (Transact-SQL) kullanarak önbellekte arama
-- retrieve every query plan from the plan cache USE master; GO SELECT * FROM sys.dm_exec_cached_plans cp CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle); GOEğer bir kaçış sorgusu şüphesi varsa, sys.dm_exec_query_plan sütunundaki Showplan'ı
query_planve sys.dm_exec_sql_text'den sorgu partisinitextinceleyin. Şu anda yürütülen bellek yoğun sorguları sys.dm_exec_requests kullanarak daha fazla inceleyin.--Active requests with memory grants SELECT --Session data s.[session_id], s.open_transaction_count --Memory usage , r.granted_query_memory, mg.grant_time, mg.requested_memory_kb, mg.granted_memory_kb, mg.required_memory_kb, mg.used_memory_kb, mg.max_used_memory_kb --Query , query_text = t.text, input_buffer = ib.event_info, query_plan_xml = qp.query_plan, request_row_count = r.row_count, session_row_count = s.row_count --Session history and status , s.last_request_start_time, s.last_request_end_time, s.reads, s.writes, s.logical_reads, session_status = s.[status], request_status = r.status --Session connection information , s.host_name, s.program_name, s.login_name, s.client_interface_name, s.is_user_process FROM sys.dm_exec_sessions s LEFT OUTER JOIN sys.dm_exec_requests AS r ON r.[session_id] = s.[session_id] LEFT OUTER JOIN sys.dm_exec_query_memory_grants AS mg ON mg.[session_id] = s.[session_id] OUTER APPLY sys.dm_exec_sql_text (r.[sql_handle]) AS t OUTER APPLY sys.dm_exec_input_buffer(s.[session_id], NULL) AS ib OUTER APPLY sys.dm_exec_query_plan (r.[plan_handle]) AS qp WHERE mg.granted_memory_kb > 0 ORDER BY mg.granted_memory_kb desc, mg.requested_memory_kb desc; GO