Dinamik yönetim görünümleri ((Dynamic management views)(DMV’ler)) Nedir?

SQL Server 2005’te tanıtılan Dinamik yönetim görünümleri (DMV’ler), SQL Server’ın önemli özellikleridir. Yürütme planları, sorgu istatistikleri, son sorgular vb. hakkında veri sağlayan birkaç DMV vardır. Bunlar, bir SQL Server örneğinde neler olup bittiğini belirlemek için birlikte kullanılabilir. Bu gönderide, kaynaklarınızın nereye harcandığını ve çok daha fazlasını belirlemenize yardımcı olabilecek bazı yararlı sorguları listeleyeceğim. NOT: Sorgular şunlar için geçerlidir: SQL Server 2014 (12.x) ve sonrası.

Top TSQL by reads

Storage okumaları SQL’in yapabileceği en yavaş işlemdir. Bu nedenle, ayarlama yaparken, en fazla mantıksal okumaya neden olan TSQL çağrılarına odaklanmak genellikle mantıklıdır. Depolama erişimi azaltılırsa SQL daha az CPU’ya ihtiyaç duyar ve sorgunun süresi artar. Mantıksal (depolama) okumalara göre en pahalı 10 TSQL çağrısını elde etmek için aşağıdaki sorguyu çalıştırın:
SELECT TOP(10) DB_NAME(t.[dbid]) AS [Database], REPLACE(REPLACE(LEFT(t.[text], 255), CHAR(10),”), CHAR(13),”) AS [ShortQueryTXT], qs.total_logical_reads AS [TotalLogicalReads], qs.min_logical_reads AS [MinLogicalReads], qs.total_logical_reads/qs.execution_count AS [AvgLogicalReads], qs.max_logical_reads AS [MaxLogicalReads], qs.min_worker_time AS [MinWorkerTime], qs.total_worker_time/qs.execution_count AS [AvgWorkerTime], qs.max_worker_time AS [MaxWorkerTime], qs.min_elapsed_time AS [MinElapsedTime], qs.total_elapsed_time/qs.execution_count AS [AvgElapsedTime], qs.max_elapsed_time AS [MaxElapsedTime], qs.execution_count AS [ExecutionCount], CASE WHEN CONVERT(nvarchar(max), qp.query_plan) LIKE N’%%’ THEN 1 ELSE 0 END AS [HasMissingIX], qs.creation_time AS [CreationTime] ,t.[text] AS [Complete Query Text], qp.query_plan AS [QueryPlan] FROM sys.dm_exec_query_stats AS qs WITH (NOLOCK) CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS t CROSS APPLY sys.dm_exec_query_plan(plan_handle) AS qp ORDER BY qs.total_logical_reads DESC OPTION (RECOMPILE)

Top TSQL by CPU

Toplam Çalışan Süresi en yüksek toplam CPU döngüsü anlamına gelir. En pahalı ilk 10 TSQL CPU tüketicisini bulmak için aşağıdaki sorguyu çalıştırın.
SELECT TOP(10) DB_NAME(t.[dbid]) AS [Database], REPLACE(REPLACE(LEFT(t.[text], 255), CHAR(10),”), CHAR(13),”) AS [ShortQueryText], qs.total_worker_time AS [Total Worker Time], qs.min_worker_time AS [MinWorkerTime], qs.total_worker_time/qs.execution_count AS [AvgWorkerTime], qs.max_worker_time AS [MaxWorkerTime], qs.min_elapsed_time AS [MinElapsedTime], qs.total_elapsed_time/qs.execution_count AS [AvgElapsedTime], qs.max_elapsed_time AS [MaxElapsedTime], qs.min_logical_reads AS [MinLogicalReads], qs.total_logical_reads/qs.execution_count AS [AvgLogicalReads], qs.max_logical_reads AS [MaxLogicalReads], qs.execution_count AS [ExecutionCount], CASE WHEN CONVERT(nvarchar(max), qp.query_plan) LIKE N’%%’ THEN 1 ELSE 0 END AS [HasMissingIX], qs.creation_time AS [CreationTime] ,t.[text] AS [Query Text], qp.query_plan AS [QueryPlan] FROM sys.dm_exec_query_stats AS qs WITH (NOLOCK) CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS t CROSS APPLY sys.dm_exec_query_plan(plan_handle) AS qp ORDER BY qs.total_worker_time DESC OPTION (RECOMPILE)

Top TSQL by execution count

