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şimAynı 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şimSET 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şimWindows 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?
- Nelerin kaldırılabileceğini görün.
- 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- sysdm.cpl’yi çalıştırın
- Advanced’e gidin
- Settings altında Performance ‘ı seçin
- Tekrar Advanced’a gidin
- 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şimGereksiz 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?
- Start’a tıklayın ve “configuration” için arama yapın.
- “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şimAnı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:- Log dosyaları fayda sağlamaz.
- TDE (Şeffaf Veri Şifreleme) etkinleştirilirse, veritabanı Anında Dosya Başlatma özelliğinden yararlanamaz.
- Anında dosya başlatma, yalnızca Microsoft Windows XP Professional veya Windows Server 2003 veya sonraki sürümlerde mevcuttur.
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:
- GPEDIT.MSC veya secpol.msc’ı çalıştırınız.
- Computer configuration’a gidiniz.
- Windows Settings’i seçiniz.
- Security Settings’a gidiniz.
- Local Policies’ı seçiniz.
- User Rights Assignment’ a gidiniz.
- Perform Volume Maintenance Tasks option’ gidiniz.
- SQL Server Service account dan hesabınızı ekleyin ve OK’a basınız.
- 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şimSQL 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 < 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- Storage
- I/O (girdi çıktı operasyonları)
- Disk operasyonları
- Veya basitçe “Reads”
- 5.000RPM yavaş hareket eden eski tarz sabit diskleriniz varsa – %95’i disk olacaktır.
- Mini sürüm için başlangıç fiyatının 100.000 ABD Doları olduğu, sınıfının en iyisi flash depolama dizilerini veya SAN’ları çalıştırıyorsanız, bunun %95’i disk olacaktır.
- 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.
- Henüz “okunan” verilerin bir yerde tutulması gerekir. Bu bir yerde RAM Belleğidir.
- 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.
- 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Ş.
- 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!
- Son kullanıcı için hiçbir şey hızdan (veya sorgunun süresinden) daha önemli değildir.
- 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.
- 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.
- 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.
Size ve Veritabanlarınıza Yardımcı Olmak İçin Bekliyoruz!
İletişime geçerek hemen destek alabilirsiniz.
İletişim- 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.
-
- DECLARE @check BIT
- SET @check = 0 –For information set 0, for change 1
- DECLARE @BASEPATH NVARCHAR(300)
- DECLARE @SQL_SCRIPT NVARCHAR(1000)
- DECLARE @CORES INT
- DECLARE @FILECOUNT INT
- DECLARE @SIZE INT
- DECLARE @GROWTH INT
- DECLARE @ISPERCENT INT
- — TempDB mdf count equal logical cpu count
- SELECT @CORES = cpu_count FROM sys.dm_os_sys_info
- PRINT ‘Logical CPU count ‘ + CAST(@CORES AS NVARCHAR(100))
- IF @CORES BETWEEN 9 AND 31 SET @CORES = @CORES / 2
- IF @CORES >= 32 SET @CORES = @CORES / 4
- –Check and set tempdb files count are multiples of 4
- IF @CORES > 8 SET @CORES = @CORES – (@CORES % 4)
- SET @BASEPATH = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N’tempdb.mdf’, LOWER(physical_name)) – 1) DataFileLocation
- FROM master.sys.master_files
- WHERE database_id = 2 AND FILE_ID = 1)
- SET @FILECOUNT = (SELECT COUNT(*)
- FROM master.sys.master_files
- WHERE database_id = 2 AND TYPE_DESC = N’ROWS’)
- SELECT @SIZE = size FROM master.sys.master_files WHERE database_id = 2 AND FILE_ID = 1
- SET @SIZE = @SIZE / 128
- SELECT @GROWTH = growth FROM master.sys.master_files WHERE database_id = 2 AND FILE_ID = 1
- SELECT @ISPERCENT = is_percent_growth FROM master.sys.master_files WHERE database_id = 2 AND FILE_ID = 1
- IF @ISPERCENT = 0 SET @GROWTH = @GROWTH * 8
- –Current situation
- PRINT ‘Needed ‘ + CAST(@CORES AS NVARCHAR(100)) + ‘ TempDB data files, now there is ‘ + CAST(@FILECOUNT AS NVARCHAR(100)) + CHAR(10) + CHAR(13)
- IF @check = 1 AND @CORES > @FILECOUNT PRINT ‘Commands listed below will be executed’ + CHAR(10) + CHAR(13)
- IF @check = 0 AND @CORES > @FILECOUNT PRINT ‘Commands listed below will NOT be executed’ + CHAR(10) + CHAR(13)
- WHILE @CORES > @FILECOUNT
- BEGIN
- SET @SQL_SCRIPT = N’ALTER DATABASE tempdb
- ADD FILE (
- FILENAME = ”’ + @BASEPATH + ‘tempdb’ + RTRIM(CAST(@CORES AS NCHAR)) + ‘.ndf”,
- NAME = tempdev’ + RTRIM(CAST(@CORES AS NCHAR)) + ‘,
- SIZE = ‘ + RTRIM(CAST(@SIZE AS NCHAR)) + ‘MB,
- FILEGROWTH = ‘ + RTRIM(CAST(@GROWTH AS NCHAR))
- IF @ISPERCENT = 1 SET @SQL_SCRIPT = @SQL_SCRIPT + ‘%’ ELSE SET @SQL_SCRIPT = @SQL_SCRIPT + ‘KB’
- SET @SQL_SCRIPT = @SQL_SCRIPT + ‘)’
- IF @check = 1 EXEC(@SQL_SCRIPT)
- PRINT @SQL_SCRIPT
- SET @CORES = @CORES – 1
- END
Ö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