Recent comments

İçerik Ara



Yasal Uyarı
Bu sitede sunulan tüm bilgi ve dökümanlar Turgay Sahtiyan tarafından yazılmaktadır. Yazıların kaynak göstermek şartıyla kullanılması serbesttir.

© Copyright 2009-2011
Takvim
<<  May 2012  >>
MoTuWeThFrSaSu
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910
Keywords

sp_configure sistem prosedürü ile “max server memory (MB)” veya “min server memory (MB)” parametrelerini değiştirdiğimizde Plan Cache silinir yani cache’lenmiş Query Plan’lar memory’den atılır. Bu durum da yeni gelen sorgular için planların tekrar oluşturulması anlamına geleceği için performans sıkıntısı oluşabilir. Bu yüzden memory paremetrelerinin planlanarak uygun bir zamanda örneğin mesai saatleri dışında yapılması daha anlamlı olacaktır.

More...

SQL Server Profiler üzerinden aldığımız trace’i T-SQL komutları ile sorgulayabilmek, istediğimiz aramaları yapmak için büyük avantaj sağlamakta. Trace sonuçlarını bir tabloya kaydederek bu sorgulamayı yapmamız mümkün. Ya da bugün anlatacağım diğer bir yöntem olan fn_trace_gettable fonksiyonu ile trace dosyasını tabloymuş gibi sorgulayabiliriz.

More...

SQL Server 2000 Desktop (MSDE) sürümünde TCP/IP ya da Named Pipes’ı enable etmek için aşağıdaki adımları kullanabilirsiniz.

More...

Bildiğiniz gibi SQL Server’ın response vermediği durumlarda troubleshooting amacıyla DAC ile bağlantı kurulabilir. Daha önce bu konuyla ilgili bir yazı yazmıştım.

Bugünkü yazımda aktif bir DAC connection’ı olup olmadığınının script ile nasıl sorgulanacağını göreceğiz.

More...

SQL Server 2011 “Denali” ile gelen yeni özelliklerden biride, SQL Server Configuration Manager’da service in startup parameter’larını ayarlayabileceğimiz ekran. Bu ekran vasıtasıyla yeni startup parameter’ları eklemek, silmek, değiştirmek eski versiyonlara göre daha kolay hale getirilmiş.

More...

Daha önceki bir çok yazımda da belirttiğim gibi, SQL Server çalıştırdığı query’ler için oluşturduğu query planları daha sonra kullanmak için Plan Cache’de yani memory de saklar. Daha sonraki kullanımlarda tekrar query plan oluşturmakla zaman kaybetmez, daha önce plan cache’e kaydettiği plan’ı kullanır ve buda performans artışı olarak bize geri döner.

Hem procedureler gibi parameterize edilebilen sorgular için hemde ad hoc gibi yani parameterize edilemeyen sorgular için query plan’lar oluşturulur ve plan cache’de saklanır. Procedure’ler için oluşturulmuş query plan’lar bize çok fazla problem çıkarmayacaktır. Çünkü bu planlar, sorguların parametrik olmalarından dolayı binlerce kez kullanılacaktır. Ama Ad Hoc sorgular içerdikleri parametreler ile cache’lenir ve aynı sorgu farklı bir parametre ile geldiğinde yeni bir plan cache oluşturulur. Dolayısıyla çok büyük ihtimalle ad hoc query’ler için oluşturulmuş query plan’lar sadece bir kez kullanılacaktır. Buda bize memory’de gereksiz yere yer işgali olarak geri dönecektir.

Bugünkü yazımda Ad Hoc için oluşturulan query plan’larının daha az yer kaplamasını nasıl sağlayacağımızı ve dolayısıyla memory’nin daha randımanlı nasıl kullanabileceğini görüyor olacağız.

More...

SQL Server 2008 R2 Best Practices Analyzer, instance inizi best practice değerlerine göre kontrol edip size önerilerde bulunan bir tooldur. Bugünkü makelemizde bu tool un kullanımını inceliyor olacağız.

