Error 4014 EventId

Bu yazıda SQL Server Error Loglarına düşen hata ilgili bilgi paylaşımı yapacağız. Event viewer Application logları, SQL Server Error loglarınında bilgisini topladığı için bu hataya ilişkin bilgiye Event viewer üzerinden de görüntülenebilecektir.   Error (Event ID: 4014): A fatal error occurred while reading the input stream from the network. The session will be terminated (input error: 0, output error: 0).   Event Viewer => Windows Logs=> Application; SQL Server Error Logs (Error 4014, Severity:20, State:11);   Bu hatanın loglara düşmesinde birden çok sebep olabilir. Bu hatanın düştüğü durumlarda kullanıcılar bazı sorunlar yaşayabilir. Sistemde yığılmalar meydana gelebilir ve Network Latency’ler meydana gelebilir. Teml sebep olarak bu hatanın düşmesine network katmanından gelen sessionların ISS katmanı ile veri tabanı katmanı arasında paket kayıplarından meydana gelmektedir. Büyük paketler içindeki sessionlar kendisine ait bilgiyi kaybettiğinde drop olabilmektedir. Yaşanabilecek olası sonuçların kök sebeplerine baktığımızda karşımıza bazı problemler çıkmaktadır. Bunlardan bazıları; SQL Server’da Implicit transaction’ların açık olması, […]

Error 4014 EventId

Bu yazıda SQL Server Error Loglarına düşen hata ilgili bilgi paylaşımı yapacağız. Event viewer Application logları, SQL Server Error loglarınında bilgisini topladığı için bu hataya ilişkin bilgiye Event viewer üzerinden de görüntülenebilecektir.

 

Error (Event ID: 4014): A fatal error occurred while reading the input stream from the network. The session will be terminated (input error: 0, output error: 0).

 

Event Viewer => Windows Logs=> Application;

SQL Server Error Logs (Error 4014, Severity:20, State:11);

 

Bu hatanın loglara düşmesinde birden çok sebep olabilir. Bu hatanın düştüğü durumlarda kullanıcılar bazı sorunlar yaşayabilir. Sistemde yığılmalar meydana gelebilir ve Network Latency’ler meydana gelebilir. Teml sebep olarak bu hatanın düşmesine network katmanından gelen sessionların ISS katmanı ile veri tabanı katmanı arasında paket kayıplarından meydana gelmektedir. Büyük paketler içindeki sessionlar kendisine ait bilgiyi kaybettiğinde drop olabilmektedir.

Yaşanabilecek olası sonuçların kök sebeplerine baktığımızda karşımıza bazı problemler çıkmaktadır. Bunlardan bazıları;

  1. SQL Server’da Implicit transaction’ların açık olması, yani begin transaction ve commit işlemlerinin default değil manuel olarak bunun açılıp, transaction işlemleri commit edilmez taki siz commit edene kadar. Açık transaction’lar ağ da meydana gelebilecek yoğunluğu artıracağı için bu hatanın oluşmasına neden olacaktır.

 

  1. Network bant genişliğinizin uygulama sunucularından gelen ve giden trafiğinizi kaldırabilecek boyutlarda olmalı. Özellikle Jumbo paketlerde bu sorun ortaya çıkabilir. Bu konu da ağ ile ilgili Jumbo paketlerinizin ağ trafiğinde işlem yapabilmesi için açık olması gerekmektedir. Jumbo paketler yoğun olarak geliyorsa ağ paket boyutunun yapılandırmasını 8192 byte’a çıkarılabilir.

 

  1. TCP Chimney Offloads: Chimney, Microsoft’a network ürünleri sağlayan vendor’lardan biri. Windows kurulumlarından 2003 sonrası bu ürünün özelliği pasif gelmekte fakat bazen açık olabiliyor. IPV4 ve IPV6 üzerinden trafik transferi yapılmakta. Bu özelliği pasife çektikten trafiğin sadece bir kanaldan transferi sağlanacağı için paket kayıpları olma ihtimali azalacaktır. IPV6 üzerinden yükün az olduğu zamanlarda bu test edilebilir.

 

  1. NIC Teaming yapılması,sunucunuzda 2 veya daha fazla network kartı var ise bunları gruplandırarak tek bir kartı gibi çalıştırmak gerekir. Network kartı üzerinde meydana gelebilecek arıza durumunda diğer network kartı üzerinden trafik akışı devam edecektir. Bu şekilde olması load balancing yapacağı için network trafiğinde ki performansı da artıracaktır.

 

  1. Jumbo paketlerin bir pakete sığabilmesi için SQL Server üzerinden Network Packet Size değerini 8192 byte olarak yeninden configure edilebilir. Bu değer yeniden setlenmesi sonrası sistemin belirli bir süre izlenmesi faydalı olacaktır.

 

