2008-09-26

Kadir Gecesi ve Ramazan Bayramı

Kadir Gecenizi ve Ramazan Bayramınızı tebrik ederek; bu mübarek gecenin ve bayramın hayırlara vesile olmasını gücü herşeye Kadir olan Cenab-ı Hak'tan niyaz ederim.

Ya Mütekebbir!
Ben acizim sen Kadir’sin
Ben fakirim sen Rahim’sin
Ben ölüyüm sen Hayy’sın
Ben çaresizim sen Ehad’sin
Ben muhtacım sen Samed’sin
Ben sağırım işiten sensin
Ben körüm gören sensin
Ben dilsizim konuşan sensin
Ben yaratılıyorum yaradan sensin
Ben yokum var eden sensin
Ben hiçim ama emellerim büyüktür
Ben yoksulum ama isteklerim çoktur
Ben isterim çünkü sen büyüksün
Şahit yaz büyüklüğüne bu küçük kalbimi!

2008-08-28

Temporary Table mı Table Variable mı Kullanmalıyız?

Aynı soru defalarca kez farklı yerlerden geldiği için sorunun cevabına değinme ihtiyacı hissettim.
  1. Eğer satır sayımız 100'ün altındaysa genellikle table variable'ı kullanırız. Satır sayısı 100 ün üzerindeyse temporary table kullanılmalıdır.
  2. Index oluşturma ihtiyacımız varsa kesinlikle temporary table kullanmalıyız.

Temporary table ile table variable arasındaki farklardan birisi temporary table sistem veritabanlarından birisi olan tempdb'de tutulur.Table variable ise sistem hafızasında(memory) yer alır.

Burdan hareketle her şeyi temporary table/table variable üzerinde tutup tempdb/memory ı şişirmeyin. Gerekli yerlerde gerektiği kadar kullanalım. Yazılım geliştirme ile uğraşan arkadaşların zamanı dar olduğu çoğunlukla bol temporary table kullanıp bu temporary table'lar üzerinde envai çeşit ekleme/çıkarma/güncelleme yaparlar.

Bir örnek vermek gerekirse: Maas tablosunu tamamını temporary table'a atıp personel maaşını %10 temp table üzerinde uygulayan bir arkadaş SQL kodunu aşağıdaki gibi yapacaktır:

SELECT Sicilno, Ad, Soyad, Ucret INTO #MaasTemp
FROM Maas

Update #MaasTemp
SET ucret=ucret*1.1

Bunun yerine Maas tablosundaki verileri temp tabloya atarken %10 zammı ekleyelim.

SELECT Sicilno, Ad, Soyad, Ucret*1.1 INTO #MaasTemp
FROM Maas

Temporary table için daha söylenecek çok şey var ama şimdilik benden bu kadar. SQL kodumuzu yazarken sistem performansına etkisini de gözönünde bulundurmayı unutmayalım.

Bol SQL'li günler diliyorum.

2008-08-07

SQL Server 2008 RTM Yayınlandı

Uzun bir süredir beklediğimiz SQL Server 2008 RTM sürümü nihayet yayınlandı. En son Şubat 2008'e yetişeceği bildirilmişti fakat Şubat 2008'e yetişemeyince ilerleyen dönemlerde Release olacağı söylenmişti. Bu bildiriden çoğu kişi SQL Server 2008 RTM'in Kasım 2008 gibi çıkacağını bekliyordu. Açıkçası SQL Server 2008 RTM'in çıkması beklediğimden erken oldu.

MSDN üyeliği bulunananlar SQL Server 2008 RTM'i aşağıdaki adresten indirebilir:
http://technet.microsoft.com/tr-tr/subscriptions/default(en-us).aspx

2008-07-29

Miraç Kandilinizi Tebrik Ederim

Bu mübarek gecede dualarınızın kabul olması dileklerimle Miraç Kandilinizi tebrik eder; siz ve sevdikleriniz hakkında hayırlara vesile olmasını dilerim.





2008-07-16

SQL Server'da İstatistikleri Görüntüleme

SQL Server'daki istatistiklerin isimlerini ve hangi alanlardan oluştuğunu görmek için sp_helpstats stored procedure'; istatistiklerin detay bilgilerine ulaşmak için ise DBCC SHOW_STATISTICS komutunu kullanabilirsiniz.

SQL'de Kodu Kısaltmak Her Zaman Yararlı Değildir!

SQL de tablo adlarını alias ile kısaltmak çoğu zaman yazacağımız kodu kısaltır ve kodun anlaşılabilirliğini artırır. SQL kısaltmalarını bir çok yerde desteklemekle birlikte sakıncalı olabilecek yerlerde de dikkat etmenizi öneririm.

SQL kodlayan yazılımcılar arasında sıklıkla yapılan hatalardan birisi de kısaltma hastalığı neticesinde yanlış tabloyu update etmektir. SQL kodunu kısaltayım derken iş ömrünüzü kısaltmayın!

Örnek: 1 nolu şirketteki personelin statu sunu 0 yapacak kodu yazmaya çalışalım:

update s
set statu=0
from personel p inner join sirket s ON P.sirketid=S.id
where S.id=1

Yazdığım kod kısa olduğu için hatayı hemen yakalamak mümkün ama SQL kodu çok uzunsa hatayı yakalamak zor olabilir. Yukarıda yapılan hata personel durumlarını update edeyim derken şirket durumu update edilmiştir. Her iki tablodada statu alanı olduğu için kod çalıştırıldığında düzgünmüş gibi çalışıp, kodu yazanın yanılmasına sebep olur.Bu konuda sizlere acizane tavsiyem update edeceğiniz tablo adını uzun bir şekilde yazmanız.

Şimdi hatamızı düzeltip SQL kodumuzu daha okunabilir bir şekilde yazalım:

UPDATE Personel
SET statu=0
FROM Personel INNER JOIN Sirket ON Personel.sirketid=Sirket.id
WHERE Sirket.id=1

Tabiki yapacağınız işleri TRANSACTION block içerisinde yazmak her zaman daha güvenli olacaktır ve yaptığınız hatadan dönme şansını size verecektir:

BEGIN TRAN

UPDATE Personel
SET statu=0
FROM Personel INNER JOIN Sirket ON Personel.sirketid=Sirket.id
WHERE Sirket.id=1


COMMIT TRAN

Herkese hatasız ve performanslı bol SQL li günler...

2008-07-03

Regaib Kandili

Mübarek Regaib Kandili'nizi tebrik eder, hayırlara vesile olmasını dilerim.

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.

.::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.