Best practise kavramını biraz açalım. Best practise bahsi geçen teknolojik ürün üzerinde kabul görmüş genel konfigurasyonlardır. Örneğin SQL Server ı ele alacak olursak; Database Data ve Log dosyalarını performans amaçlı farklı fiziksel disklerde bulundurmak best practice dir. Ya da TempDB Data file larını core cpu sayısı kadar yapmak gene bir SQL Server Best Practice dir.

Microsoft SQL Server 2005 Best Practise tool unu release ettikten sonra 2008 Best Practice tool u için çok uzun süre bekledi ve ancak 18.06.2010 tarihinde release edebildi. Çok uzun bir süre 2008 ortamlarımızda hala 2005 best practice tool unu kullanmak zorunda kalırken artık şimdi elimizde 2008 best practice tool u var. Ve bu yazımızda bu tool un detaylarına iniyor olacağız.

More...

SQL Server 2008 Cluster bir ortamda node un UP olup olmadığı belirli aralıklarla check edilir. Bugünkü yazımda Windows Server level ında ve SQL Server level ında bu kontrollerin ne olduklarını ve eğer kontrol başarılı olmazsa nasıl fail edildiğini anlatıyor olacağım.

More...

SQL Server da Mirroring yapılan server lar arasında otomatik olarak heartbeat kontrolu bulunmaktadır. Principal server belirli aralıklarla mirroring server ı ping eder ve eğer cevap alamazsa bununla alakalı hata mesajı döndürür.

Otomatik olarak yapılacak bu heartbeat kontrolü için default bir frequency değeri vardır. Bu değer default olarak 10 sn dir ve principal server 10 sn de bir mirroring server a ping yaparak ayakta olup olmadığını kontrol eder.

Çok yoğun transaction alan DB lerde 10 sn lik bu değer yetmemekte ve Event Viewer a aşağıdaki TimeOut hatası düşmektedir.

The mirroring connection to "TCP://ServerName.DomainName:5022" has timed out for database "DBName" after 10 seconds without a response. Check the service and network connections.

Yapılması gereken işlem default 10 sn olan Partner Timeout değerini arttırmaktır.

Aşağıdaki script MyDB veritabanı için Partner Timeout değerini 60 sn ye set eder.

ALTER DATABASE MyDB SET PARTNER TIMEOUT 40

 

İyi çalışmalar

Turgay Sahtiyan

Siz hiç SQL Server Service ini –m parametresi ile single user olarak açtıktan sonra tek user hakkını alamadan başka bir user a kaptırdınız mı? Cevabınız evetse buyrun yazının devamına :) More...

Vmware gibi sanallaştırma çözümleri, sundukları kolaylıklardan dolayı daha sık kullanılır oldu. Bu gibi çözümlerde template üzerinden 20 dk gibi kısa bir sürede yeni bir windows server hazırlamak mümkün. Template diğer sunduğu bir özellik ise bütün server larda olmasını istediğimiz programları template e yüklemek ve bu şekilde yeni hazırlanan server ların default olarak bu programlara sahip olmasını sağlamak. Bu bize ciddi anlamda zaman kazandırmakta.

SQL Server da template içine dahil edilebilen uygulamalardan biri. Bu yapı sayesinde 20 dk gibi bir sürede üzerinde SQL Server olan bir Windows server ı configuration ları bile yapılmış halde hazırlamak mümkün.

Bu şekilde template üzerinden hazırlanan SQL Server da ufak bir ayar yapmak gerekmekte. Yeni kopyalanan server ın adı template server adından farklı olduğu için SQL Server tarafında server adını değiştirmek gerekmekte.

İşte bugünkü makalemizin konusu SQL Server da server adının nasıl değiştirildiğini görmek ve aynı zamanda bu değişiklik esnasında ortaya çıkan bir problem olan @@servername in neden null değer getirdiğine bakmak.

İlk önce instance ımızın adına bir bakalım.

sd1

Şimdi adı değiştirelim. İlk önce olan server ı drop edeceğiz. Daha sonrada yeni isimle server ı add edeceğiz.

sp_dropserver 'FUNNYCIK\S10ENT'
GO
sp_addserver 'FUNNYCIK\S10ENT_Temp',local
GO

 

SQL Şimdi instance adına tekrar bakalım.

sd2