sp_Configure 'show advanced options',1;

reconfigure

sp_Configure 'network packet size (B)',8192;

reconfigure

sp_Configure

 

  1. Network adaptörlerinin update edilmesi, firmware ve güncel driver’ların update edilmesi bu hatanın giderilmesine ilişkin bir diğer yollardan biri olacaktır.

Aşağıdaki script ile 4014 hatasından kaynaklı paket kayıplarını inceleyebilirsiniz.

;WITH RingBufferConnectivity as

( SELECT

records.record.value('(/Record/@id)[1]', 'int') AS [RecordID],

records.record.value('(/Record/ConnectivityTraceRecord/RecordType)[1]', 'varchar(max)') AS [RecordType],

records.record.value('(/Record/ConnectivityTraceRecord/RecordTime)[1]', 'datetime') AS [RecordTime],

records.record.value('(/Record/ConnectivityTraceRecord/SniConsumerError)[1]', 'int') AS [Error],

records.record.value('(/Record/ConnectivityTraceRecord/State)[1]', 'int') AS [State],

records.record.value('(/Record/ConnectivityTraceRecord/Spid)[1]', 'int') AS [Spid],

records.record.value('(/Record/ConnectivityTraceRecord/RemoteHost)[1]', 'varchar(max)') AS [RemoteHost],

records.record.value('(/Record/ConnectivityTraceRecord/RemotePort)[1]', 'varchar(max)') AS [RemotePort],

records.record.value('(/Record/ConnectivityTraceRecord/LocalHost)[1]', 'varchar(max)') AS [LocalHost]

FROM

( SELECT CAST(record as xml) AS record_data

FROM sys.dm_os_ring_buffers

WHERE ring_buffer_type= 'RING_BUFFER_CONNECTIVITY'

) TabA

CROSS APPLY record_data.nodes('//Record') AS records (record)

)

SELECT RBC.*, m.text

FROM RingBufferConnectivity RBC

LEFT JOIN sys.messages M ON

RBC.Error = M.message_id AND M.language_id = 1033

WHERE RBC.RecordType='Error' and RBC.Error=4014

ORDER BY RBC.RecordTime DESC

 

-XE Events (Extended Events) Query:

/***************************************************************

** Errors reported along with the error counts

****************************************************************/




--Aşağıdaki extend event ile sistemde meydana gelen paket kayıplarını ve neden kayıp olduğunu bulabilirsiniz.




SET NOCOUNT ON




-- Store the XML data in a temporary table

SELECT  CAST(xet.target_data AS XML) AS XMLDATA

INTO    #xeTmpTbl

FROM    sys.dm_xe_session_targets xet

JOIN sys.dm_xe_sessions xe ON ( xe.address = xet.event_session_address )

WHERE   xe.name = 'system_health'




-- Get statistical information about all the errors reported

;WITH    myXEinfo ( EventXML )

AS ( SELECT   C.query('.') EventXML

FROM     #xeTmpTbl a

CROSS APPLY a.XMLDATA.nodes('/RingBufferTarget/event') AS T ( C )

),

myXEErrorInfo ( EventTime, ErrorNum )

AS ( SELECT   EventXML.value('(/event/@timestamp)[1]', 'datetime') AS EventTime ,

EventXML.value('(/event/data/value)[1]', 'int') AS ErrorNum

FROM     myXEinfo

WHERE    EventXML.value('(/event/@name)[1]', 'varchar(255)') = 'error_reported'

)

