Kategori: Hayatı Kolaylaştıran T-SQL

MSSQL Session Alert

MSSQL Session Alert

MSSQL de Sessionlarınız uygulamadan gelen istekler yüzünden arttı ve bunu kontrol altında tutmak istiyorsunuz ya da belli bir sayıdan fazla session sayınızın artmasını istemiyorsanız aşağıdaki t-sql işinizi görecektir.

 

USE [msdb]
GO

BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END

DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'Session alert',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'No description available.',
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'session_script',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'declare @sessioncount int,
@mail_gönderilecek_kisi nvarchar(max) =''farukerdemm@outlook.com.tr'',-- mail gönderilecek hesap
@msj nvarchar(max) = (select @@SERVERNAME+'' instancenda belirtilen sayıdan fazla session bulunmaktadır.Gerekli Kontrolleri sağlarmısınız?''),
@profle nvarchar(max) =(select name from msdb.dbo.sysmail_profile)

set @sessioncount=( select count(*) from sys.dm_exec_sessions)

if @sessioncount>100 --session sayısı

begin

EXEC msdb.dbo.sp_send_dbmail
@profile_name =@profle, --profil adı
@recipients = @mail_gönderilecek_kisi,
@subject = ''Session Alert'', -- konu başlığı
@body=@msj --Mail içeriği

end
',
@database_name=N'master',
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:

GO

 

 146 total views

MSSQL Kullanılmayan İndexleri Bulmak

MSSQL Kullanılmayan İndexleri Bulmak

SQL Server da bazen performans iyileştirmeleri yaparken sorgulara göre index ekleriz ve sonradan bu indexlere baktığımızda bazılarının gereksiz bazılarının hiç kullanılmadığını görürüz.
Aşağıdaki script kullanılmayan indexleri bulmak için yardımcı olacaktır.

 

SELECT
o.name AS ObjectName
, i.name AS IndexName
, i.index_id AS IndexID
, dm_ius.user_seeks AS UserSeek
, dm_ius.user_scans AS UserScans
, dm_ius.user_lookups AS UserLookups
, dm_ius.user_updates AS UserUpdates
, p.TableRows
, 'DROP INDEX ' + QUOTENAME(i.name)
+ ' ON ' + QUOTENAME(s.name) + '.'
+ QUOTENAME(OBJECT_NAME(dm_ius.OBJECT_ID)) AS 'drop statement'
FROM sys.dm_db_index_usage_stats dm_ius
INNER JOIN sys.indexes i ON i.index_id = dm_ius.index_id
AND dm_ius.OBJECT_ID = i.OBJECT_ID
INNER JOIN sys.objects o ON dm_ius.OBJECT_ID = o.OBJECT_ID
INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
INNER JOIN (SELECT SUM(p.rows) TableRows, p.index_id, p.OBJECT_ID
FROM sys.partitions p GROUP BY p.index_id, p.OBJECT_ID) p
ON p.index_id = dm_ius.index_id AND dm_ius.OBJECT_ID = p.OBJECT_ID
WHERE OBJECTPROPERTY(dm_ius.OBJECT_ID,'IsUserTable') = 1
AND dm_ius.database_id = DB_ID()
AND i.type_desc = 'nonclustered'
AND i.is_primary_key = 0
AND i.is_unique_constraint = 0

ORDER BY (dm_ius.user_seeks + dm_ius.user_scans + dm_ius.user_lookups) ASC
GO

 

 

 54 total views

MSSQL de FULL,DIF ve LOG backupın Ne Zaman  Alındığını Görmek

MSSQL de FULL,DIF ve LOG backupın Ne Zaman Alındığını Görmek

MSSQL Full ,Diff ve Log backupların ne zaman alındığını görmek istiyorsanız …

 742 total views,  1 views today

MSSQL Lock Alert

MSSQL Lock Alert

 Çalışmış olduğunuz  instance da ki lockların sayısını dakika da bir  hesaplayarak sizin belirlemiş olduğunuz sayıdan büyük ise , mail içeriğinde scriptin çalıştığı instance adını ,sınırı aştığına dair uyarı metini sistemde önceden tanımladığınız mail profil ismini otomatik olarak bularak sizin belirteceğiniz mail adresine  bilgilendirme maili atan scripttir.

 712 total views

MSSQL de Biriken Mailleri Temizlemek

MSSQL de Biriken Mailleri Temizlemek

MSSQL  de alert mekanizması kurdunuz ve bir sorun oldu mailleriniz beklediğinizden fazla atıyor  ya da msdb veritabanınız bundan dolayı boyutu artıyor ya da farklı bir sebepten dolayı atılan mail historylerini silmek istediniz. MSSQL de bunun için  msdb.dbo.sysmail_delete_mailitems_sp  prosedürün faydalanabiliriz.
Bu prosedürü kullanmadan önce biraz prosedür hakkında bilgi vermek istedim. Bu makaleye geçmeden önce MSSQL Mail Loglarını İncelemek isimli makaleyi okumanızı tavsiye ederim.

 785 total views

MSSQL Mail Loglarını İncelemek

MSSQL Mail Loglarını İncelemek

MSSQL de herşeyin logları tutulmaktadır nerede ve hangi view ,procedure ve tablo ile sorgulandığını bilmek gerekiyor .MSSQL de kime ,ne zaman ve içeriğini öğrenmek isterseniz aşağıdaki t-sql den faydalanabilirsiniz.

 556 total views

Theme: Overlay by Kaira Extra Text
Cape Town, South Africa