SQL Server DMV ve DMF – 2

Bu yazımızda DMV ve DMF serimizin 2.sine devam edeceğiz. Yazımızda sql server query execution sonuçlarını montior etme ve bunları nasıl anlamlandırabileceğimize bakacağız. Yazı sonunda hazır olarak çoğumuzun kullandığı bu DMV ve DMF’lerin nerede ve ne için kullanıldığını öğrenmiş olacağız. Bu seride Connection, Session ve Request bölümlerini inceleyeceğiz. Task ve Worker bölümleri operating system ile alakalı olduğundan dolayı bir sonraki bölümde onları ele alacağız. SQL Server bir session’ın process’i aşağıdaki gibi gerçekleşmektedir. Görsel – 1 Bu süreci detaylandırmak istersek adım adım aşağıda bunları ele alabiliriz. Sql Server’da connection yapıldıktan sonra unique olarak kendine özel bir session alır. Görsel – 2 session_id: Session’ın Id’si connect_time: Connection’ın gerçekleştirildiği tarih net_transport: SQL Server’a gerçekleştirilen bağlantı türü auth_scheme: Gerçekleştirilen bağlantının tipi client_net_address: Bağlantı gerçekleştiren Session’ın IP bilgisi num_reads: Session’ın yapmış olduğu okuma sayısı num_writes: Yapmış olduğu yazma sayısı last_read: Yapılan son okumanın tarihi last_write: Yapılan son yazmanın tarihi   Görsel – 3 ve Sql Server […]

SQL Server DMV ve DMF – 2

Bu yazımızda DMV ve DMF serimizin 2.sine devam edeceğiz. Yazımızda sql server query execution sonuçlarını montior etme ve bunları nasıl anlamlandırabileceğimize bakacağız. Yazı sonunda hazır olarak çoğumuzun kullandığı bu DMV ve DMF’lerin nerede ve ne için kullanıldığını öğrenmiş olacağız. Bu seride Connection, Session ve Request bölümlerini inceleyeceğiz. Task ve Worker bölümleri operating system ile alakalı olduğundan dolayı bir sonraki bölümde onları ele alacağız.

SQL Server bir session’ın process’i aşağıdaki gibi gerçekleşmektedir.

Görsel – 1

Bu süreci detaylandırmak istersek adım adım aşağıda bunları ele alabiliriz.

Sql Server’da connection yapıldıktan sonra unique olarak kendine özel bir session alır.

Görsel – 2

session_id: Session’ın Id’si

connect_time: Connection’ın gerçekleştirildiği tarih

net_transport: SQL Server’a gerçekleştirilen bağlantı türü

auth_scheme: Gerçekleştirilen bağlantının tipi

client_net_address: Bağlantı gerçekleştiren Session’ın IP bilgisi

num_reads: Session’ın yapmış olduğu okuma sayısı

num_writes: Yapmış olduğu yazma sayısı

last_read: Yapılan son okumanın tarihi

last_write: Yapılan son yazmanın tarihi

 

Görsel – 3

ve Sql Server bu session’u tanımak ve takip etmek için bir değer atar biz buna Session Process Id ya da SPID deriz. Query ekranında hangi session’ı aldığımızı görmek istersek;

select @@SPID

komutu ile

 

Görsel – 4

Ya da query ekranından rahatlıkla görebiliriz.

Görsel – 5

SessionId alan connection’umuz yeni bir istekte bulunacaktır. İstekte bulunan session’ların bilgisini aşağıdaki komut yardımı ile öğrenebiliriz.

SELECT session_id, login_time, status

FROM sys.dm_exec_sessions

WHERE host_name IS NULL;

 

Görsel – 6

Connection alan bu sessionId’leri ortak bu dmv’leri joinleyerek bir ekranda sonuca ulaşabilirim.

SELECT DES.session_id,DES.login_name, DB_NAME(DES.database_id) AS DB,

num_reads, num_writes, last_read, last_write status,DES.program_name

FROM sys.dm_exec_sessions AS DES

JOIN sys.dm_exec_connections AS DEC

ON DEC.session_id = DES.session_id;

Görsel – 7

 

Connection gerçekleştirilen sessionlar, sql server üzerinde ihtiyaçları doğrultusunda isteklerde bulunurlar biz bunlara Request diye adlandırırız.

Bu requestleri sys.dm_exec_requests DMV’si ile görebiliriz. Peki bana sys.dm_exec_requests ile neleri görebilirim.

1-) Uzun çalışan sorgularım varsa bunları görebilirim ve bu sorguları görebilmem için sys.dm_exec_sql_text DMF’si ile cross ettiğimde bana sorguya ait text bilgisine ulaşmamı sağlayacaktır.

SELECT session_id, start_time, status, command, total_elapsed_time, text

FROM sys.dm_exec_requests

CROSS APPLY sys.dm_exec_sql_text(sql_handle)

WHERE status = 'running'

ORDER BY total_elapsed_time DESC;