SELECT  ErrorNum ,

MAX(EventTime) AS LastRecordedEvent ,

MIN(EventTime) AS FirstRecordedEvent ,

COUNT(*) AS Occurrences ,

b.[text] AS ErrDescription

FROM    myXEErrorInfo a

INNER JOIN sys.messages b ON a.ErrorNum = b.message_id

WHERE   b.language_id = SERVERPROPERTY('LCID')

GROUP BY a.ErrorNum ,

b.[text]




--  Get information about each of the errors reported

;

WITH    myXEinfo ( EventXML )

AS ( SELECT   C.query('.') EventXML

FROM     #xeTmpTbl a

CROSS APPLY a.XMLDATA.nodes('/RingBufferTarget/event') AS T ( C )

WHERE    C.query('.').value('(/event/@name)[1]', 'varchar(255)') = 'error_reported'

)

SELECT  EventXML.value('(/event/@timestamp)[1]', 'datetime') AS EventTime ,

EventXML.value('(/event/data/value)[1]', 'int') AS ErrNum ,

EventXML.value('(/event/data/value)[2]', 'int') AS ErrSeverity ,

EventXML.value('(/event/data/value)[3]', 'int') AS ErrState ,

EventXML.value('(/event/data/value)[5]', 'varchar(max)') AS ErrText

--EventXML.value('(/event/action/value)[2]', 'varchar(10)') AS Session_ID

FROM    myXEinfo

ORDER BY EventTime DESC

--  Drop the temporary table

DROP TABLE #xeTmpTbl


/**************************************************************************

** Extract Ring Buffer Information for SQL Server 2008 instances and above

**************************************************************************/

SELECT  CONVERT (VARCHAR(30), GETDATE(), 121) AS run_time ,

DATEADD(ms, ( a.[record_time] - sys.ms_ticks ), GETDATE()) AS [notification_time] ,

a.* ,

sys.ms_ticks AS [current_time]

FROM    ( SELECT    x.value('(//Record/Error/ErrorCode)[1]', 'varchar(30)') AS [error_code] ,

x.value('(//Record/Error/CallingAPIName)[1]', 'varchar(255)') AS [calling_API_name] ,

x.value('(//Record/Error/APIName)[1]', 'varchar(255)') AS [API_name] ,

x.value('(//Record/Error/SPID)[1]', 'int') AS [SPID] ,

x.value('(//Record/@id)[1]', 'bigint') AS [record_id] ,

x.value('(//Record/@type)[1]', 'varchar(30)') AS [type] ,

x.value('(//Record/@time)[1]', 'bigint') AS [record_time]

FROM      ( SELECT    CAST (record AS XML)

FROM      sys.dm_os_ring_buffers

WHERE     ring_buffer_type = 'RING_BUFFER_SECURITY_ERROR'

) AS R ( x )

) a

CROSS JOIN sys.dm_os_sys_info sys

ORDER BY a.[record_time] ASC
Benzer Yazılar

SQL SERVER RIGHT-LEFT PARTITION

SQL Server 5 gün önce

SQL Server’da partitioning, büyük veritabanı tablolarını daha yönetilebilir ve performanslı hale getirmek amacıyla kullanılan bir tekniktir. Bu teknik, tablonun verilerini fiziksel olarak değil, mantıksal olarak parçalara ayırır. Veriler, belirli bir partition function ve partition scheme kullanılarak farklı bölümlere yönlendirilir. Partitioning, özellikle büyük veri kümeleriyle çalışan veri tabanlarında sorgu performansını artırır ve veri yönetimini kolaylaştırır. Partition Function ve Partition Scheme nedir? Partition Function: Verilerin hangi kriterlere göre bölüneceğini belirler. Örneğin, bir tarih aralığına göre verileri ayırmak. Partition Scheme: Verilerin hangi filegroup’larda depolanacağını belirler.   Örnek olarak Range LEFT ve Range RIGHT olmak üzere iki ayrı tabloda partition nasıl yapılır sizlere göstereceğim. İlk olarak Range LEFT olan partition yapısından başlayacağım. Öncelikle Veri tabanıma yeni filegroup ve file ekliyorum Şimdi sıra FUNCTION ve SCHEME oluşturmakta ben tablomu yıllık olarak partition yaptım sizler ihtiyaçlarınız doğrultusunda aylık,günlük vs yapabilirsiniz. LEFT partition dediğimiz olay vermiş olduğunuz tarih aralığına eşit bir veri geldiğinde bu veriyi solundaki partition […]