En iyi 10 TSQL çağrısını almak için aşağıdaki sorguyu çalıştırın.
SELECT TOP(10) LEFT(t.[text], 50) AS [ShortQueryText], qs.execution_count AS [ExecutionCount], qs.total_logical_reads AS [TotalLogicalReads], qs.total_logical_reads/qs.execution_count AS [AvgLogicalReads], qs.total_worker_time AS [TotalWorkerTime], qs.total_worker_time/qs.execution_count AS [AvgWorkerTime], qs.total_elapsed_time AS [TotalElapsedTime], qs.total_elapsed_time/qs.execution_count AS [AvgElapsedTime], CASE WHEN CONVERT(nvarchar(max), qp.query_plan) LIKE N’%%’ THEN 1 ELSE 0 END AS [HasMissingIX], qs.creation_time AS [CreationTime] ,t.[text] AS [CompleteQueryText], qp.query_plan AS [Query Plan] FROM sys.dm_exec_query_stats AS qs WITH (NOLOCK) CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS t CROSS APPLY sys.dm_exec_query_plan(plan_handle) AS qp WHERE t.dbid = DB_ID() ORDER BY [ExecutionCount] DESC OPTION (RECOMPILE)

Ortalama Değişken Zamana Göre Top SPs

Bu, sorgunun bazen hızlı bazen yavaş olduğunu gösterir. Genellikle bu, kötü sorgu planının önbelleğe alındığı ve SP yeniden çalıştırıldığında kötü plan kullandığı anlamına gelir. Bunu ayarlamak kolay olabilir. Ortalama değişken zamana göre ilk 10 Stored procedure almak için aşağıdaki sorguyu çalıştırınız:
SELECT TOP(10) p.name AS [SPName], qs.min_elapsed_time, qs.total_elapsed_time/qs.execution_count AS [AvgElapsedTime], qs.max_elapsed_time, qs.last_elapsed_time, qs.total_elapsed_time, qs.execution_count, ISNULL(qs.execution_count/DATEDIFF(Minute, qs.cached_time, GETDATE()), 0) AS [Calls/Minute], qs.total_worker_time/qs.execution_count AS [AvgWorkerTime], qs.total_worker_time AS [TotalWorkerTime], CASE WHEN CONVERT(nvarchar(max), qp.query_plan) LIKE N’%%’ THEN 1 ELSE 0 END AS [HasMissingIX], FORMAT(qs.last_execution_time, ‘yyyy-MM-dd HH:mm:ss’, ‘en-US’) AS [LastExecutionTime], FORMAT(qs.cached_time, ‘yyyy-MM-dd HH:mm:ss’, ‘en-US’) AS [PlanCachedTime] ,qp.query_plan AS [QueryPlan] FROM sys.procedures AS p WITH (NOLOCK) INNER JOIN sys.dm_exec_procedure_stats AS qs WITH (NOLOCK) ON p.[object_id] = qs.[object_id] CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS qp WHERE qs.database_id = DB_ID() AND DATEDIFF(Minute, qs.cached_time, GETDATE()) > 0 ORDER BY [AvgElapsedTime] DESC OPTION (RECOMPILE)

Top SPs by CPU usage

Toplam Çalışma Süresi–, SQL Engine yeniden başlatıldıktan sonra bu store procedure tarafından tüketilen toplam CPU maliyetidir. CPU’ya göre en pahalı 10 stored procedures almak için aşağıdaki sorguyu çalıştırın.
SELECT TOP(10) p.name AS [SPName], qs.total_worker_time AS [TotalWorkerTime], qs.total_worker_time/qs.execution_count AS [AvgWorkerTime], qs.execution_count AS [ExecutionCount], ISNULL(qs.execution_count/DATEDIFF(Minute, qs.cached_time, GETDATE()), 0) AS [Calls/Minute], qs.total_elapsed_time, qs.total_elapsed_time/qs.execution_count AS [AvgElapsedTime], CASE WHEN CONVERT(nvarchar(max), qp.query_plan) LIKE N’%%’ THEN 1 ELSE 0 END AS [HasMissingIX], FORMAT(qs.last_execution_time, ‘yyyy-MM-dd HH:mm:ss’, ‘en-US’) AS [LastExecutionTime], FORMAT(qs.cached_time, ‘yyyy-MM-dd HH:mm:ss’, ‘en-US’) AS [PlanCachedTime] ,qp.query_plan AS [Query Plan] FROM sys.procedures AS p WITH (NOLOCK) INNER JOIN sys.dm_exec_procedure_stats AS qs WITH (NOLOCK) ON p.[object_id] = qs.[object_id] CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS qp WHERE qs.database_id = DB_ID() AND DATEDIFF(Minute, qs.cached_time, GETDATE()) > 0 ORDER BY qs.total_worker_time DESC OPTION (RECOMPILE)  

