2008-06-30

Job Adımlarının-Komutlarının Detay Bilgileri

Hangi jobın hangi adımları var? Hangi adımlarda hangi komutlar çalıştırılıyor? sorularını siz de merak ediyorsanız aşağıdaki SQL kodu sorularınıza cevap olacaktır:

SELECT name, step_id , step_name, command
FROM msdb.dbo.sysjobs J INNER JOIN msdb.dbo.sysjobsteps JS ON JS.job_id=J.job_id


--SQL kodu SQL Server 2008 RC0 ve SQL Server 2005 sürümlerinde test edilmiştir.

2008-06-13

SQL Server 2008 ile Oracle'ın Bazı Özelliklerinin Karşılaştırılması

Geçen gün SQL Server 2008 White Papers ı okurken; SQL Server 2008 ile Oracle 11g nin bazı özelliklerinin karşılaştırılması dikkatimi çekti. Merak ettiğim bir konuyu sizlerle de paylaşmak istedim. Ayrıntılı bilgi için SQL Server 2008 Compared to Oracle Database 11g White Paper ını okuyabilirsiniz.

Hem SQL Server 2008 hem de Oracle 11g de olan bazı özellikler:
  1. Feature Microsoft OracleResource Governor
  2. Partition-aligned indexed views

Sadece SQL Server 2008'de olan özellikler:

  1. PowerShell
  2. Policy-Based Management
  3. Filtered indexes
  4. Advanced sparse columns
  5. Multithreaded partition access
  6. Column-prefix compression
  7. Module signing using certificates
  8. SQL Server Data Services

2008-06-12

SPARSE Column and Filtered Index

Merhaba Değerli Okuyucular,

Bugün de CTP5/CTP6 ve RC0 sürümlerini inceleyip, kurcalayıp, test edip bir yanlışlıklarını gördükce sevgili Microsoft amcamıza bugları arzı endam eylemeye çalıştığımız SQL Server 2008'i tanıma ve yeniliklerini keşfetme serüvenümüze kaldığımız yerden devam edeceğiz.

Elalem yapmış bana ne demiyoruz. Elalemin yaptığını bari keşfedip kullanalım diyoruz. İşimiz SQL Server olunca gücümüz de SQL Server oluyor haliyle. SQL ile yatıp SQL ile kalkıp SQL ile çay araları veriyoruz. Aranızdan kıs kıs gülüp alt üstü işiniz gücünüz 3 harfli bir kelime. Gelin görün ki bu 3 harf ile hangi kombinasyonlar ortaya çıkıyor(Dostlar arasında kalsın; düşmanlara çaktırmayın:) 3 harfli bir kombinasyonun en fazla 6 farklı çeşidi olur )?

Lafı fazla uzatmadan ve sizleri SQL'den soğutmadan edebi metinleri bırakıp işin teknik kısmına gelelim.

SQL Server 2008 ile birlikte sparse column ve filtered index geliyor. Bana ne demeyin bakarsınız işinizi kolaylaştırıp hızlandırır. Benden söylemesi ve uyarması gerisi size kalmış.

Sparse column ı özellikle entity yapısındaki kayıtlarımız için kullanabiliriz. Onlarca alanınız var ama bu alanlarınızın büyük çoğunluğu boş(null), çok az kısmı dolu ise sparse column özelliği tam size göre. Sparse column null değerli alanlar için 0 diğer alanlar için 2-4 byte arasında yer kaplıyor. Sparse column ile yerden %20-%40 oranında tasarruf sağlanabilir aynı şekilde %20 ye varan CPU performansında iyileşme görülebilir. Daha detaylı bilgi için bkz. Using Sparse Columns

SQL Server 2008 ile birlikte ilk defa tanışacağımız hatta severek kullanacağımız Filtered Index; klasik indexlerimize WHERE koşulunun eklenmiş hali. Filtered Index belirli koşullar altındaki kayıtları indexliyor.

Örneğin Vatandaslik tablomuzda 1953 yılından önce doğan vatandaşlarımızı bir indexte tutmak isteyelim:

CREATE NONCLUSTERED INDEX [indVatandas1953] ON [dbo].[Vatandaslik]
(
[DogumTarihi] ASC
)
WHERE ([DogumTarihi]<'1953-01-01')
ON [PRIMARY]

Peki iyi güzel de bu bize ne sağlayacak? Tabiki bu sayede index'imiz daha az yer kaplayıp daha hızlı olacak. Filtered index ile ilgili detaylı bilgi için bkz.Filtered Index Design Guidelines

Not:Filtered Index ile ilgili SQL kodu SQL Server 2008 RC0 ile test edilmiştir.

2008-06-10

SQL Server 2008 RC0 Yayında

Microsoft, SQL Server 2008 Release Candidate 0'ı yayınladı. SQL Server 2008 RC0'ı denemek isteyen okuyucular Microsoft sitesinden kendilerine uygun paketleri indirebilirler.

2008-06-02

SQL Server 2008: Table Valued Parameters

