9 Kasım 2014 Pazar

Windows Server Technical Preview Evaluations


Windows Server Technical Preview Evaluations'ın SQL Serverla ne alakası var diyeceksiniz. Ancak hangi veritabanı olursa olsun DBAlerin iyi hatta çok iyi bir sistem yöneticisi olması gerekmektedir. SQL Server'ın Oracle'ın üzerinde çalıştığı platformlardan oluşabilecek hatalarda ve iyileştirmelerde  DBAlerden işin içine müdahil olması beklenmektedir.

Windows Server Technical Preview 2015 yılında aramızda olması bekleniyor. Ancak şu anda beta aşamasında. Yani live ortamlarda kurulup üzerinde bir takım uygulamalar çalıştırmak doğru değil.Beta sürümünü burdan indirip kurmamız mümkün.



Yeni işletim sistemi ile beraber aşağıdaki rol ve servislerde bir çok özellikler ve iyileştirmeler geldi.

Active Directory Federation Services
Microsoft Hyper-V Server 5.0
Windows Defender
Remote Desktop Services
Storage Services
Failover Clustering
Web Application Proxy
Windows PowerShell 5.0
DHCP, DNS ,IP Address Management gibi Networking Services

Yeni Gelen Özellikler

7 Kasım 2014 Cuma

SQLSaturday #359, ISTANBUL

Dünyanın en büyük SQL Server topluluğu PASS tarafından düzenlenen ve tam gün süren SQLSaturday etkinliği 06 Aralık 2014 tarihinde İstanbulda yapılacak.


Kayıt Olmak İçin Tıklayabilirsiniz.

Kesinleşen Sessionlar ;
Title Speaker Level
SQL Server Deep Dive Denis Reznik Intermediate
AlwaysOn Unplugged: Scalability Solutions with SQL Server 2012/2014 Yigit Aktan Advanced
Backups for Azure SQL Databases and SQL Server instances running on Azure Virtual Machines Chandra Mohan Situmalli Intermediate
Building abstract layers for data protection and business logic Uwe Ricken Intermediate
Common TSQL Mistakes Kevin Boles Intermediate
Connection – Session – Request Uwe Ricken Advanced
Correcting Database Corruption: Advanced Techniques Yigit Aktan Advanced
CSI Indexes Chandra Mohan Situmalli Intermediate
Data quality with DQS components in Integration Services Alexander Karl Intermediate
Database Recovery: Backup and Restore Basics Andrey Zavadskiy Beginner
Deadlocks. Everything that developer needs to know Denis Reznik Intermediate
Deep dive to SQL Server configuration for SharePoint Server Gokan Ozcifci Advanced
Developerlar için SSDT kullanımı Çağlar Özenç Beginner
Dive into the Query Optimizer-Undocumented Insight Benjamin Nevarez Advanced
DMV for administration of indexes Uwe Ricken Advanced
DQS step-by-step with Domain Management, Knowledge Discovery and Matching Policies Alexander Karl Intermediate
Effective T-SQL. To be effective or not to be. Denis Reznik Intermediate
Execution Plans Detail From Zero to Hero Ismail ADAR Beginner
Handling data types in SQL Server tomaz kastrun Intermediate
How does SQL 2014 In Memory OLTP enhance Performance? Işıl Efe Intermediate
How to tune your applications before moving your database to Microsoft Azure SQL Database (PaaS) Faruk Celik Beginner
INSERT / UPDATE / DELETE – deep dive Uwe Ricken Advanced
Introducing Microsoft Azure HDInsight Belkis Ozhorasan Intermediate
Introduction to Reporting Services for SharePoint Gokan Ozcifci Beginner
Let’s cook ‘best SQL Server DBA practices’ Satya (SQLMaster) Shyam Jayanty Intermediate
Making customer segmentation using SQL Server SSAS tomaz kastrun Advanced
Microsoft Analytics Platform System Serdar Altug Beginner
Monitoring and Assessing SQL Server with extended events Batuhan Yildiz Advanced
Optimizing SQL Server 2012 for SharePoint 2013 Gokan Ozcifci Advanced
Practical Tips when Troubleshooting AlwaysOn issues Sibel Nal Intermediate
Query Processing in In-Memory OLTP (Hekaton) Benjamin Nevarez Intermediate
Relational Data Management on Microsoft Azure Mine Tokus Beginner
Replay your workload and save the business! Boris Hristov Intermediate
SharePoint – from distrust to acceptance Gokan Ozcifci Intermediate
SQL 2014 Column Store Index Enhancements Işıl Efe Intermediate
SQL 2014 Enhancements Overview Mine Tokus Intermediate
SQL Injections and Penetration Testing on SQL Server 2014 Ismail Adar Advanced
SQL Server 2014 New Features Kevin Boles Intermediate
SQL Server 2014: High Availability and Disaster Recovery Solutions Levent Oktar Intermediate
SQL Server AlwaysOn and Clustering,Mirroring and Log Shipping Yusuf Kahveci Advanced
SQL Server Data platform upgrade Techniques, best practices & notes from the field Satya (SQLMaster) Shyam Jayanty Intermediate
SQL Server Performance Troubleshooting Batuhan Yildiz Advanced
SQL Server Query Design and Optimization Recommendations For Developers Ismail ADAR Intermediate
SQL Server ve Azure ML ile Tahminleme Modelleri Koray Kocabas Advanced
SQL Server: Performance Tuning and Troubleshooting Denis Reznik Advanced
The nightmare of locking, blocking and isolation levels! Boris Hristov Intermediate
Transaction Isolation Levels Deep Dive Yigit Aktan Intermediate
Transaction Log Basics Andrey Zavadskiy Intermediate
Understanding Parameter Sniffing Benjamin Nevarez Intermediate
Unit Testing SQL Server Kevin Boles Intermediate
Unit Testing with SQL Server Data Tools Andrey Zavadskiy Intermediate
Usage of R in SQL Server for better data understanding tomaz kastrun Intermediate
Useful Dynamic Management Views and Functions for SQL Server 2014 Ismail Adar Intermediate
Windowing Functions: THE Reason to Upgrade to 2012+ Kevin Boles Advanced
Write Quick, Readable and High Performance Queries Using Window Functions with SQL Server 2014 Ismail Adar Intermediate
You want rules? You want Policy-Based Management! Boris Hristov Intermediate


