Embracing Evolution: How can we keep SQL Server Management Studio (SSMS) up to date?

Before we delve into the update process, let’s understand why it’s important to keep SSMS current. Each new release of SSMS includes bug fixes, performance enhancements, and new features that can significantly improve your productivity and the performance of your SQL Server environments. Some updates address security – so best is to update to the latest and greatest release.

By the way, this check is a part of our SQL Server Health Check.

Key Benefits of Updating SSMS

Checking for updates (manually)

  1. Open SSMS then click on Tools.
  2. Select “Check for Updates…”
  3. A new window will pop up, displaying the current version of SQL Server Management Studio and the latest version available. You can enable the automatic check while you at it.

[vc_row full_width=”stretch_row” css=”.vc_custom_1505794887127{background-color: #2596be !important;}” gradient_animation=”#ffbc63,#d46b02″][vc_column][stm_cta button_color=”custom” button_custom_color=”#0077c2″ icon_custom_color=”#ffffff” button_icon_pos=”right” button_icon=”stmicon-chevron-right” style=”style_6″ link=”url:aryasoft.com/contacts |title:İletişim”]Size ve Veritabanlarınıza Yardımcı Olmak İçin Bekliyoruz![/stm_cta][/vc_column][/vc_row][vc_row css=”.vc_custom_1501845139892{margin-top: 50px !important;margin-bottom: 25px !important;}”][/vc_row]

Veritabanındaki Tüm Tabloların ByteSize Değerlerini Bulma Sorgusu  
SELECT CASE WHEN (GROUPING(sob.name)=1) THEN ‘All_Tables’ ELSE ISNULL(sob.name, ‘unknown’) END AS Table_name, SUM(sys.length) AS Byte_Length FROM sysobjects sob, syscolumns sys WHERE sob.xtype=’u’ AND sys.id=sob.id GROUP BY sob.name WITH CUBE  

Size ve Veritabanlarınıza Yardımcı Olmak İçin Bekliyoruz!

İletişime geçerek hemen destek alabilirsiniz.

İletişim
Veritabanındaki Her Tablo için Yabancı Anahtar İlişkilerini ve Kısıtlamanın Adını Gösteren Sorgu Bu çok uzun bir sorgu. İsteğe bağlı olarak, sorguyu bir veya daha fazla tablo için sonuç döndürecek şekilde sınırlayabiliriz.  
SELECT K_Table = FK.TABLE_NAME, FK_Column = CU.COLUMN_NAME, PK_Table = PK.TABLE_NAME, PK_Column = PT.COLUMN_NAME, Constraint_Name = C.CONSTRAINT_NAME FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME INNER JOIN ( SELECT i1.TABLE_NAME, i2.COLUMN_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1 INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME WHERE i1.CONSTRAINT_TYPE = ‘PRIMARY KEY’ ) PT ON PT.TABLE_NAME = PK.TABLE_NAME —- optional: ORDER BY 1,2,3,4 WHERE PK.TABLE_NAME=’something’WHERE FK.TABLE_NAME=’something’ WHERE PK.TABLE_NAME IN (‘one_thing’, ‘another’) WHERE FK.TABLE_NAME IN (‘one_thing’, ‘another’)
 

Size ve Veritabanlarınıza Yardımcı Olmak İçin Bekliyoruz!

İletişime geçerek hemen destek alabilirsiniz.

İletişim

Veritabanındaki Tüm İşlemleri Kill Etmek İçin Cursor

Komut dosyasını çalıştırdığınızda, lütfen onu tüm işlemlerin öldürülmesini istediğiniz veritabanından farklı bir veritabanında çalıştırdığınızdan emin olun.  
CREATE TABLE #TmpWho (spid INT, ecid INT, status VARCHAR(150), loginame VARCHAR(150), hostname VARCHAR(150), blk INT, dbname VARCHAR(150), cmd VARCHAR(150)) INSERT INTO #TmpWho EXEC sp_who DECLARE @spid INT DECLARE @tString VARCHAR(15) DECLARE @getspid CURSOR SET @getspid =   CURSOR FOR SELECT spid FROM #TmpWho WHERE dbname = ‘mydb’OPEN @getspid FETCH NEXT FROM @getspid INTO @spid WHILE @@FETCH_STATUS = 0 BEGIN SET @tString = ‘KILL ‘ + CAST(@spid AS VARCHAR(5)) EXEC(@tString) FETCH NEXT FROM @getspid INTO @spid END CLOSE @getspid DEALLOCATE @getspid DROP TABLE #TmpWho GO  

Size ve Veritabanlarınıza Yardımcı Olmak İçin Bekliyoruz!

İletişime geçerek hemen destek alabilirsiniz.

İletişim
Veritabanındaki Tablo ile İlgili Stored Procedure’leri Bulma – Tüm Stored Procedure’leri Arama Aşağıdaki kod, bir veya daha fazla belirli tabloyla ilgili tüm Stored Procedure’leri (SP) bulmanıza yardımcı olacaktır. sp_help ve sp_depends her zaman doğru sonuçlar döndürmez.  
—-Option 1 SELECT DISTINCT so.name FROM syscomments sc INNER JOIN sysobjects so ON sc.id=so.id WHERE sc.TEXT LIKE ‘%tablename%’ —-Option 2 SELECT DISTINCT o.name, o.xtype FROM syscomments c INNER JOIN sysobjects o ON c.id=o.id WHERE c.TEXT LIKE ‘%tablename%’
 

Size ve Veritabanlarınıza Yardımcı Olmak İçin Bekliyoruz!

İletişime geçerek hemen destek alabilirsiniz.

İletişim
Statik Prefix ve Oluşturulma Tarihi ile Veritabanındaki Tabloları Seçmek için Basit Cursor Aşağıdaki cursor sorgusu, veritabanında çalışır ve belirli ön eklerle (‘b_’,’delete_’) tüm tabloyu bulur. Ayrıca Tablonun belirli günlerden eski olup olmadığını veya belirli günlerden önce oluşturulmuş olup olmadığını kontrol eder, siler. Bu tablo üzerinde silmek, yazdırmak veya indekslemek gibi başka herhangi bir işlemimiz olabilir.  
SET NOCOUNT ON DECLARE @lcl_name VARCHAR(100) DECLARE cur_name CURSOR FOR SELECT name FROM sysobjects WHERE type = ‘U’ AND crdate <= DATEADD(m,-1,GETDATE()) AND name LIKE ‘b_%’ OPEN cur_name FETCH NEXT FROM cur_name INTO @lcl_name WHILE @@Fetch_status = 0 BEGIN SELECT @lcl_name = ‘sp_depends’ +@lcl_name PRINT @lcl_name — EXEC (@lcl_name) FETCH NEXT FROM cur_name INTO @lcl_name END CLOSE cur_name DEALLOCATE cur_name SET NOCOUNT OFF
  İşte cursorlarla ilgili olarak hatırlanması gereken noktalardan birkaçı.

Size ve Veritabanlarınıza Yardımcı Olmak İçin Bekliyoruz!

İletişime geçerek hemen destek alabilirsiniz.

İletişim
Geçerli Veritabanındaki Kullanımdan Kaldırılan Alanları Silmek için Komut Dosyasını Otomatik Olarak Oluşturma Kullanımdan kaldırılacak alanları her zaman önek olarak “dep_” ile işaretleriz. Bu şekilde, birkaç gün sonra, artık alana ihtiyacım olmadığından emin olduğumda, kullanımdan kaldırma komut dosyasını otomatik olarak oluşturmak için sorguyu çalıştırıyoruz. Betik ayrıca sistemdeki herhangi bir kısıtlama olup olmadığını kontrol eder ve betiği de bırakmak için otomatik olarak oluşturur.  
SELECT ‘ALTER TABLE [‘+po.name+’] DROP CONSTRAINT [‘ + so.name + ‘]’ FROM sysobjects so INNER JOIN sysconstraints sc ON so.id = sc.constid INNER JOIN syscolumns col ON sc.colid = col.colid AND so.parent_obj = col.id AND col.name LIKE ‘dep[_]%’ INNER JOIN sysobjects po ON so.parent_obj = po.id WHERE so.xtype = ‘D’ ORDER BY po.name, col.name  
 
SELECT ‘ALTER TABLE [‘+table_schema+’].[‘+Table_name+’] DROP COLUMN [‘ + Column_name + ‘]’ FROM INFORMATION_SCHEMA.COLUMNS WHERE column_name LIKE ‘dep[_]%’ ORDER BY Table_name, Column_name  

Size ve Veritabanlarınıza Yardımcı Olmak İçin Bekliyoruz!

İletişime geçerek hemen destek alabilirsiniz.

İletişim

Basit Cursor Örneği

Bu, SQL Server Cursor’un en basit örneğidir. Bunu çoğu zaman T-SQL’imizde herhangi bir Cursor kullanımı için kullanıyoruz.  
DECLARE @AccountID INT DECLARE @getAccountID CURSOR SET @getAccountID = CURSOR FOR SELECT Account_ID FROM Accounts OPEN @getAccountID FETCH NEXT FROM @getAccountID INTO @AccountID WHILE @@FETCH_STATUS = 0 BEGIN PRINT @AccountID FETCH NEXT FROM @getAccountID INTO @AccountID END CLOSE @getAccountID DEALLOCATE @getAccountID

Size ve Veritabanlarınıza Yardımcı Olmak İçin Bekliyoruz!

İletişime geçerek hemen destek alabilirsiniz.

İletişim
SQL Server’ın Hangi Sürümünü Kullanmalısınız? SQL Server’ı yüklemeden önce, durun! Gerçekten doğru sürümü kullandığınızdan emin misiniz? Biliyoruz ki mevcut yapıyı korumayı herkes ister ve uygulama hizmet sağlayıcıları sadece eski sürümleri destekleyeceğini söylüyor, ancak şimdi daha yeni bir sürüm için durumunuzu ortaya koyma şansınız var ve bunu yapmanıza yardımcı olacağız. Eğer ihtiyaçlarınız aşağıdaki gibiyse SQL Server 2014’ü seçmelisiniz. Sonuç olarak, bugün 2014 yeni kurulumlarını tavsiye etmiyoruz. Devam edelim. Eğer ihtiyaçlarınız aşağıdaki gibiyse SQL Server 2016’yı seçmelisiniz. Eğer ihtiyaçlarınız aşağıdaki gibiyse SQL Server 2017’yi seçmelisiniz. Burada 2017’yi savunmak bizim için zor. Özellikler çok da şaşırtıcı değil, bu yüzden insanlar ya 2016 ya da 2019’a yöneliyor. Eğer ihtiyaçlarınız aşağıdaki gibiyse SQL Server 2019’u seçmelisiniz. Eğer ihtiyaçlarınız aşağıdaki gibiyse SQL Server 2022’yi seçmelisiniz.

Peki doğru cevap nedir?

Yukarıdaki değerlendirmeler ışığında düşündüğümüzde, iş bilgisini de göz önüne aldığımızda, her müşteri ihtiyacının farklılaştığını görmekteyiz. Ancak ortalama bir karara varacak olursak, SQL Server 2019 çoğu insan için oldukça ikna edici bir durum oluşturuyor. Yeni özelliklerin, kararlılığın ve Microsoft support ömrünün iyi bir dengesidir. İnsanların çok çalıştığı ve her yıl her sunucuyu yükseltemediği çoğu çalışma ortamında, bugün 2019’u yüklediğini ve ardından 2022’nin yama sürümünün nasıl gittiğini ve 2022’den sonra bir sonraki sürümü beklediğini görebiliyoruz. er’ın Hangi Sürümünü Kullanmalısınız? SQL Server’ı yüklemeden önce, durun! Gerçekten doğru sürümü kullandığınızdan emin misiniz? Biliyoruz ki mevcut yapıyı korumayı herkes ister ve uygulama hizmet sağlayıcıları sadece eski sürümleri destekleyeceğini söylüyor, ancak şimdi daha yeni bir sürüm için durumunuzu ortaya koyma şansınız var ve bunu yapmanıza yardımcı olacağız. Eğer ihtiyaçlarınız aşağıdaki gibiyse SQL Server 2014’ü seçmelisiniz. Sonuç olarak, bugün 2014 yeni kurulumlarını tavsiye etmiyoruz. Devam edelim. Eğer ihtiyaçlarınız aşağıdaki gibiyse SQL Server 2016’yı seçmelisiniz. Eğer ihtiyaçlarınız aşağıdaki gibiyse SQL Server 2017’yi seçmelisiniz. Burada 2017’yi savunmak bizim için zor. Özellikler çok da şaşırtıcı değil, bu yüzden insanlar ya 2016 ya da 2019’a yöneliyor. Eğer ihtiyaçlarınız aşağıdaki gibiyse SQL Server 2019’u seçmelisiniz. Eğer ihtiyaçlarınız aşağıdaki gibiyse SQL Server 2022’yi seçmelisiniz. Peki doğru cevap nedir? Yukarıdaki değerlendirmeler ışığında düşündüğümüzde, iş bilgisini de göz önüne aldığımızda, her müşteri ihtiyacının farklılaştığını görmekteyiz. Ancak ortalama bir karara varacak olursak, SQL Server 2019 çoğu insan için oldukça ikna edici bir durum oluşturuyor. Yeni özelliklerin, kararlılığın ve Microsoft support ömrünün iyi bir dengesidir. İnsanların çok çalıştığı ve her yıl her sunucuyu yükseltemediği çoğu çalışma ortamında, bugün 2019’u yüklediğini ve ardından 2022’nin yama sürümünün nasıl gittiğini ve 2022’den sonra bir sonraki sürümü beklediğini görebiliyoruz.  

Size ve Veritabanlarınıza Yardımcı Olmak İçin Bekliyoruz!

İletişime geçerek hemen destek alabilirsiniz.

İletişim
Cursor Yapısını Set Tabanlı Insert Yapısına Dönüştürme Müşterimizle yakın zamanda yaptığımız Kapsamlı Veritabanı Performansı Durum Denetimi sırasında, ekleme işlemleri için Cursor kullanımıyla ilgili, sunucunun genel performansı üzerinde zararlı bir etkisi olan önemli bir sorunla karşılaştık. İmleçler, belirli durumlarda yararlı olmakla birlikte, özellikle büyük sonuç kümeleriyle uğraşırken yavaş ve kaynak yoğun olabilir. Sonuç olarak, performansı iyileştirmek için alternatif yaklaşımları keşfetmek önemlidir. Bu blog gönderisinde, Cursor tabanlı eklemeler konusuna odaklanacağız ve bunların küme tabanlı işlemlere nasıl dönüştürüleceğini göstereceğiz. Örnek Kurulum İlk olarak, bir örnek tablo oluşturacağız ve onu bazı verilerle dolduracağız. Aşağıdaki script, üç sütunlu Çalışan adlı bir tablo oluşturur: EmployeeID, FirstName, and LastName.  
CREATE TABLE Employee ( EmployeeID INT, FirstName VARCHAR(50), LastName VARCHAR(50) ); GO INSERT INTO Employee VALUES (1, ‘John’, ‘Doe’); INSERT INTO Employee VALUES (2, ‘Jane’, ‘Doe’); INSERT INTO Employee VALUES (3, ‘Bob’, ‘Smith’); INSERT INTO Employee VALUES (4, ‘Alice’, ‘Jones’); GO CREATE TABLE EmployeeCopy ( EmployeeID INT, FirstName VARCHAR(50), LastName VARCHAR(50) );

Cursor Tabanlı Ekleme

Ardından, Çalışan tablosunda yinelenen ve her satırda bir ekleme işlemi gerçekleştiren bir Cursor oluşturacağız. Aşağıdaki komut dosyası bunun nasıl yapılacağını gösterir: Bu Cursor, Çalışan tablosunda yinelenir ve her satır için EmployeeID, FirstName, and LastName sütunlarını alır. Ardından, Çalışan tablosunun bir kopyası olan EmployeeCopy tablosunda bir ekleme işlemi gerçekleştirir. Bu komut dosyası çalıştırılmadan önce EmployeeCopy tablosunun oluşturulması gerektiğini unutmayın.  
DECLARE @EmployeeID INT; DECLARE @FirstName VARCHAR(50); DECLARE @LastName VARCHAR(50); DECLARE EmployeeCursor CURSOR FOR SELECT EmployeeID, FirstName, LastName FROM Employee; OPEN EmployeeCursor; FETCH NEXT FROM EmployeeCursor INTO @EmployeeID, @FirstName, @LastName; WHILE @@FETCH_STATUS = 0 BEGIN INSERT INTO EmployeeCopy (EmployeeID, FirstName, LastName) VALUES (@EmployeeID, @FirstName, @LastName); FETCH NEXT FROM EmployeeCursor INTO @EmployeeID, @FirstName, @LastName; END CLOSE EmployeeCursor; DEALLOCATE EmployeeCursor;  

Set tabanlı Ekleme

Şimdi, Cursor tabanlı eklemeyi set tabanlı eklemeye dönüştürelim. Aşağıdaki komut dosyası bunun nasıl yapılacağını gösterir:
INSERT INTO EmployeeCopy (EmployeeID, FirstName, LastName) SELECT EmployeeID, FirstName, LastName FROM Employee;
  Bu script, Çalışan tablosundan EmployeeID, FirstName, and LastName sütunlarını alan ve bunları EmployeeCopy tablosuna ekleyen bir seçme ifadesi gerçekleştirir. Bu yaklaşım küme tabanlıdır, yani her seferinde bir satır yinelemek yerine sonuç kümesinin tamamı üzerinde aynı anda çalışır.

Performans karşılaştırması

Son olarak, Cursor tabanlı ekleme ile küme tabanlı eklemenin performansını karşılaştıralım. Her yaklaşımın yürütme süresini ölçmek için aşağıdaki betiği kullanabiliriz:  
DECLARE @StartTime DATETIME; DECLARE @EndTime DATETIME; DECLARE @Duration INT; SET @StartTime = GETDATE(); — … — Cursor-based insert — … SET @EndTime = GETDATE(); SET @Duration = DATEDIFF(MILLISECOND, @StartTime, @EndTime); PRINT ‘Cursor-based insert duration: ‘ + CAST(@Duration AS VARCHAR(10)) + ‘ms’; SET @StartTime = GETDATE(); — … — Setbased insert — … SET @EndTime = GETDATE(); SET @Duration = DATEDIFF(MILLISECOND, @StartTime, @EndTime); PRINT ‘Set-based insert duration: ‘ + CAST(@Duration AS VARCHAR(10)) + ‘ms’;
  Bu script, Cursor tabanlı eklemenin ve küme tabanlı eklemenin yürütme süresini ölçer ve sonuçları konsola yazdırır. Yürütme süresini ölçmek için Cursor tabanlı ekleme kodunun açıklamasını kaldırmanız gerektiğini unutmayın. Bu betiği çalıştırdığımızda aşağıdaki çıktıyı alıyoruz:  
Cursor-based insert duration: 22ms Set-based insert duration: 0ms  
Gördüğünüz gibi, küme tabanlı ekleme işlemi Cursor tabanlı ekleme işleminden çok daha hızlıdır ve Cursor tabanlı ekleme için 18 ms ile karşılaştırıldığında yalnızca 0 ms sürer. Bunun nedeni, küme tabanlı eklemenin sonuç kümesinin tamamında aynı anda çalışması, Cursor tabanlı eklemenin ise sonuç kümesinde her seferinde bir satır yineleme yapmasıdır; bu, yavaş ve kaynak yoğun olabilir.

Çözüm

Bu blog gönderimizde, SQL Server’da bir imlecin küme tabanlı bir ekleme işlemine nasıl dönüştürüleceğini gösterdik. Örnek bir tablo oluşturduk, onu bazı verilerle doldurduk ve ardından veriler arasında yinelenen ve her satırda bir ekleme işlemi gerçekleştiren bir Cursor oluşturduk. Daha sonra imleci küme tabanlı bir ekleme işlemine dönüştürdük ve iki yaklaşımın performansını karşılaştırdık. Küme tabanlı ekleme işleminin Cursor tabanlı ekleme işleminden çok daha hızlı ve verimli olduğunu bulduk ve SQL Server’da küme tabanlı işlemleri kullanmanın faydalarını vurgulamış olduk.

Size ve Veritabanlarınıza Yardımcı Olmak İçin Bekliyoruz!

İletişime geçerek hemen destek alabilirsiniz.

İletişim