Top SPs By Execution Count

En çok yürütülen ilk 10 stored procedure ‘leri almak için aşağıdaki sorguyu çalıştırın.
SELECT TOP(10) p.name AS [SPName], qs.execution_count AS [ExecutionCount], ISNULL(qs.execution_count/DATEDIFF(Minute, qs.cached_time, GETDATE()), 0) AS [Calls/Minute], qs.total_elapsed_time/qs.execution_count AS [AvgElapsedTime], qs.total_worker_time/qs.execution_count AS [AvgWorkerTime], qs.total_logical_reads/qs.execution_count AS [AvgLogicalReads], CASE WHEN CONVERT(nvarchar(max), qp.query_plan) LIKE N’%%’ THEN 1 ELSE 0 END AS [HasMissingIX], FORMAT(qs.last_execution_time, ‘yyyy-MM-dd HH:mm:ss’, ‘en-US’) AS [LastExecutionTime], FORMAT(qs.cached_time, ‘yyyy-MM-dd HH:mm:ss’, ‘en-US’) AS [PlanCachedTime] ,qp.query_plan AS [QueryPlan] FROM sys.procedures AS p WITH (NOLOCK) INNER JOIN sys.dm_exec_procedure_stats AS qs WITH (NOLOCK) ON p.[object_id] = qs.[object_id] CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS qp WHERE qs.database_id = DB_ID() AND DATEDIFF(Minute, qs.cached_time, GETDATE()) > 0 ORDER BY [ExecutionCount] DESC OPTION (RECOMPILE)

Top SPs by I/O

Bu, en çok I/O’ya neden olan stored procedure’lerin hangileri olduğunu gösterir. Ortalama I/O’ya göre en pahalı 10 store procudere çağrısını almak için aşağıdaki sorguyu çalıştırın.
SELECT TOP(10) OBJECT_NAME(qt.objectid, dbid) AS [SPName], (qs.total_logical_reads + qs.total_logical_writes) /qs.execution_count AS [AvgIO], qs.execution_count AS [ExecutionCount], SUBSTRING(qt.[text],qs.statement_start_offset/2, (CASE WHEN qs.statement_end_offset = -1 THEN LEN(CONVERT(nvarchar(max), qt.[text])) * 2 ELSE qs.statement_end_offset END – qs.statement_start_offset)/2) AS [QueryText] FROM sys.dm_exec_query_stats AS qs WITH (NOLOCK) CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt WHERE qt.[dbid] = DB_ID() ORDER BY [AvgIO] DESC OPTION (RECOMPILE)  
 

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

İletişime geçerek hemen destek alabilirsiniz.

İletişim

Aynı Anda Başlayan SQL Server Job’larını Nasıl Bulabilirsiniz?

Kategori: Performans Neden onları önemsemelisiniz? Birden fazla SQL Server Agent job’ları, aynı anda başlayacak şekilde yapılandırılmıştır ve bu, işler üst üste gelmeyecekmiş gibi hızlı gerçekleştirilmeyecektir. SQL Server’ınız kısa süreler boyunca ağır yük altında olabilir. Aynı anda başlayan SQL Server işlerini nasıl bulabiliriz? Tam olarak aynı anda başlayan tüm Agent SQL Server joblarını listelemek için aşağıdaki betiği kullanabilirsiniz.  
SELECT j.name As JobName,  j.description AS JobDescription,  a.start_execution_date AS JobStartExecutionDate FROM msdb.dbo.sysjobs j INNER JOIN msdb.dbo.sysjobactivity a ON j.job_id = a.job_id WHERE j.enabled = 1 AND a.start_execution_date IN (SELECT start_execution_date FROM msdb.dbo.sysjobactivity GROUP BY start_execution_date HAVING COUNT(*) > 1)
 

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

İletişime geçerek hemen destek alabilirsiniz.

İletişim

SET Options İle Oluşturulan SQL Server Nesneleri