3 Kasım 2014 Pazartesi

Trace Flags 1117 Bir Dosya Grubundaki Tüm Dosyaların Eşit Olarak Büyümesi

Bir dosya grubu içerisinde birden fazla veri varsa dosya büyüme boyutunun eşit olarak yapılmasını sağlar.Yani bu sayede veritabanımızdaki tüm dosyaların büyüme oranları sabitlenmiş olur.

Örneğin 400 MB lık 8 tane dosyamız var. Her birinin otomatik büyüme değerleri 100MBlık olarak verilmiş. Eğer flag kapalı ise TempDb dolduğunda sadece bir tanesi 100 MB büyür. Bu dosya tamamen dolmadan diğerlerine veri yazılmazki buda ister istemez performans kaybına yol açar.

Bu işlem için aşağıdaki T-SQL komutu kullanılabilir. 1117 numarası Trace Flag numarasını temsil ederken -1 parametresi ise yapacağımız işlemin sadece o bağlantıya ait değilde global olarak yapılacağı anlamına gelir.


DBCC
TRACEON(1117,-1)

Trace Flag global olarak aktifleştirildiği için sadece TempDb değil diğer birden fazla dosyaya sahip veritabanlarıda otomatik olarak büyür. Bunuda DBA arkadaşların göz önünde bulundurması gerekir.

SQL Server 2012 ve SQL Server 2008 R2 Using 'dbghelp.dll' version '4.0.5' Hata Çözümü

Microsoft SQL Server 2012 ve SQL Server 2008 R2 üzerinde bir statement veya job  sys.fn_xe_file_target_read_file stored prosedürünü çalıştırır ise DBGhelp.dll dosyası load edeceğinden dolayı sorun oluşur ve SQL Server error logların içine kaydedilir.


Çözümü ise aşağıdaki cumulative updateleri SQL Server sistemimize uygulamaktır.

Cumulative Update 12 for SQL Server 2008 R2 SP2

Cumulative update 6 for SQL Server 2012 SP1

9 Ekim 2014 Perşembe

Sql Server Maksimum Ram Ayarları