Gördüğünüz gibi sys.servers ta beklediğimiz sonuç gelirken @@servername hala eski server adını getirmekte. Bunun sebebi değişikliğin aktif hale gelebilmesi için SQL Server Service ini restart etmemiz gerekmekte.

Service i restart edip instance adına tekrar bakalım.

sd3

Her 2 sorgu sonucu da istediğim sonucu verdi. İşlemlerimiz tamam.

 

Şimdi yazımın başında bahsettiğim hata mesajına gelelim. Yani @@servername in null değer döndürmesi.

Bunun sebebi sp_addserver SP sinde local keyword ünün kullanılmaması.

Yani aşağıdaki gibi bir kullanımda @@servername sorgusu null değer döndürecektir.

sp_dropserver 'FUNNYCIK\S10ENT_Temp'
GO
sp_addserver 'FUNNYCIK\S10ENT'
GO

 

sd4

Dolayısıyla ne yapmıyoruz. local keyword ünü yazmayı unutmuyoruz. :)

 

İyi çalışmalar

Turgay Sahtiyan

SQL Server ın cevap vermediği,yeni connection kabul etmediği ve dolayısıyla adminlerin dahi normal şartlarda bağlanamadığı durumlarda admin ler için troubleshoot amacıyla özel bir bağlantı şekli sunar. Bu bağlantı şekline Dedicated Administrator Connection (DAC) denmektedir.

Local makinadan DAC connection ı yapabilmek için herhangi bir configure ayarı yapmaya gerek yoktur. Fakat remote connection yapılabilmesi için sp_configure ile remote admin connections enable edilmesi gereklidir.

Remote admin connection ın aldığı değerler ve bu değerlerin açıklaması aşağıdaki gibidir.

Değer

Açıklama

0

DAC ile sadece local bağlantı kurulmasını işaret eder

1

DAC ile remote connection da kurulabilmesini sağlar.

Remote admin connection ın value değişikliği için aşağıdaki örnek script i kullanabilirsiniz.

sp_configure 'remote admin connections', 1;
GO
RECONFIGURE;
GO

Bu script ile DAC ile remote connection ı aktif etmiş oluyoruz.

DAC ile Remote connection kuracak user ın sysAdmin rolünde olması gereklidir. Ayrıca DAC connection 1 tane olmak zorundadır. Bir instance a haliahazırda bir DAC kurulduysa ikinci bir DAC connection talebi 17180 error koduyla reddedilir.

Bağlantı kurulurken normalde sadece ServerAdi verilirken DAC bağlantı şeklinde Admin:ServerAdi verilerek bağlantı kurulur. Örn. Admin:sahtiyan_t\SQL10Ent

SQLCMD ile command prompt tan bağlantı kurmak için ise –A parametresi kullanılmalıdır.

Örn: sqlcmd -S sahtiyan_t\SQL10Ent -E –A

Merhaba arkadaşlar,

Bu yazımda SQL Server 2008 ile beraber gelen Table ve BackUp larda ki compression yani sıkıştırma işlemlerinin nasıl yapılacağını anlatmaya çalışacağım.

İlk olarak neden sıkıştırma yaptığımıza değinelim. Büyük boyutlu mdf dosyalarının yedeğini aldığımızda oldukça büyük boyutlu yedek dosyaları oluşabilmektedir. Örneğin 2.5gb boyutundaki bir datanın yedeği 1 gb boyutlarında olabilmekte. Bu da bize storing problemi yaşatmakta.

Aynı şekilde compression işlemi sayesinde büyük boyutlu dataları sıkıştırarak daha az yer kaplamasını sağlayabilmekteyiz.

SQL Server bize 2 farklı konuda sıkıştırma şansı vermekte. Bunlar Tablo Sıkıştırması ve BackUp Sıkıştırması. Şimdi bunları anlatmaya çalışalım.

Table Compression

Data içerisindeki tabloları sıkıştırarak datanın daha az yer kaplamasını sağlayabiliriz. Tabloyu 2 türlü sıkıştırma şansımız var. Kayıt veya sayfa bazında. Heap,Clustered Index,Non-Clustered Index,Index Views ve Partition lar sıkıştırılabilmekte. Şimdi bu işlemi management studio üzerinde nasıl yapabileceğimizi görelim.

