Tag Archives: sql

Çalışan Sql Sorgularını ve Sürelerini Bulmak

Darboğazlarla karşılaştığımızda ne yaparız?
Tabiki sebep olan işlemi bulmak isteriz..

İşte size bu iş için kısa bir çözüm.

SELECT sqltext.TEXT,
req.session_id,
req.status,
req.command,
req.cpu_time,
req.total_elapsed_time
FROM sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext

Bir diğer Sql i de Pinal Dave den alıntı yapıyorum:

SELECT
db.name DBName,
tl.request_session_id,
wt.blocking_session_id,
OBJECT_NAME(p.OBJECT_ID) BlockedObjectName,
tl.resource_type,
h1.TEXT AS RequestingText,
h2.TEXT AS BlockingTest,
tl.request_mode
FROM sys.dm_tran_locks AS tl
INNER JOIN sys.databases db ON db.database_id = tl.resource_database_id
INNER JOIN sys.dm_os_waiting_tasks AS wt ON tl.lock_owner_address = wt.resource_address
INNER JOIN sys.partitions AS p ON p.hobt_id = tl.resource_associated_entity_id
INNER JOIN sys.dm_exec_connections ec1 ON ec1.session_id = tl.request_session_id
INNER JOIN sys.dm_exec_connections ec2 ON ec2.session_id = wt.blocking_session_id
CROSS APPLY sys.dm_exec_sql_text(ec1.most_recent_sql_handle) AS h1
CROSS APPLY sys.dm_exec_sql_text(ec2.most_recent_sql_handle) AS h2
GO

Detaylar için :

http://blog.sqlauthority.com/2010/10/06/sql-server-quickest-way-to-identify-blocking-query-and-resolution-dirty-solution/

Filtrelenmiş indexlerin nimetlerini araştırırken bulduğum güzel bir yazıyı  paylaşmak istiyorum. Aslında belli bir kritere göre nunclustered indexleri silme ile ilgili bir yazı arıyordum. Baktım güzel bilgiler var okuma ve paylaşma gereği hissettim. Buyrun (bu yazınınöncüsü de var aslında)

Sql Server Çok Sayıda Satırı Silme

Bazen çok sayıda satırı silmeniz gerekebilir. “Çok sayıda” biraz göreceli bir kavram olduğu için izah etmekte fayda var. Burada bahsedilen “çok sayıda” benim karşılaştığım 100 milyon satır gibi durumlar olabileceği gibi 10 bin satır gibi de olabilir. 10 bin satır altında böyle bir işleme bence gerek yok. Yalnız bazı istisnai durumlarda 10 binlik silme işleminde de gerekebilir. Örneğin çok fazla trigger a sahip olan tablolardan silme işlemi yaparken.

Ben genelde bu tür işlemleri sqlserver görevi oluşturarak ve sistemin en az yoğun olduğu saatlere zamanlayarak gerçekleştiriyorum. Size de tavsiyem budur. Yalnız burada dikkat edilmesi gereken bir konu daha mevcut, o da bu adreste izah edilmekte.

 

 DECLARE @RowsDeleted INTEGER
 DECLARE @RowPerDeletion INTEGER
 DECLARE @Yil INTEGER
 
 SET @RowPerDeletion = 10000
 SET @RowsDeleted = 1
 
 WHILE (@RowsDeleted > 0)
 BEGIN
 DELETE TOP(@RowPerDeletion)  — isterseniz filtreleme de yapabilirsiniz
 SET @RowsDeleted = @@ROWCOUNT
 END