Biraz giriş bilgisi olacak ama sizlere çok basit ve her zaman işe yarayabilecek bir bilgiden bahsetmek istiyorum. SQL Server çok fazla RAM tüketiyor. Bu RAM tüketimi o kadar çok büyük boyutlara ulaşıyorki zamanla işletim sistemi çalışamaz hale geliyor.

Çözüm bilgisayarı restart etmek. Bilgisayarı restart edince problem çözülüyor ama bellirli bir süre sonra yeniden aynı problemle karşılaşıyoruz.

Bu durumu düzeltmek SQL Server Properties kısmında Memory sekmesinde gerekli ayarları yapmak gerekir.


Burada Maximum server memory(in MB) çok büyük bir rakam olarak belirlenmiş.  Burada kendi donanımımıza göre hafıza ayarlarını yapmamız gerekir. Aşağıdaki ayarlar sadece SQL Server için ayrılmış  server için ayarlanmış RAM ayarlarıdır. Eğer diğer SQL Server componentlerini(SSIS ve Full Text Search) SQL Server Buffer Pool için ayırdığımız bu bellek miktarlarını düşürmemiz gerekecektir.

Physical RAM                        MaxServerMem Setting
2GB                                           1500
4GB                                           3200
6GB                                           4800
8GB                                           6400
12GB                                         10000
16GB                                         13500
24GB                                         21500
32GB                                         29000
48GB                                         44000
64GB                                         60000
72GB                                         68000
96GB                                         92000
128GB                                       124000


Aynı ayarlamayı ayrıca T-SQL komutu ile de şu şekilde yapabilirsiniz:

 -- Turn on advanced options 
EXEC sp_configure 'Show Advanced Options',1; 
GO 
RECONFIGURE; 
GO 
-- Set max server memory = 3072MB 
EXEC sp_configure 'max server memory (MB)',3072; 
GO 
RECONFIGURE; 
GO 
-- See what the current values are 
EXEC sp_configure;

13 Eylül 2014 Cumartesi

SERVERPROPERTY (Transact-SQL)

Bugün sizlere lokasyon ve yapı olarak çeşitli  SQL Server sistemlerine destek veren DBAlerin en çok kullandığı komutlardan birisi olan SERVERPROPERTY komutu vermek istiyorum Sql Server hakkında bilgi almak için kullanılır.


T-SQL Komutunun syntaxı aşağıdaki gibidir.
SERVERPROPERTY ( propertyname )

SELECT  SERVERPROPERTY('ProductVersion') AS ProductVersion,
SERVERPROPERTY('ProductLevel') AS ProductLevel,
SERVERPROPERTY('Edition') AS Edition,
SERVERPROPERTY('EngineEdition') AS EngineEdition;




Property Dönen Değer
Edition SQL Server Instance hangi edition olduğu hakkında bilgi döndürür. Ayrıca 64 bit veya 32bit olup olmadığıda yazar.
EditionID Versiyona göre bir ID döndürür.
 1804890536 = Enterprise
1872460670 = Enterprise Edition: Core-based Licensing
610778273= Enterprise Evaluation
284895786 = Business Intelligence
-2117995310 = Developer
-1592396055 = Express
-133711905= Express with Advanced Services
-1534726760 = Standard
1293598313 = Web
1674378470 = SQL Database
EngineEdition Buda versiyona göre bir sayı döndürür
1 = Personal or Desktop Engine (SQL Server 2005 ve sonraki versiyonlarda kullanılmaz..)
2 = Standard (Standard, Web, and Business Intelligence ise bu sayıyı döndürür.)
3 = Enterprise ( Evaluation, Developer, ve Enterprise editions.)
4 = Express (Express, Express with Tools and Express with Advanced Services)
5 = SQL Database
ServerName Hem server hemde instance bilgisini döndürür.
InstanceName Kullanıcının bağlı olduğu Instance adını döndürür.
IsClustered Server instance failover cluster için konfigüre edilip edilmediğini döndürür. 1 = Clustered. 0 = Not Clustered.
IsFullTextInstalled FullTextIndex ve semantic indexin kurulu olup olmadığı hakkında bilgi döndürür. 1 = Full-text and semantic indexing components kurulu. 0 = Full-text and semantic indexing components kurulu değil.
ComputerNamePhysicalNetBIOS SQL Serverın üzerinde çalıştığı serverın NetBios ismini döndürür.
Collation Varsayılan collation değerini döndürür. Collation, işletim sisteminden bağımsız olup bir dil veya alfabenin karakter kurallarını tanımlar. Örneğin Türkçe dilinde küçük “i” ile büyük “İ”nin aynı olmaması bu dilin collation yapısıyla ilgilidir