Kategori: Performans Set seçenekleri nelerdir? SQL Server geriye dönük uyumluluk SET seçenekleri, yeni geliştirme için ISO SQL standartlarını desteklerken eski T-SQL kodunun daha yeni SQL Server sürümlerinde değişiklik olmadan çalışmasına izin verir. Kısaca, ISO dışı davranış bekleyen uygulamaların bozulmasını önlerler. Bunu neden önemsemelisiniz? Nesnelerin içinde kullanılan tablolara filtre uygulanmış bir dizin, dizinlenmiş görünümler veya diğer gelişmiş özellikler eklemek istediğinizde, bu ayarlar KAPALI olarak nesne oluşturulması önerilmez, bunlar sorunlara neden olur. Set seçenekleriyle SQL Server nesneleri nasıl bulunur? Aşağıdaki sorguyu kullanarak QUOTED_IDENTIFIER veya ANSI_NULLS OFF olan nesneleri bulabilirsiniz.  
SELECT OBJECT_SCHEMA_NAME(o.object_id) AS SchemaName ,OBJECT_NAME(o.object_id) AS ObjectName ,o.type_desc AS ObjectType FROM sys.objects AS o WHERE 0 IN( OBJECTPROPERTY(o.object_id, ‘ExecIsQuotedIdentOn’), OBJECTPROPERTY(o.object_id, ‘ExecIsAnsiNullsOn’))
  Aşağıdaki sorguyu kullanarak ANSI_PADDING OFF ile Varchar(n)/varbinary(n) sütunlarını bulabilirsiniz.
SELECT OBJECT_SCHEMA_NAME(t.object_id) AS SchemaName ,OBJECT_NAME(t.object_id) AS ObjectName ,c.name AS ColumnName FROM sys.tables AS t JOIN sys.columns AS c ON c.object_id = t.object_id JOIN sys.types AS ty ON ty.system_type_id = c.system_type_id AND ty.user_type_id = c.user_type_id WHERE c.is_ansi_padded = 0 AND ((ty.name IN (‘varbinary’,’varchar’) AND c.max_length <> -1) OR (ty.name IN (‘binary’,’char’) AND c.is_nullable = 1))
Onları nasıl düzeltebiliriz? 1. Kalıcı KAPALI ayarını AÇIK olarak değiştirmek için QUOTED_IDENTIFER ve ANSI_NULLS AÇIK olan bir oturumdan nesneyi yeniden oluşturun. DDL komut dosyalarını yürütürken oturum ayarının AÇIK olduğundan emin olun. 2. Kalıcı bir sütun ANSI_PADDING ayarını KAPALI’dan AÇIK’a değiştirmek için, ANSI_PADDING AÇIK oturumundan ALTER TABLE…ALTER COLUMN öğesini çalıştırın (mevcut sütunla aynı tanımı belirtin).

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

İletişime geçerek hemen destek alabilirsiniz.

İletişim

Windows Görev Zamanlayıcınızı Gözden Geçirin: SQL Server Performansınızı Etkileyebilir

Kategori: Performans Windows görev zamanlayıcısı nedir? Programları ve programları önceden tanımlanmış zamanlarda veya belirtilen zaman aralıklarından sonra çalışacak şekilde programlayabilen bir Windows bileşenidir. Bunu neden önemsemelisiniz? Bazen, sizin haberiniz olmadan SQL’in en yoğun olduğu zamanlarda başlayabilen ve performansı etkileyebilen, SQL ile ilgili olmayan bazı görevler planlanmıştır. Nasıl kontrol edilir? 1- Windows arama kutusunu kullanın ve “Scheduler” için arama yapınız. Tüm programları listelemek için Task scheduler’a tıklayınız. Nasıl düzeltilir?
  1. Nelerin kaldırılabileceğini görün.
  2. Görevin kalması gerekiyorsa, onu SQL’in işlem yükünün olmadığı zamanlara planlamanızı öneririz.

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

İletişime geçerek hemen destek alabilirsiniz.

