sp_server_diagnostics (Transact-sql)
Hakkında tanılama verileri ve sistem durumu bilgilerini yakalar potansiyel başarısızlıkları algılamak üzere SQL Server. Prosedür tekrar modda çalıştırır ve sonuçları düzenli olarak gönderir. Düzenli veya dac bağlantı çağrılabilir.
Transact-SQL Sözdizim Kuralları
Sözdizimi
sp_server_diagnostics [@repeat_interval =] 'repeat_interval_in_seconds'
Bağımsız değişkenler
@ repeat_interval =] 'repeat_interval_in_seconds'
Hangi saklı yordamı sürekli sağlık bilgi göndermek için çalışır zaman aralığını gösterir.repeat_interval_in_secondsise intvarsayılan olarak 0. Geçerli parametre değerleri 0, veya herhangi bir değere eşit ya da fazla 5 vardır. Tam veri döndürmek için en az 5 saniye çalıştırmak saklı yordam vardır. Yineleme modunda çalıştırmak bir saklı yordam için en düşük değer 5 saniyedir.
Bu parametre belirtilmezse, ya da belirtilen değer 0 ise, saklı yordam veri bir zaman ve çıkın dönecektir.
Belirtilen değeri en küçük değerden daha küçük ise, bir hata yükseltmek ve hiçbir şey dönmek.
Belirtilen değere eşit ya da fazla 5 ise, saklı yordam bunu el ile iptal kadar sağlık durumuna dönmek için tekrar tekrar çalıştırır.
Dönüş Kodu Değerleri
0 (başarılı) veya 1 (hata)
Sonuç Kümeleri
sp_server_diagnostics bilgisini döndürür
Sütun |
Veri türü |
Açıklama |
---|---|---|
creation_time |
Datetime |
Satır oluşturma zaman damgası gösterir. Her satır tek bir satır kümesi aynı zaman damgası vardır. |
bileşeni |
Varchar(20) |
Bileşenin adını gösterir:
|
Devlet |
Int |
Bileşen sağlık durumunu gösterir:
|
State_desc |
Varchar(20) |
Durum sütunu tanımlar. Durum sütunundaki değerler karşılık gelen açıklamaları şunlardır:
|
veri |
Varchar (max) |
Bileşene özgü verileri belirtir. |
Beş bileşenleri açıklamaları şunlardır:
Sistem: topladığı verileri bir sistem açısından spinlocks, şiddetli işleme koşulları, verimli olmayan görevler, sayfa hataları ve cpu kullanımı. Bu bilgiler ise üreten bir genel sağlık durumu tavsiye.
Kaynak: fiziksel ve sanal bellek arabellek havuzu sayfa, önbellek ve diğer bellek nesneleri üzerinde bir kaynak açısından topladığı verileri. Bu bilgiler, bir genel sağlık durumu öneri oluşturur.
query_processing: topladığı verileri bir sorgu işleme açısından üzerinde çalışan iş parçacıkları, görevleri, türleri, cpu yoğun oturumları ve engelleme görevleri bekleyin. Bu bilgiler, bir genel sağlık durumu öneri oluşturur.
io_subsystem: IO üzerinde veri toplar. Tanılama verileri ek olarak, bu bileşen bir temiz sağlıklı veya uyarı sağlık durumu yalnızca bir g/Ç alt üretir.
olaylar: topladığı verileri ve yüzey hataları ve olayları halka arabelleği istisnalar ile ilgili ayrıntıları da dahil olmak üzere sunucu tarafından kaydedilen ilgi saklı yordam aracılığıyla halka arabelleği olaylar hakkında dışarı-in bellek, Planlayıcı izleyici, arabellek havuzu, spinlocks, güvenlik ve bağlantı bellek ayırıcı. Olaylar her zaman 0 durumu gösterir.
Açıklamalar
Hata durumunda perspektif, sistem, kaynak ve query_processing bileşenleri hata algılama için io_subsystem ve olay bileşenleri yalnızca tanılama amacıyla kullanılacak olabilir süre kaldıraçlı.
Aşağıdaki tabloda, ilişkili sağlık durumlarına bileşenleri eşleştirir.
Bileşenler |
(1) Temiz |
Uyarı (2) |
Hata (3) |
Bilinmeyenler (0) |
---|---|---|---|---|
sistem |
x |
x |
x |
|
kaynak |
x |
x |
x |
|
query_processing |
x |
x |
x |
|
io_subsystem |
x |
x |
||
olaylar |
x |
Her satır (x) bileşeni için geçerli sağlık durumlarını gösterir. Örneğin, io_subsystem ya da Haritayı temiz ya da uyarı olacaktır. Hata durumları göstermez.
İzinler
Sunucu üzerindeki VIEW server state izni gerektirir.
Örnekler
Sağlık bilgileri yakalamak ve SQL Server dışında bulunan bir dosyaya kaydetmek için genişletilmiş oturumlar kullanmak iyi bir uygulamadır. Bu nedenle, bir hata ise hala erişebilirsiniz. Aşağıdaki örnek çıkış bir olay oturumu bir dosyaya kaydeder:
CREATE EVENT SESSION [diag]
ON SERVER
ADD EVENT [sp_server_diagnostics_component_result] (set collect_data=1)
ADD TARGET [asynchronous_file_target] (set filename='c:\temp\diag.xel')
GO
ALTER EVENT SESSION [diag]
ON SERVER STATE = start
GO
CREATE EVENT SESSION [diag]
ON SERVER
ADD EVENT [sp_server_diagnostics_component_result] (set collect_data=1)
ADD TARGET [asynchronous_file_target] (set filename='c:\temp\diag.xel')
GO
ALTER EVENT SESSION [diag]
ON SERVER STATE = start
GO
Aşağıdaki örnek sorgu, genişletilmiş oturumu günlük dosyasını okur:
SELECT
xml_data.value('(/event/@name)[1]','varchar(max)') AS Name
, xml_data.value('(/event/@package)[1]', 'varchar(max)') AS Package
, xml_data.value('(/event/@timestamp)[1]', 'datetime') AS 'Time'
, xml_data.value('(/event/data[@name=''component'']/value)[1]','varchar(max)') AS Component
, xml_data.value('(/event/data[@name=''state'']/value)[1]','int') AS State
, xml_data.value('(/event/data[@name=''state_desc'']/value)[1]','varchar(max)') AS State_desc
, xml_data.query('(/event/data[@name="data"]/value/*)') AS Data
FROM
(
SELECT
object_name as event
,CONVERT(xml, event_data) as xml_data
FROM
sys.fn_xe_file_target_read_file('C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\*.xel', NULL, NULL, NULL)
)
AS XEventData
ORDER BY time
SELECT
xml_data.value('(/event/@name)[1]','varchar(max)') AS Name
, xml_data.value('(/event/@package)[1]', 'varchar(max)') AS Package
, xml_data.value('(/event/@timestamp)[1]', 'datetime') AS 'Time'
, xml_data.value('(/event/data[@name=''component'']/value)[1]','varchar(max)') AS Component
, xml_data.value('(/event/data[@name=''state'']/value)[1]','int') AS State
, xml_data.value('(/event/data[@name=''state_desc'']/value)[1]','varchar(max)') AS State_desc
, xml_data.query('(/event/data[@name="data"]/value/*)') AS Data
FROM
(
SELECT
object_name as event
,CONVERT(xml, event_data) as xml_data
FROM
sys.fn_xe_file_target_read_file('C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\*.xel', NULL, NULL, NULL)
)
AS XEventData
ORDER BY time
Aşağıdaki örnek sp_server_diagnostics Tablo tekrarı olmayan modda çıktısını yakalar:
CREATE TABLE SpServerDiagnosticsResult
(
create_time DateTime,
component_name nvarchar(20),
state int,
state_desc nvarchar(20),
data nvarchar(max)
)
INSERT INTO SpServerDiagnosticsResult
EXEC sp_server_diagnostics
CREATE TABLE SpServerDiagnosticsResult
(
create_time DateTime,
component_name nvarchar(20),
state int,
state_desc nvarchar(20),
data nvarchar(max)
)
INSERT INTO SpServerDiagnosticsResult
EXEC sp_server_diagnostics