Sürümlere farklılıklar gösteren bu özellik için 2014 versiyonu için olanına buradan ulaşabilirsiniz.

7 Eylül 2014 Pazar

SQL Server 2012 Yenilikler-TRY_CONVERT Fonksiyonu

2012 ile gelen fonskiyonlardan bir taneside TRY_CONVERT fonksiyonudur. Veri tipleri arasındaki değişimler için kullanılır.  Dönüştürülme işlemi başarılı olursa değeri döndürür. Eğer dönüştürme işlemi başarısız olursa NULL değer döndürür.

TRY_CONVERT keywordu Level 110 uyumludur.

SELECT
CASE WHEN TRY_CONVERT(float,'Sedat KARAR') IS NULL
THEN 'Cast Failed'
ELSE 'Cast succeeded'
END AS Result;


SET DATEFORMAT dmy;
SELECT TRY_CONVERT(datetime2,'12/31/2010') AS Result


SET DATEFORMAT mdy;
SELECT TRY_CONVERT(datetime2,'12/31/2010') AS Result;


5 Eylül 2014 Cuma

SQL Server 2012 Yenilikler-IFF ve CHOOSE Mantıksal Fonksiyonları

SQL Server 2012 ile beraber gelen IFF ve CHOOSE fonksiyonları ile yazılarıma devam etmek istiyorum.

IFF Fonksiyonu
IFF ifadesi Oracle PL-SQL'de bulunan DECODE fonksiyonuna benzer ancak onun kadar yetenekli değildir. Boolean bir koşulun sonucuna göre  iki durumdan birini geriye değer döndürür. Koşul sağlanıyorsa birinci değer sağlanmıyorsa ikinci değer geriye döndürülür.

DECLARE @a int=45;
DECLARE @b int=40;
SELECT  IFF (@a>@b,'TRUE','FALSE') AS Result;


CHOOSE Fonksiyonu
Choose Fonksiyonu iki veya daha fazla değerin içinden belirtilen sıradaki değeri döndürür.

SELECT CHOOSE ( 3, 'Manager', 'Director', 'Developer', 'Tester' ) AS Result;


SQL Server 2012 Yenilikler-Format Fonksiyonu

SQL Server 2012 ile gelen fonksiyonlardan biriside format fonksiyonudur.  .NET ortamında geçerli olan bütün string formatlama işlemlerinin SQL Serverda geliştirilmesini sağlar. CAST ve CONVERT fonksiyonlarının yerini almıştır. Parasal işlemler, Sayılar ve özellikler tarih formatlarında hayatımızı çok kolaylaştırmaktadır.

FORMAT  ( value , format [,culture] )

A.Basit Format Örneği

DECLARE @d DATETIME='01/01/2011';
SELECT FORMAT (@d,'d','en-US') AS Result;




B.Özel String biçimlendirmede FORMAT Örneği

DECLARE @d DATETIME = GETDATE();
SELECT FORMAT(@d,'dd/MM/yyyy','en-US') AS Result;




4 Eylül 2014 Perşembe

Concat Fonksiyonu

Bugün sizlere SQL Server 2012 ile gelen bir fonksiyon olan Concat fonksiyonundan bahsetmek istiyorum.
Concat fonksiyonu 2 veya daha fazla değeri tek bir string ifadede birleştirmek için kullanılır. + operatörüne göre bazı avantajları vardır. NULL değerin hiç bir etkisi yoktur ve boş değer olarak ifadeye eklenir. Tür dönüşümüne ihtiyaç duymaz.

--A. Basit Olarak Concat Kullanımı 
SELECT CONCAT('Happy','Birthday',11,'/','25') As Result 



--B. Null Değerde Concat Kullanımı
CREATE TABLE #temp (
emp_name nvarchar(200) NOT  NULL,
emp_middlename nvarchar(200) NULL,
emp_lastname nvarchar(200) NOT NULL);