İletişim
SQL Server için Optimal Windows’un Page File Ayarları Kategori: Performans Windows işletim sistemi sayfa dosyası nedir? Bu dosya bir sanal bellek biçimidir. Ram belleğiniz dolduğunda, Windows verileri RAM belleğinizden sabit sürücünüze taşır ve disk belleği dosyasına (takas dosyası olarak da bilinir) yerleştirir. SQL Server’ınızın disk belleği başlatmasını asla istemezsiniz. SQL Server, belleği diske alındığında armut şeklini alma eğilimindedir. SQL Server için en uygun page file boyutu ayarları Varsayılan olarak, disk belleği dosyası Windows tarafından otomatik olarak yönetilir. SQL Server için en uygun olanı yapmayacağından, disk belleği dosyasının yönetimine Windows’a güvenmek istemezsiniz. Page file boyutlandırma, sistem kilitlenme dökümü ayarı gereksinimlerine ve Sistem taahhüt ücretinin en yüksek kullanımına veya beklenen en yüksek kullanımına bağlıdır. Her iki husus da aynı sistemler için bile her Sisteme özgüdür. Eski temel kurallar (Sayfa dosyası boyutu = RAM * 1.5 veya RAM * 2), mantığın şu şekilde olması gereken modern sistemlerde hiçbir anlam ifade etmez: ne kadar çok RAM’iniz varsa, disk belleği dosyasına o kadar az ihtiyacınız olur. Page File nasıl boyutlandırmalısınız? Belirli iş yüküne ve sunucu türüne bağlıdır. Page File boyutlandırırken, uygulamamızın bellek ihtiyaçlarını ve crash dump ayarlarını göz önünde bulundurmamız gerekir. 256 GB RAM’e kadar Sistemde Çekirdek Bellek dökümü için iyi bir başlangıç ​​noktası 8-12 GB olarak ayarlanmıştır. Bununla ilgili daha fazla bilgiyi buradan edinebilirsiniz. Windows dosya boyutunu nasıl değiştirebiliriz? Sayfa dosyasını Sistem Özellikleri’ni kullanarak yapılandırabilirsiniz:
  1. sysdm.cpl’yi çalıştırın
  2. Advanced’e gidin
  3.  Settings altında Performance ‘ı seçin
  4. Tekrar Advanced’a gidin
  5. Virtual Memory’i değiştirin
Not: SQL Server maksimum bellek ayarlarını doğru yaptığınızdan emin olun.

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

İletişime geçerek hemen destek alabilirsiniz.

İletişim

Gereksiz SQL Server Örneklerini ve Hizmetlerini Devre Dışı Bırakın

Neden onları önemsemelisiniz?

Değerli kaynaklarınızı kullanılmayan hizmetlere harcıyor olabilirsiniz. Daha fazla kaynak kullanmak için daha kritik SQL Örneğinize öncelik vermeniz ve daha az önemli olanların hepsini almasına izin vermemeniz en iyisi olacaktır.

Tüm SQL Server örneklerini ve hizmetlerini nasıl listeleyebiliriz?

  1. Start’a tıklayın ve “configuration” için arama yapın.
  2. “SQL Server configuration manager’i” açın ve “SQL Server Services” seçin.

Ayrıca aşağıdaki T-SQL kodu kullanılarak kurulan tüm örnekleri listeleyebilirsiniz.

EXEC master.sys.xp_regread @rootkey = ‘HKEY_LOCAL_MACHINE’, @key = ‘SOFTWARE\Microsoft\Microsoft SQL Server’, @value_name = ‘InstalledInstances’

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

İletişime geçerek hemen destek alabilirsiniz.

İletişim

Anında Dosya Başlatmaya Olanak Tanıyan SQL Server Performansını Arttırın

Kategori: Performans Anında dosya başlatma (Instant file initialization(IFI)) nedir?

Anında dosya başlatma, SQL Server’ınızın sıfır yazma adımını atlamasını ve veri dosyaları için ayrılan alanı hemen kullanmaya başlamasını sağlayan bir Windows özelliğidir. IFI, SQL Server’ın gerekli veritabanı oluşturma süresini (sunucu başlangıcında TEMPDB dahil), veri dosyası büyümesini azaltmasına ve özellikle büyük veritabanları için veritabanı geri yüklemesini en aza indirmesine olanak tanır. Anında Dosya Başlatma kullanılırken, silinen içeriğe, yalnızca yeni veriler dosyalara yazılırken silinen disk içeriğinin üzerine yazıldığından, veri dosyasının söz konusu belirli alanına başka veriler yazılana kadar yetkisiz bir sorumlu tarafından erişilebilir. SQL Server güvenli bir fiziksel ortamdaysa, performans avantajları güvenlik riskinden daha ağır basabilir ve dolayısıyla bu önerinin nedeni budur. Notlar: Anında Dosya Başlatmanın Etkin Olup Olmadığı Nasıl Kontrol Edilir? Anında dosya başlatmanın durumunu bulmanın bir yolu, error log’larını kontrol etmektir. Aşağıdaki betiği çalıştırabilirsiniz:
exec xp_readerrorlog 0, 1, N’Database Instant File Initialization’
Aşağıdaki betiği kullanarak DMV sys.dm_server_services’i de kullanabilirsiniz:
SELECT ServiceName, status_desc, instant_file_initialization_enabled FROM sys.dm_server_services

Nasıl etkinleştirebilirsiniz?