Veritabanı Recovery Pending Durumu ve Düzeltme Seçenekleri

SQL Server 2 hafta önce

İçindekilerVeritabanı Recovery Pending Durumu Nedir?Veritabanı Neden Recover Pending Duruma Düşer?Recovery Pending Durumu Nasıl Çözülür?SonuçKaynaklarVeritabanı Recovery Pending Durumu Nedir? SQL Server’da veritabanları bazı nedenlere bağlı olarak “Recovery Pending” (Kurtarma Bekleme)  moduna geçebilir. Veritabanın düzgün bir şekilde kapatılmaması, eksik veya bozuk log dosyaları, disk depolama sorunları, sistemde yaşanan anormal şekilde çökmeler veya MS SQL Server’daki hatalar bu duruma sebep olabilir. Recovery durumu, aslında veritabanını tekrar kullanılabilir hale getirmek için bir kurtarma işlemi yürüttüğünü ifade eder ve üç aşamadan oluşur; Analysis (Analiz): Transaction log incelemesi yapılması ve işlemlerin tamamlanma (Commit) durumunun kontrol edilmesi, Redo (Yeniden İşleme): Tamamlanmış (Commit) ancak henüz diske yazılamamış olan işlemlerin yeniden işlenmesi, Undo (Geri Alma): Başlamış (Begin) ancak tamamlanmamış (Commit) işlemlerin  geri alınmasıdır.   Veritabanı Neden Recover Pending Duruma Düşer? SQL Server Restart Süreci SQL Server servisi restart edildiğinde üzerinde bulunan tüm veritabanları tutarlılığın sağlanması için otomatik olarak recovery moduna girer ve redo/undo işlemleri sürecince devam eder. Ani Sistem […]

SQL Server DMV ve DMF – 6

SQL Server 2 hafta önce

Bu yazımızda DMV ve DMF Serimizin 6.sına devam edeceğiz. Bir önceki seride Memory’ye ilişkin DMV ve DMF’leri ele almıştık. Bu yazıda Memory konusunda devam edeceğiz. SQL server’da Memory kavramı en önemli kavramlardan biridir. Özellikle tüm transaction işlemlerinin önce Buffer sonra disk üzerinden devam ettiğini düşünürsek buffer’ın oynadığı kritik rolü daha iyi anlayabiliriz. Bu yazıda Memory’nin durumunu ve monitör edilmesine bakacağız. Özellikle Performans sorunlarında memory konusunda sorun yaşandığı durumda nasıl okumak gerektiği önemli rol oynamaktadır. Hangi database’de, hangi tablo’da sorun yaşandığına ilişkin bilgilere bu paylaşım sonrasında görebileceğiz. SQL Server’ın Memory kullanım durumunu incelediğimde; select physical_memory_in_use_kb/1048576.0 AS ‘physical_memory_in_use (GB)’, locked_page_allocations_kb/1048576.0 AS ‘locked_page_allocations (GB)’, virtual_address_space_committed_kb/1048576.0 AS ‘virtual_address_space_committed (GB)’, available_commit_limit_kb/1048576.0 AS ‘available_commit_limit (GB)’, page_fault_count as ‘page_fault_count’ from  sys.dm_os_process_memory; Görsel – 1   Physical_memory_in_use: Kullanımda olan Fiziksel Memory miktarını gösterir. locked_page_allocations: Memory’de lock’lanmış olan Page’lerin miktarını belirtir. virtual_address_space_contained: SQL Server VAS(Virtual Adress Space) için ayrılan miktarı belirtir. available_commit_limit: SQL Server tarafından kullanılabilecek Memory Miktarını gösterir. […]

0 Yorum

Yorum Yaz

Rastgele