Görsel – 8

 

2-) Wait types ve Wait Times (Bekleme Tipi ve türlerini) bulmama ve analiz etmeme, Bloklayan session ve sorguları bulmama yardımcı olur.

 

SELECT session_id, wait_type, wait_time, blocking_session_id, text

FROM sys.dm_exec_requests

CROSS APPLY sys.dm_exec_sql_text(sql_handle)

WHERE wait_type IS NOT NULL

ORDER BY wait_time DESC;

Görsel – 9

3-) Sorgu bazlı kaynak kullanımını öğrenmemde yardımcı olur.

 

SELECT session_id, command, cpu_time, reads, writes, logical_reads, text

FROM sys.dm_exec_requests

CROSS APPLY sys.dm_exec_sql_text(sql_handle)

ORDER BY cpu_time DESC, reads DESC, logical_reads DESC;

Görsel – 10

 

4-) Komut ve Sorguların planlarını öğrenmeme yardımcı olacaktır. Burada sys.dm_exec_query_plan DMF’si ile CROSS yaparak elde edebilirim.

 

SELECT r.session_id, r.status, r.command, q.query_plan

FROM sys.dm_exec_requests r

CROSS APPLY sys.dm_exec_query_plan(r.plan_handle) q

Görsel – 11

5-) Başlatmış olduğum işlemlerin ne kadar sürede biteceğini görebilirim.

  • ALTER INDEX REORGANIZE
  • AUTO_SHRINK option with ALTER DATABASE
  • BACKUP DATABASE
  • CREATE INDEX
  • DBCC CHECKDB
  • DBCC CHECKFILEGROUP
  • DBCC CHECKTABLE
  • DBCC INDEXDEFRAG
  • DBCC SHRINKDATABASE
  • DBCC SHRINKFILE
  • KILL (Transact-SQL)
  • RESTORE DATABASE,
  • UPDATE STATISTICS

 

SELECT session_id,

start_time,

percent_complete,

estimated_completion_time,

estimated_completion_time/(1000*60) AS EstimatedCompletionTimeInMinutes

FROM sys.dm_exec_requests

WHERE command ='RESTORE DATABASE'-- buraya yukarıdaki başlattığım işlemi command olarak girdiğimde onunla ilgili sonuca ulaşabilirim.

ORDER BY estimated_completion_time

 

SQL Server execution, DMV ve DMF’leri genel olarak birbiri ilen olan ilişkilerini incelediğimizde bize detaylı olarak bilgi verecektir. Son olarak birlikte olan ilişkilerini görmek ve incelemek istersek eğer bize aşağıdaki sorgu yardımcı olacaktır.

 

 

select

DB_NAME(DES.database_id) AS DB,

DEC.session_id,DEC.num_reads,DEC.num_writes,DEC.client_net_address ,DEC.connect_time,DEST.text,

DES.database_id,DES.cpu_time,DES.logical_reads,DES.login_name,

DER.blocking_session_id,DER.command, DER.percent_complete,DER.plan_handle, DES.open_transaction_count

from sys.dm_exec_connections DEC

Cross apply sys.dm_exec_sql_text(DEC.most_recent_sql_handle) DEST

join sys.dm_exec_sessions DES on DEC.session_id = DES.session_id

join sys.dm_exec_requests DER on der.session_id = DES.session_id
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 […]

SQL SERVER PARTITION SPLIT-MERGE

T-SQL 5 gün önce

Partitioning Nedir? SQL Server’da partitioning (bölümleme), büyük veritabanlarını yönetilebilir parçalara ayırmak amacıyla kullanılan bir tekniktir. Bu sayede büyük veri setlerinin yönetimi daha verimli hale gelir. Tabloyu veya indeksleri birden fazla bölüme ayırarak, her bölümün ayrı bir veri dosyasında saklanmasını sağlarsınız. Bu, sorgu performansını artırabilir ve bakım işlemlerini kolaylaştırabilir. Partition Range Split ve Merge: Range Split: Partitioning aralığını (range) bölme işlemi, mevcut bir partition’un iki ayrı bölüme ayrılması anlamına gelir. Bu, veri büyüdükçe daha ince kontrol sağlamak için yapılabilir. Merge: Partition’ları birleştirme işlemi, veritabanı yapısını sadeleştirmek veya daha büyük veri kümelerini tek bir partition içinde toplamak için kullanılır. Partition split ve merge işlemleri yaparken kullanılan partition tipi çok önemlidir. Range RIGHT ve Range LEFT arasında bazı önemli temel farklar bulunmaktadır. Bu farklar var olan partition yapınızı güncellemek,yeni bir bölümlemeye sahip olmak istediğinizde hali hazırda kullanımda olan partition bölümlemenizin bozulmasına sebebiyet verebilir. Peki nedir bu Farklar; Tablonuzda Range LEFT olan bir 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 […]

0 Yorum

Yorum Yaz

Rastgele