Öncelikle, SQL Server örneğinin hesap adını görmek için SQL Server Configuration Manager’ı açın:
  1. GPEDIT.MSC veya secpol.msc’ı çalıştırınız.
  2. Computer configuration’a gidiniz.
  3. Windows Settings’i seçiniz.
  4. Security Settings’a gidiniz.
  5. Local Policies’ı seçiniz.
  6. User Rights Assignment’ a gidiniz.
  7. Perform Volume Maintenance Tasks option’ gidiniz.
  8. SQL Server Service account dan hesabınızı ekleyin ve OK’a basınız.
  9. SQL Server services’i yeniden başlatın.

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

İletişime geçerek hemen destek alabilirsiniz.

İletişim

SQL Server’ınız kaç CPU Core kullanabilir?

Kategori: Performans

SQL Server’da CPU Zamanlayıcı nedir?

Yürütmek istediğiniz bir sorgu, bir görevi, yani çalışmanızı temsil eder. Çalışmanızın yürütme içeriğine işçi denir. CPU üzerinde yürütülmesi için bir zamanlayıcıya atanan bir çalışana bir görev atanır. CPU’ya gelenlerin yöneticisine zamanlayıcı denir ve her mantıksal işlemci için bir tane vardır. Bunu neden önemsemelisiniz? CPU’larınız var, onlar için para ödüyorsunuz, ancak SQL Server’ınız bir iş yükünü işlemek için hepsini kullanmayabilir. Lisanslama sorunları nedeniyle bazı CPU çekirdeklerine SQL Server tarafından erişilemeyebilir. Çevrimdışı CPU zamanlayıcıları olup olmadığı nasıl kontrol edilir? Aşağıdaki sorguyu kullanabilirsiniz. sys.dm_os_schedulers, zamanlayıcılar devre dışı bırakıldığında 0 döndürür.  
SELECT * FROM sys.dm_os_schedulers WHERE scheduler_id &lt; 255
 

Devre Dışı Bırakılan Zamanlayıcılar Nasıl Onarılır

Lisans sınırlamalarınız hakkında bilginiz var mı? SQL Server’ın her sürümü, maksimum sayıda yuvaya (veya fiziksel işlemcilere veya işlemci paketlerine) ve maksimum sayıda çekirdeğe sahiptir. SQL Server sürümünüzün kapasite sınırlarını kontrol edin. Yakınlık maskeleme kullanıyorsanız, ne yaptığınızı bildiğinizden emin olun. CPU yakınlığını Windows işletim sisteminde yapılandırmayın ve benzeşme maskesini SQL Server’da da yapılandırın. Öngörülemeyen sonuçlar elde edebilirsiniz. SQL Server CPU yakınlığı en iyi SQL Server’daki sp_configure seçeneği kullanılarak yapılandırılır. Sanallaştırmayı kullanırken sanal yuva başına çekirdek sayısını artırmayı düşünün, bu basit bir yazılım değişikliği olabilir.

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

İletişime geçerek hemen destek alabilirsiniz.