SQL Server 2008 ile birlikte stored procedure parametrelerinde tablo kullanabileceğiz. Bu oldukça güzel bir özellik; eminim bir çoğunuz benim gibi bu özelliği bekliyordu.

Şehir adlarını bir tablo üzerinden toplu bir şekilde bir SP sayesinde ekleyelim. SP miz parametre olarak tablo alacak. Bunun için öncelikle bir test tablosu oluşturalım:

CREATE TABLE TestCity(
[CityId] [int] NOT NULL,
[Name] [varchar](64) NOT NULL
)

Bir tablo tipi oluşturalım:

CREATE TYPE [CityType] AS TABLE(
[CityId] [int] NOT NULL,
[Name] [varchar](64) NOT NULL
)

TestCity tablosuna kayıt ekleyecek SP mizi yazalım:

CREATE PROCEDURE usp_InsCity
@TableParam CityType READONLY
AS
SET NOCOUNT ON
BEGIN
INSERT INTO TestCity Select CityID, Name from @TableParam
END

Şimdi de tem tabloya şehirleri ekleyip kayıt ekleyen SP mizi çalıştıralım:

DECLARE @tmpTest AS CityType

INSERT INTO @tmpTest(CityID,Name) VALUES(6,'İzmir'),(34,'İstanbul'), (63,'Şanlıurfa')
--Kayıt eklemelerini toplu şekilde yapıyoruz:)

EXEC usp_InsCity @tmptest

Not: Tüm Kodlar SQL Server 2008 CTP6 ile test edilmiştir.

2008-06-01

Bir Nesnenin Detay Bilgilerini Görme

Merhaba Değerli Okuyucular,

SQL Server'da bir nesne üzerinde bir şeyler yapmak istediğimde o nesnenin detay bilgilerini bilmek isterim. Örneğin bir tabloya yeni bir alan ekeleneceği zaman bu tablo ne zaman oluşturulmuş, en son ne zaman değişikliğe uğramış, üzerinde kaç Insert, Update, Delete triggerı var, kaç satırdan oluşuyor, fiziksel büyüklüğü ne kadar, tablonun alanları, tablo üzerindeki indexler ve constraintler vs gibi bilgileri anında görebilirsem tablo üzerinde daha sağlıklı bir değişiklik yapma şansım olur. Tüm bu özellikleri bir SP üzerinde yapıp tek noktadan tüm bilgilere erişme ihtiyacı hissettim. Diğer şekilde tablonun bu özelliklerine ulaşmak için tek tek ilgili yerlere bakmak bana sıkıcı ve hammalık gibi geliyor. Bu yüzden SQL server üzerindeki bir nesnenin detay bilgilerini öğrenmek için ObjectInfo adında bir SP oluşturdum. Sizlere de bir faydası dokunur diye günlüğümde yayınlıyorum:

CREATE PROCEDURE [dbo].[ObjectInfo]
@ObjectName [varchar](255) = null
WITH EXECUTE AS CALLER
AS
/*
Yazan : Mehmet GÜZEL
Tarih : 30.05.2005
Açıklama: İlgili nesnenin detay bilgilerini verir.
*/
SET NOCOUNT ON
DECLARE @Type VARCHAR(64)
BEGIN
SELECT @Type = type
FROM sys.objects
WHERE name=@ObjectName
IF @Type ='U'
BEGIN
SELECT OBJECT_NAME(O.object_id),
O.type Type,
O.type_desc AS TypeDesc,
O.create_date AS Create_Date,
O.modify_date AS modify_date,
MAX(S.rowcnt) AS Rows,
8.0*SUM(S.reserved) AS SizeKB,
(SELECT COUNT(1) FROM sys.trigger_events WHERE type_desc='INSERT' AND object_id =O.object_id) AS InsertTrCount,
(SELECT COUNT(1) FROM sys.trigger_events WHERE type_desc='UPDATE' AND object_id =O.object_id ) AS UpdateTrCount,
(SELECT COUNT(1) FROM sys.trigger_events WHERE type_desc='DELETE' AND object_id =O.object_id) AS DeleteTrCount
FROM sys.all_objects O LEFT OUTER JOIN sys.sysindexes S ON O.object_id =S.id
WHERE O.name=@ObjectName
GROUP BY O.object_id,
O.type,
O.type_desc,
O.create_date,
O.modify_date
END
IF @Type ='P'
BEGIN
SELECT type AS Type,
type_desc AS TypeDesc,
create_date AS CreateDate,
modify_date AS ModifyDate
FROM sys.procedures
WHERE name=@ObjectName
END
EXEC sp_help @ObjectName
RETURN 0
END


Not: SP, SQL Server 2005/2008 ortamında geliştirilip derlenmiştir, SQL Server ortamında syntax hataları verebilir.

.::YASAL UYARI::.

©2004-2023 Mehmet GÜZEL, www.mehmetguzel.net

Site içeriği kaynak gösterilmek koşuluyla yayınlanabilir. Yazılan yazı ve yorumlar sadece yazı ve yorum sahiplerini bağlar.