Örneğin AdventureWorks2008 database inde ki Sales.SalesOrderDetail tablosunda sıkıştırma yapalım. Bunun için management studio da tabloya sağ tıklayıp Storage kısmından Manage Compression a tıklayalım. Gelen ekrana next diyelim ve aşağıdaki ekrana geçelim.

cmp1

Eğer sıkıştırma yapacağımız table birden fazla partition da ise bunları liste halinde bu ekranda görebilirsiniz.

İlk olarak Row compression un bize sağlayacağı faydaya bakalım. Bunun için Compression Type kısmından Row u seçip calculate butonuna basıyoruz.

cmp2

Current Space kısmında table in şu anda kapladığı yeri, Requested Compressed Space kısmında ise Row compression yapılırsa table ın kaplayacağı yeri görebiliriz. Bu table için Row sıkıştırmasıyla %12 lik bir sıkıştırma yapabiliyormuşuz.

Şimdide Compression Type kısmından page i seçip calculate basalım. Gördüğünüz gibi page sıkıştırması bu table için daha iyi bir sonuç veriyor ve yaklaşık olarak %32 lik bir sıkıştırma sağlıyor.

Sıkıştırma tipine karar verdikten sonra next e basıyoruz ve aşağıdaki ekrana geçiyoruz.

cmp3

Buradaki seçeneklere değinecek olursak;

Create Script : Bu işlem için bir T-SQL script i oluşturmakta. Bu oluşan script i daha sonra management studio dan uygulayabiliriz.

Run immediately : Sıkıştırma işlemini hemen gerçekleştirmekte.

Schedule : Bu sıkıştırma işlemi için bir görev oluşturulabilir ve örneğin her hafta aynı gün ve saatte bu sıkıştırma işlemini tekrarlatabiliriz.

Biz bu örneğimiz için Run immediately i seçiyoruz ve next e basıyoruz. Gelen ekranda yapılacak olan sıkıştırma işlemi için bir summary bulunmakta. Bu ekranda finish e basıyoruz ve işlemi bitiriyoruz.


Table Compression işlemi management studio ile yapılabildiği gibi sql script ile de yapılabilmekte.

İlk olarak sıkıştırma yapacağımız table da ne kadar yer kazanabileceğimize bakalım.

EXEC sp_estimate_data_compression_savings
	@schema_name = 'Sales'
	,@object_name = 'SalesOrderDetail'
	,@index_id = null
	,@partition_number = null
	,@data_compression = 'ROW';

Bu script vasıtasıyla Sales.SalesOrderDetail table ında ROW table compression yapılırsa kazanılacak yerleri görebilmekteyiz.

Gelen sonuç ekranında index_id 1 olan satır clustered index i göstermekte ve her bir index için kazanılacak yerleri görebilmekteyiz.

Aynı işlemi PAGE compression type kullanarakta yapabiliriz.

Şimdi ise sıkıştırma işlemini script ile gerçekleştirelim. Bunun için aşağıdaki kod bloğunu kullanabiliriz.

ALTER TABLE [Sales].[SalesOrderDetail] REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = PAGE);


Bu arada table ları create ederken compression özelliğini verebilmekteyiz. Bu sayede her defasında table ı compress yapmamıza gerek kalmamakta. Bunun içinde table create scriptinde WITH (DATA_COMPRESSION = PAGE) komutunu kullanabiliriz.

Table compression işlemlerimiz bu kadar. Şimdi BackUp Compression işlemlerine geçelim.

BackUp Compression

Dataların yedeği alınırken sıkıştırma işlemi yapılabilir. Bu şekilde sıkıştırılmış datalar herhangi bir SQL Server 2008 Edition unda restore edilebilir.

SQL Server ın BackUp alınırken sıkıştırma yapılıp yapılmayacağını belirleyen default bir özelliği bulunmaktadır. Bu özelliğin şu andaki değerinin ne olduğunu görmek için aşağıdaki script i uyguluyalım.

EXEC sp_configure 'backup compression default'

 

 

 

 

 

Gelen sonuç ekranında config_value kısmında 0 var ise backup işlemlerinde sıkıştırma yapılmamakta,1 var ise sıkıştırma yapılmaktadır.