INSERT INTO #temp VALUES ('Name',NULL,'LastName');

SELECT CONCAT(emp_name,emp_middlename, emp_lastname) AS Result 
FROM #temp

Vaka Analizi-Sql Server Performans Problemi

Bu yazımda sizlere destek verdiğim firmalardan birinde karşıma çıkan SQL Server'da her zaman için karşılaşabileceğiniz ve çözümü çok basit olan problemlerden birini anlatmak istiyorum.

Geçen hafta destek için gittiğim firmanın birinden beni aradılar. Sistemlerinin çok yavaş olduğunu gelip analiz etmem gerektiği söylendi. Öncelikle  firmanın yapısından bahsedecek olursak firma sunucu üzerinde sanallaştırma yapısı olarak HYPER-V kullanıyor. 2 TB lık bir storageları var diskler Raid10 olarak yapılandırılmış. Sanal makinalardan bir taneside SQL Server'ın olduğu makina. SQL Server 2008 R2 standart kurulu durumda. SQL Serverı ERP sistemleri ve Mobile Satış Sistemleri için kullanıyorlar.

Firmanın bana bildirdiği hata son bir haftadır çok yavaş çalıştıklarını özellikle kayıt yaparken çok yavaş kaydettiği sistemlerinin artık kaldırmadığı ve yeni bir server ile storage almayı planladıklarını söylediler.

Sistem kaynaklarına ve bilgisayarların  durumlarını incelediğimde çok olağan üstü bir performans beklemediğimin farkındaydım ancak durma seviyesinde bir yavaşlama yoktu. Yanlız kullandıkları ERP programında kayıt işlerken söyledikleri gibi çok yavaş kayıt yapıyordu.

Ben problemin Mobile Satış sisteminden ERP sistemine veri aktarımından kaynaklandığını düşündüm ancak aksi gibi veri aktarımı esnasında kaydetme problemi yoktu. Aksine bu insert işlemi esnasında sistem süper çalışıyordu.

Yaptığım daha derinden :) incelemelerde problemin SQL Serverda olduğunun tespit ettim. SQL Serverda farklı firmalara ait 20 ila 40 GB arasında farklı firmalarına ait databaseler vardır.  SQL Server'daki problem yeni açmış oldukları firmanın kullanmış olduğu databaseydi. Aklıma Turgay SAHTIYAN hocanın makalesi geldi. Veritabanı Otomatik Büyümeleri Kontrolünüz Altında Olsun (Database Auto Growth)  makalesi tam bu problemi ifade ediyordu. Database boyutu 21 GB olmuş ve Autogrowth özelliği aktif olduğu için 1 MB büyüyordu. Bu özellik aktif olduğu için hata vermiyordu ancak performans olumsuz etkilenmişti.

SQL Serverda bulunan Auto Growth özelliği aktifse bu özellik sayesinde veritabanı dosyaları dolduğunda sistem tarafından oransal veya boyutsal olarak bizim belirlediğimiz şekilde büyüyebilir. Autogrowth işlemi diskte yeni bir alan ayırdığı için kaynak tüketimi fazla olan bir işlemdir. Büyümenin boyutlarına göre bu işlem 1-5 saniye sürebilir.  Büyüme tamamlanana kadar ilgili dosyaya gelen okuma ve yazma istekleri bekletildiği için performans sıkıntısı doğacaktır.

Best practice olarak dosyaların büyümesinin  Auto Growth değilde DBAlerin kontrolü altında yapılması önerilir ancak plansız büyümelere karşı yinede Auto Growth özelliği aktif olmalıdır.  Ayrıntıları Turgay Hocanın makalede okuyabilirsiniz.

Bu konuda bende 20 GB olan MDF dosyasını 30 GB ve 50 GB olan log dosyasını ise 80 GB çıkardım. Sistemi tekrar incelediğimde problem ortadan kalkmıştı. Ancak yinede hazır el atmışken sistemleri yenileme kararıda aldık.

Sql Server DateTime Veri Tipindeki Datayı Türkçe Formatında Göstermek

  SQL'de tarihleri farklı formatlarda göstermek için FORMAT fonksiyonunu kullanabilirsiniz. Türkçe kısa tarih formatı genellikle "...