İletişim
Performans İçin T-SQL Çağrılarını Ayarlarken Neden Disk İşlemleri En Önemlidir? “Disk” Açıklaması “Disk” – farklı isimlere sahiptir. Bence bu, DBA küçük dünyasının dışındaki herkesin kafasını karıştırıyor. Bazı DBA’ların Disk dediği alternatif isimler : Bunların hepsi aynı anlama geliyor. SQL Server’ın Disk kaynağından istediği verileri almak için kaç Disk işleminin gerekli olduğudur. Disk kaynağında %95 SQL Server darboğazı. SQL Server’ınızın ne kadar yüklü olduğu da önemli değil. Disk, çoğu SQL Sunucusunun darboğaz yaptığı yerdir. Dönem. Yani endişelenmemiz gereken CPU veya RAM değil, değil mi? Bunun neden mantıklı olduğunu bilimsel olmayan açıklama yöntemim şu şekilde:
  1. Yavaş sorgular çok miktarda veriyi tarar (“oku” demenin süslü bir DBA yolu). Genellikle gereksiz yere. Bu, SQL sunucunuzun bu yavaş OKUMA işlemlerinin çoğunu yaptığı anlamına gelir.
  2. Henüz “okunan” verilerin bir yerde tutulması gerekir. Bu bir yerde RAM Belleğidir.
  3. Daha fazla veri “okundukça”, “eski” veriler RAM belleğinden çıkarılır (veya yeni veriler üzerine yazılır). RAM’deki kapasite sınırlıdır.
  4. SQL Server, veritabanı boyutunuzdan daha az RAM belleğine sahip olduğunda – ki bu çoğu zaman %100’dür – bu, TÜM verileri bellekte tutmak için yeterli RAM olmadığı anlamına gelir. Bu, bazı verilerin yavaş diskinde ve bazı verilerin hızlı RAM’de olduğu anlamına gelir. RAM’de olmayan verilerin diskten okunması gerekir ki bu SQL kutusunun yapabileceği en yavaş işlemidir. SÜPER YAVAŞ.
  5. Dolayısıyla, sorgu 10 satıra karşı 10 Milyon okuyacak şekilde değiştirilebilirse (ayarlanabilirse), bu, SQL Server’ın tüm bu satırları işlemek için yalnızca daha az disk işlemine değil, aynı zamanda daha az CPU ve RAM’e ihtiyaç duyduğu anlamına gelir. Bu nedenle, daha az diskten okuma yapmak çoğu zaman ANA hedeftir!
  6. Son kullanıcı için hiçbir şey hızdan (veya sorgunun süresinden) daha önemli değildir.
  7. CPU/RAM ve diğer kaynakları azaltmak için ayarlama yapmak da yararlıdır – ancak bu daha çok özel durumlarda olur. CPU’nuz sürekli olarak %90’a sabitlendiğinde veya bunun gibi veritabanı performansı tehlikede olduğunda CPU’yu ayarlarsınız.
  8. Sorgular daha az Disk işlemi gerektirecek şekilde ayarlandığında, SQL Server daha fazla kapasiteye sahip olur.  Bu nasıl mümkün olabilir?? Bir bakarsınız dört şeritli otoyolum var ve bütün şeritler hep meşgul. Arabaların %50’sini otoyoldan kaldırdığımızı varsayalım – bu otoyol ek şeride ihtiyaç duymadan daha uzun süre dayanır, değil mi? Yavaş SQL çağrılarını ayarlamakla aynı. Her sorguyu daha az kaynak tüketecek şekilde alırsam, fazladan kullanıcılar, fazladan sorgular ve fazladan büyüme için daha fazla yer açmış olurum.
  9. Bu, aynı sunucunun yükü iki veya üç katına çıkarabileceği anlamına gelir. Bu, aynı sunucunun ömrünü uzattığı anlamına gelir. Bu, donanım yükseltmelerinin geleceğe daha da ileriye itilebileceği anlamına gelir.
Çözüm Artık biliyorsunuz. “BU SQL’İN YAVAŞ OLMASINA SEBEP OLAN CPU’DUR!” diyenlere inanmayın. Artık SQL Server’ların %95’inde, yani SQL Server hızınızı öldüren Depolama işlemleri olduğunu bileceksiniz. Ve CPU sadece gecikmeli bir göstergedir. Elbette %95’e ulaşabilir, ancak Depolama okumalarını 1MM’den 10’a düşürürsem, CPU kullanımlarınız düşecektir.

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

İletişime geçerek hemen destek alabilirsiniz.