Bu default değeri değiştirmek için ise aşağıdaki script i uygulayabilirsiniz.

EXEC sp_configure 'backup compression default', 1
RECONFIGURE WITH OVERRIDE;


Yukarıdaki script i uyguladıktan sonra tekrar bir önceki script i uygularsak config_value nun 1 olarak değiştiğini dolayısıyla bundan sonra yapacağımız backup işlemlerinin compress edilip backup lanacağını bilebiliriz.


Şimdi 3 değişik şekilde backup alalım ve aralarındaki farkları görelim.

İlk backup ı with clause kullanarak compressed halde alacağız.

İkinci backup ta ise server default u kullanacağız. Şu an server default umuz compress seçili.

Üçüncü back upda ise with clause kullanarak uncompressed yani sıkıştırılmamış backup alacağız.

Bu işlemler için aşağıdaki script bloklarını sırasıyla uygulayınız.

--With clause ile compress edilmiş backup
BACKUP DATABASE AdventureWorks2008
TO DISK = 'D:\temp\Compressed.bak'
WITH COMPRESSION

--default compression type ile back up
BACKUP DATABASE AdventureWorks2008
TO DISK = 'D:\temp\Default.bak'

--With clause ile compress edilmemiş backup
BACKUP DATABASE AdventureWorks2008
TO DISK = 'D:\temp\No_Compressed.bak'
WITH NO_COMPRESSION

Şimdi aldığımız backup ların boyutlarına bakalım.

cmp4

Gördüğünüz gibi Default backup compress edilmiş halde çünkü server default unu buna göre ayarlamıştık.

Bu arada aklınızda bulunmasında fayda var. BackUp compression özelliği sadece SQL Server 2008 Enterprise ve Developer edition da bulunmakta. Fakat sıkıştırılmış bir backup bütün SQL Server editionlarında restore edilebilmektedir.

 

 

SQL Server 2008 de Table ve BackUp Compression işlemleri bu şekilde. Aklınıza takılan bir şey olursa yorum kısmından sorabilirsiniz.

Kolay gelsin

Turgay Sahtiyan

Merhabalar,

SQL Server 2000 de Service Manager üzerinden server ı start etmeye çalışırken “The service did not start due to a logon failure” hatası alınabilmekte.

Bu hata SQL Server start up account unun yada SQL Server Agent start up account unun kullanıcı adı veya şifresinin hatalı olduğunu göstermekte. Böyle bir şeyde account un şifresinin değiştirilmesine rağmen start up account unun şifresinin değişmediği durumlarda ortaya çıkmakta.

Problemi çözebilmek için start up accountlarda ki password bilgilerinin update edilmesi gerekmektedir.

Bunun içinde Control Panel/Administrative Tools/Services kısmına girilir.

Default instance için MSSQLServer, instance lar için ise MSSQL$InstanceAdi satırları bulunur.

Bulunan satıra çift tıklandıktan sonra gelen ekranda Log On sekmesine geçilip doğru password yazılır.

psw1

Bu işlemlerden sonra SQL Server problemsiz bir şekilde start olacaktır.

Kolay gelsin

Turgay Sahtiyan

Merhaba arkadaşlar

http://www.turgaysahtiyan.com/post/Sql-Server-2008-de-Network-Uzerinden-Baglantc4b1-%28Remote-Connection%29.aspx adresli yazımda SQL Server 2008 de Remote connection yapabilmek için hangi ayarların yapılmasını gerektiğini belirtmiştim.

Bu ayarların haricinde Express edition da bir ayar daha yapmak gerekiyor.

Bu ayarda gerekli protocol ü açmak ile ilgili.

Bunun için Programların altındaki SQL Server bölümünden SQL Server Configuration Manager i çalıştırıyoruz.

Sql Server Network Configuration ın altından server ımızı tıklıyoruz.

Yan tarafta protocol ler açılmış olması lazım. Sql Server 2008 Express edition da TCP/IP default olarak false gelmekte.

Burdan istediğimiz protocol lere sağ tıklayıp enable yapıyoruz.

rc1

Bu işlemden sonrada server i restart etmemiz gerekiyor. Bunun içinde aynı ekrandaki SQL Server Services kısmına geliyoruz ve server a sağ tıklayıp stop ve start yapıyoruz.

Kolay gelsin.

Turgay Sahtiyan

Merhaba arkadaşlar,

Sql 2008 kurulu makinaya network üzerinden bağlantı kurmaya çalıştığınızda aşağıdaki gibi bir hata alabilirsiniz.

“Sunucuyla bağlantı kurulurken ağ ile ilgili veya örneğe özel bir hata oluştu. Sunucu bulunamadı veya sunucuya erişilemiyor. Örnek adının doğru olduğunu ve SQL Server’ın uzak bağlantılara izin verdiğini doğrulayın.”

rc2

Bu durumda yapılması gerekenler.

1 – Kurulu olan makinada Management Studio yu açıp Server sağ tıklayıp properties/connections sekmesine geliyoruz.

rc1

Bu ekranda “Allow remote connections to this server” yazısını işaretliyoruz.

Ayrıca SQL Server ın kurulu olduğu makinadaki firewall ın kapatılması yada 1433 nolu port un açılması gerekmektedir.

Bu ayarları yaptıktan sonra bağlantıda bir problem yaşanmayacaktır.

Kolay gelsin

Turgay Sahtiyan

Merhaba arkadaşlar.

SQL Server 2000 e internet üzerinden ulaşmak için aşağıda ki adımları yapmamız gerekmektedir.

Çok önceden internetten indirdiğim bu dökümanı hangi sayfadan aldığımı bilmediğimden ne yazık ki kaynak gösteremiyorum.

Yapılacak işlemler aşağıdadır.

1.Server Network Utility

1.Başlat >> Programlar >> Microsoft SQL Server >> Server Network Utility (*) SQL Server Desktop Edition için ‘Server Network Utility’ uygulamasına ‘C:\Program Files\Microsoft SQL Server\80\Tools\Binn\svrnetcn.exe’ yolundan erişilebilir.

sql1

2.TCP/IP aşağıdaki gibi sağ tarafta değilse sağ tarafa taşınır. Bunu yapmak için TCP/IP seçildikten sonra ortadaki ‘enable >>’ butonuna basılır.

sql2

3.TCP/IP seçildikten sonra
(1)’Properties’ butonuna basılır.Açılan pencerede
(2)’default port’ kısmının ‘1433’ olduğuna emin olduktan sonra
(3)’OK’ butonuna basılır.
‘SQL Server Network Utility‘ penceresinde ‘Apply’ ve ‘OK’ butonlarına sırayla basılır.

sql3

 

2.Client Network Utility

1. Başlat >> Programlar >> Microsoft SQL Server >> Client Network Utility(*) SQL Server Desktop Edition için ‘Client Network Utility’ uygulamasına ‘C:\WINDOWS\system32\cliconfg.exe’ yolundan erişilebilir.

sql4

2. TCP/IP aşağıdaki gibi sağ tarafta değilse sağ tarafa taşınır. Bunu yapmak için TCP/IP seçildikten sonra ortadaki ‘enable >>’ butonuna basılır.

sql5

3. TCP/IP seçildikten sonra
(1)’Properties’ butonuna basılır.Açılan pencerede
(2)’default port’ kısmının ‘1433’ olduğuna emin olduktan sonra
(3)’OK’ butonuna basılır.

sql6

4.’Alias’ kısmında kayıt yoksa ‘Add…’ butonuna , kayıt varsa (aşağıdaki gibi) ‘Edit…’ butonuna basılır.

sql7

5.Açılan pencerede Sol taraftaki seçeneklerden TCP/IP seçilir. (2) ‘Server Alias’ kısmına static IP adresi veya varsa domain ismi yazılır.‘Server Name’ kısmının doğru ve ‘Dynamically determine port’ seçeneğinin seçili olduğundan emin olduktan sonra (3) ‘OK’ butonuna basılır. ‘SQL Server Client Network Utility‘ penceresinde ‘Apply’ ve ‘OK’ butonlarına sırayla basılır.

sql8

 

Kolay gelsin

Turgay Sahtiyan