İletişim
Tempdb, Microsoft SQL Server’daki sistem veritabanlarından biridir. Geçici kullanıcı nesnelerini, satır sürüm oluşturma bilgilerini ve SQL Server motoru tarafından oluşturulan dahili nesneleri tutan genel bir kaynaktır. SQL Server, örnek her başlatıldığında TempDB’nin temiz bir kopyasını oluşturur. Bunu neden önemsemelisiniz? Tempdb, tüm SQL Server’ın performansını etkiler. Birçok arka plan işlemi TempDB kullanır. Optimum performans göstermezse, tüm veritabanları etkilenir ve tüm sunucuyu yavaşlatır. En iyi performans için TempDB nasıl ayarlanır? Veri dosyalarının sayısını kontrol edin Varsayılan olarak SQL Server yapılandırması, TempDB için tek bir veri dosyasına sahiptir. Microsoft disk bant genişliğini en üst düzeye çıkarmak ve çekişmeyi azaltmak için veri dosyalarının sayısını artırmanızı önerir. Sunucunuz için değişiklik komut dosyasını doğrulamak ve oluşturmak için aşağıdaki komut dosyasını kullanabilirsiniz.
  1. Değişikliği uygulamak için @check değişkenini 1 olarak değiştirin. Varsayılan değer olan 0 yalnızca bilgileri gösterir.
 
    1. DECLARE @check BIT
    2. SET @check = 0 –For information set 0, for change 1
    3. DECLARE @BASEPATH NVARCHAR(300)
    4. DECLARE @SQL_SCRIPT NVARCHAR(1000)
    5. DECLARE @CORES INT
    6. DECLARE @FILECOUNT INT
    7. DECLARE @SIZE INT
    8. DECLARE @GROWTH INT
    9. DECLARE @ISPERCENT INT
    10. — TempDB mdf count equal logical cpu count
    11. SELECT @CORES = cpu_count FROM sys.dm_os_sys_info
    12. PRINT ‘Logical CPU count ‘ + CAST(@CORES AS NVARCHAR(100))
    13. IF @CORES BETWEEN 9 AND 31 SET @CORES = @CORES / 2
    14. IF @CORES &gt;= 32 SET @CORES = @CORES / 4
    15. –Check and set tempdb files count are multiples of 4
    16. IF @CORES &gt; 8 SET @CORES = @CORES – (@CORES % 4)
    17. SET @BASEPATH = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N’tempdb.mdf’, LOWER(physical_name)) – 1) DataFileLocation
    18. FROM master.sys.master_files
    19. WHERE database_id = 2 AND FILE_ID = 1)
    20. SET @FILECOUNT = (SELECT COUNT(*)
    21. FROM master.sys.master_files
    22. WHERE database_id = 2 AND TYPE_DESC = N’ROWS’)
    23. SELECT @SIZE = size FROM master.sys.master_files WHERE database_id = 2 AND FILE_ID = 1
    24. SET @SIZE = @SIZE / 128
    25. SELECT @GROWTH = growth FROM master.sys.master_files WHERE database_id = 2 AND FILE_ID = 1
    26. SELECT @ISPERCENT = is_percent_growth FROM master.sys.master_files WHERE database_id = 2 AND FILE_ID = 1
    27. IF @ISPERCENT = 0 SET @GROWTH = @GROWTH * 8
    28. –Current situation
    29. PRINT ‘Needed ‘ + CAST(@CORES AS NVARCHAR(100)) + ‘ TempDB data files, now there is ‘ + CAST(@FILECOUNT AS NVARCHAR(100)) + CHAR(10) + CHAR(13)
    30. IF @check = 1 AND @CORES &gt; @FILECOUNT PRINT ‘Commands listed below will be executed’ + CHAR(10) + CHAR(13)
    31. IF @check = 0 AND @CORES &gt; @FILECOUNT PRINT ‘Commands listed below will NOT be executed’ + CHAR(10) + CHAR(13)
    32. WHILE @CORES &gt; @FILECOUNT
    33. BEGIN
    34.                 SET @SQL_SCRIPT = N’ALTER DATABASE tempdb
    35.                 ADD FILE (
    36.                                FILENAME = ”’ + @BASEPATH + ‘tempdb’ + RTRIM(CAST(@CORES AS NCHAR)) + ‘.ndf”,
    37.                                NAME = tempdev’ + RTRIM(CAST(@CORES AS NCHAR)) + ‘,
    38.                                SIZE = ‘ + RTRIM(CAST(@SIZE AS NCHAR)) + ‘MB,
    39.                                FILEGROWTH = ‘ + RTRIM(CAST(@GROWTH AS NCHAR))
    40.                 IF @ISPERCENT = 1 SET @SQL_SCRIPT = @SQL_SCRIPT + ‘%’ ELSE SET @SQL_SCRIPT = @SQL_SCRIPT + ‘KB’
    41.                 SET @SQL_SCRIPT = @SQL_SCRIPT + ‘)’
    42.                 IF @check = 1 EXEC(@SQL_SCRIPT)
    43.                 PRINT @SQL_SCRIPT
    44.                 SET @CORES = @CORES – 1
    45. END
Not: SQL Server 2016, CPU çekirdeği sayısını algılayan ve otomatik olarak uygun miktarda TempDB veri dosyası oluşturan yerleşik bir özelliğe sahiptir. Boyut ve otomatik büyüme ayarlarını gözden geçirin Doğru bir boyut belirleyin (10 GB ile başlayabilirsiniz) ve otomatik büyütme ayarlarını sabit bir değere ayarlayın. Yüzde kullanmayın.

Özel bir Sabit disk sürücüsü kullanın

Çoğu yüksek performanslı SQL sunucusu, tempdb’yi ayrılmış bir disk sürücüsüne yerleştirir. T1117 ve T1118 izleme işaretlerini kullanın Tempdb’nin daha hızlı çalışmasına yardımcı olacaklar. Not: Microsoft, bu davranışı SQL Server 2016 ve daha yeni sürümlerde standart hale getirdi.

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

İletişime geçerek hemen destek alabilirsiniz.

İletişim