SQL Server üzerinde yük oluşturarak kaynak kullanımlarını ve sql server’ın bu yük ile başa çıkma durumu incelenmek için zaman zaman bazı testler yapılır. Yük oluştururken Microsoft tool’u ile bunu yapmak isterseniz daha önce kaleme aldığımız MSSQL Load (Stress) Test adlı makalemize bakabilirsiniz. Bu testleri yapmak için birçok tool vardır. Bunlardan biri de Adam Mechanic’in yapmış olduğu SqlQuerryStress Tool’u dur. Bu tool ile istediğiniz sorguyu istediğiniz thread’de ve istediğiniz sayıda göndererek sistem üzerinde yük oluşturabilirsiniz. Bu başlık altında SqlQueryStress tool’un kullanım durumuna ve kullanım sonrasında Sql Server üzerindeki yükleri inceleyeceğiz. Öncelikle bu tool’u aşağıdaki linkten indirebilirsiniz. İndirdikten sonra exe’yi yönetici olarak çalıştırmanız tool’un başlatılması için yeterli olacaktır. Bu tool’u birden fazla kez açıp farklı sorgularda gönderebilirsiniz. https://github.com/ErikEJ/SqlQueryStress/releases Görsel-1 Görsel – 2 Görsel – 3 Exe’yi başlattığımızda yukarıdaki görsel bizi ilk olarak karşılayacaktır. Burada başlatmadan önce Database button’u ile yükü hangi server ve database üzerinde, hangi kullanıcı ile yapacağımız bilgisini girmemiz gerekmektedir. […]
Bu yazıda SQL Server üzerinde yükler oluşturacağız, yük oluştururken SQL Server üzerindeki workload’ları inceleyeceğiz. SQL Server’da Yük Testi (Stress Testi) oluşturmak istediğimizde birçok tool önümüze çıkacaktır. Microsoft bu testi yapabilmemiz için bizimle RML Utilities Tool’unu paylaşmıştır. Öncelikle tool’u PC’inize kurmak ve yüklemek için aşağıdaki adımları takip etmelisiniz. Aşağıdaki linke girşi sağladıktan sonra downlaoda etmelisiniz. https://www.microsoft.com/en-us/download/details.aspx?id=103126 Görsel – 1 Görsel – 2 Kurulum başarılı şekilde tamamlandıktan sonra Tool’un aşağıdaki path’e kurulduğunu teyit edebilirsiniz. “C:\ProgramData\Microsoft\Windows\Start Menu\Programs\RML Utilities for SQL Server\” Görsel – 3 CMD’yi açtıktan sonra; aşağıdaki parametreleri kullanarak kendi yazmış olduğumuz sorguları stress testi için gönderebiliriz. Görsel – 4 Microsoft bu testi yaparken oStress komutunu kullanarak yapmaktadır. T-Sql query’lerin yük oluşturabilmesi için tasarlanmıştır. Bu sayede veritabanına ciddi bir yük bindirebilirsiniz. SQL Server üzerinde yük üretmek için bir database’e ihtiyacımız olacak. Biz bunun için AdventureWorks Veritabanını kullandık. Aşağıdaki link üzerinden bu Database’in backup’ını indirerek Restore edebilirsiniz. https://github.com/Microsoft/sql-server-samples/releases/download/adventureworks/AdventureWorks2022.bak Yük oluştururken 3 adet […]
Contained Availibility Group – SQL Server 2022 Feature Bu Yazımızda SQL Server 2022’nin Feature’larından olan Contained Availablity Group’tan bahsedeceğiz. SQL Server Always on ile birlikte birçok kullanıcı oluşturdukları Agent Job ve User’larda zaman zaman problemler ile karşılaşmaktadır. Özellikle hangi job’un primary’de hangi Job’un secondary’de çalışacağı konusu zaman zaman problemler yaratmaktadır. Tamda bu noktada SQL Server 2022 Contained AG özelliği ile bu probleme çözüm getirmek için hayatımıza girdi. Yazımızda adım adım nasıl Contained AG oluştrulur ve oluştururken nelere dikkat etmeliyiz bunları tek tek ele alacağız. 1.Adım: Yeni bir Availablity Group Wizard oluşturuyoruz. Görsel 1: New Availability Group Wizard 2.Adım: Yeni bir AG oluşturuyoruz. Burada önemli nokta Contained seçeneğinin seçilmesi. Reuse seçeneğini yeni oluşturduğumuz Contained AG’de seçmiyoruz Reuse’un kullanımı ile alakalı yazı içerisinde detaylı olarak paylaşacağız. Görsel 2: New Availability Group as Contained 3.Adım: Hangi database’in Contained AG içerisinde olacağını belirliyoruz. Biz örneğimizde ContainedDB’yi örnek olarak ele alacağız. Görsel 3: […]
SQL Server Cache Temizleme Yöntemleri Bu yazımızda SQL Server’da cache problemleri ile karşılaştığımızda hangi yöntemle nasıl çözümler üretebileceğimizin üzerinde duracağız. Bu işlem sistemde öngörülemeyen sorunlara yol açabileceğinden, komutları çalıştırmadan önce uzmanlardan yardım almanızda fayda olacaktır. Cache üzerinde sorun yaşamamıza neden olacak bazı durumlar vardır; Query’lerde çok fazla Recompile kullanımı. Özellikle Store Procedure içinde yer alan Option Recompile kullanımı. Dynamic T-SQL code’ların çok fazla kullanımı. SQL Server Instance’ın ihtiyacı olan memory’den daha az memory verilmesi. Uzun süre çalışan ve size olarak çok fazla data çeken query’ler Index’siz kullanılan query’ler. Birden fazla SQL Server Instance kullanımında var olan Memory’den daha fazla memory kullanımına izin verilmesi. Yukardaki durumlar memory dar boğazı yaşamamıza neden olacaktır ve bunun sonucunda cache temizleme ihtiyacı duyacağımız durumlar ortaya çıkması olasıdır. Cache temizlemenin birçok yöntemi vardır. Bu yöntemleri birlikte ele alacağız. 1-) DBCC FREEPROCCACHE Bu komut yardımı ile bir Resource pool’u ya da specific bir planı […]
Bu yazıda SQL Server DMV ve DMF Serimizin 7.’sine devam edeceğiz. Bu başlık altında Memory özelinde çokça kullandığımız performans counter’lara göz gezdireceğiz. Ve bu çıktıların ne olduklarına bakacağız. Memory ile ilişkili Performance Counter’lara göz gezdirmek istediğimizde; — Get size of SQL Server Page in bytes DECLARE @pg_size INT, @Instancename varchar(50) SELECT @pg_size = low from master..spt_values where number = 1 and type = ‘E’ — Extract perfmon counters to a temporary table IF OBJECT_ID(‘tempdb..#perfmon_counters’) is not null DROP TABLE #perfmon_counters SELECT * INTO #perfmon_counters FROM sys.dm_os_performance_counters; — Get SQL Server instance name as it require for capturing Buffer Cache hit Ratio SELECT @Instancename = LEFT([object_name], (CHARINDEX(‘:’,[object_name]))) FROM #perfmon_counters WHERE counter_name = ‘Buffer cache hit ratio’; SELECT * FROM ( SELECT ‘Total Server Memory (GB)’ as Cntr, (cntr_value/1048576.0) AS Value FROM #perfmon_counters WHERE counter_name = ‘Total Server Memory (KB)’ UNION ALL SELECT ‘Target Server Memory (GB)’, (cntr_value/1048576.0) […]
Bu yazımızda DMV ve DMF Serimizin 6.sına devam edeceğiz. Bir önceki seride Memory’ye ilişkin DMV ve DMF’leri ele almıştık. Bu yazıda Memory konusunda devam edeceğiz. SQL server’da Memory kavramı en önemli kavramlardan biridir. Özellikle tüm transaction işlemlerinin önce Buffer sonra disk üzerinden devam ettiğini düşünürsek buffer’ın oynadığı kritik rolü daha iyi anlayabiliriz. Bu yazıda Memory’nin durumunu ve monitör edilmesine bakacağız. Özellikle Performans sorunlarında memory konusunda sorun yaşandığı durumda nasıl okumak gerektiği önemli rol oynamaktadır. Hangi database’de, hangi tablo’da sorun yaşandığına ilişkin bilgilere bu paylaşım sonrasında görebileceğiz. SQL Server’ın Memory kullanım durumunu incelediğimde; select physical_memory_in_use_kb/1048576.0 AS ‘physical_memory_in_use (GB)’, locked_page_allocations_kb/1048576.0 AS ‘locked_page_allocations (GB)’, virtual_address_space_committed_kb/1048576.0 AS ‘virtual_address_space_committed (GB)’, available_commit_limit_kb/1048576.0 AS ‘available_commit_limit (GB)’, page_fault_count as ‘page_fault_count’ from sys.dm_os_process_memory; Görsel – 1 Physical_memory_in_use: Kullanımda olan Fiziksel Memory miktarını gösterir. locked_page_allocations: Memory’de lock’lanmış olan Page’lerin miktarını belirtir. virtual_address_space_contained: SQL Server VAS(Virtual Adress Space) için ayrılan miktarı belirtir. available_commit_limit: SQL Server tarafından kullanılabilecek Memory Miktarını gösterir. […]
Bu yazıda SQL Server’da DMV ve DMF serisinin 4.süne devam edeceğiz. Bir önceki yazımızda sys.dm_os_sys_info DMV’si altında neleri göreceğimizi ve sciprtler ile baktığımızda neleri okuyabileceğimizi görmüştük. Özellikle CPU kaynaklarının SQL server tarafından nasıl kullanıldığı öğrenmiştik. Bu yazıda sys.dm_os_sys_info ve memory ile ilişkili DMV’ler yardımı ile Memory kaynaklarının nasıl kullanıldığı ve burada nelerin dikkat edilmesi hususunda bilgileri öğrenmiş olacağız. Bildiğiniz gibi kaynaklara ilişkin bilgilere sys.dm_os_sys_info üzerinden erişebiliyorduk. Buffer Pool kullanım durumunu kontrol etmek istediğimde; SELECT (physical_memory_kb)/1024 AS physical_memory_MB, (committed_kb)/1024.0 as BPool_Committed_MB, (committed_target_kb)/1024.0 as BPool_Commit_Tgt_MB, (visible_target_kb)/1024.0 as BPool_Visible_MB FROM sys.dm_os_sys_info; Görsel – 1 physical_memory_MB: Fiziksel olarak server üzerindeki memory miktarı. visible_target_KB: Buffer Pool içerisinde yer alan 8KB’lık Buffer’ların sayısını gösterir. Bu değerin çok düşük olması Memory hataları veya memory dump alınmasına neden olacaktır. committed_kb: SQL Server tarafından kullanılan Actual Memory değeridir. committed_target_kb: SQL Server tarafından tüketilmek için denenen memory miktarıdır. committed_target_kb > committed_kb durumunda; SQL Server Mmemory Manager ek memory ihtiyacı […]
Bu yazımızda DMV ve DMF serisinin 3.’süne bakıyor olacağız. Konuya İlişkin daha detaylı bilgiye sahip olmak isterseniz ya da önceki serileri okumak isterseniz. SQL Server DMV ve DMF – I ve SQL Server DMV – II makalelerine göz gezdirilebilirsiniz. Bu yazımızda SQL Server üzerinde yoğun olarak kullandığımız ve SQL Operating system ile ilişkili bilgilere erişmek istediğimizde ihtiyacımız olan DMV ve DMF’lere göz gezdireceğiz. Bildiğiniz gibi DMV ve DMF’ler problem teşhisinde kullanıldığı gibi monitoring etmek içinde çokça kullanılmaktadır. Özellikle Operating system ile ilgili kullanmak istediğimizd sys.dm_os ile başlayanları kullanabiliriz. Peki biz hangi DMV’leri ne için ve nasıl okuyoruz? SQL Server’ın üzerinde koştuğu Windows’un bilgilerine ulaşmak için; SELECT * FROM sys.dm_os_windows_info; Görsel – 1 Windows_sku: Stock Keeping Unit Stock Keeping Unit değeri Windows_release sonucunun hexadecimal çıktısıdır. Görsel – 2 48 = 0x30 olduğunu biliyoruz. Bu değeri hesaplamak için Hexadecimal değeri Binary değere convert ederek elde edebilirsiniz. SQL Server ve üzerinde […]
DMV ve DMF serimizin 3. Serisinde sql server executionları arka planda çalışması sonucunda dataları performans anlamında nelere bakabileceğimizi ve bu parametreleri nasıl anlamlandırmamız gerektiğine bakacağız. Özellikle IO ve Memory dar boğazı yaşadığımız zamanlarda arka planda koşan sorgular büyük önem arz etmektedir. Bir önceki makalede kullandığımız DMV ve DMF’lerin detaylandırılmış ve bize hangi sonuçlarını verdiğini bu yazıda öğrenmiş olacağız. Özellikle Expensive Query olarak adlandırdığımız maliyetli sorguları kimi zaman sorun anında bulmak büyük sorunlar teşkil edebilmektedir. Sorunu doğru adreslediğimiz zaman çözüm noktasında ilerleme kaydetmiş oluyoruz. Şimdi hep birlikte performs dar boğazı yaratan sorguları nasıl bulabilirim konusunda bakalım. select top 50 coalesce (db_name(st.dbid), db_name(convert (int, pa.value)), ‘Empty’) as DBName, qs.last_execution_time as LastExecutionTime, SUBSTRING(st.text, (qs.statement_start_offset/2)+1, ((CASE qs.statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END – qs.statement_start_offset)/2) + 1) AS StatementText, st.text as ProcedureTextOrBatchText, qs.execution_count as ExecutionCount, (qs.total_worker_time/1000) as CPUTimeTotal, ((qs.total_worker_time/1000)/qs.execution_count) as CPUTimeAvg, (qs.total_elapsed_time/1000) as DurationTimeTotal, ((qs.total_elapsed_time/1000)/qs.execution_count) as DurationTimeAvg, qs.total_physical_reads as PhysicalReadsTotal, (qs.total_physical_reads/qs.execution_count) as PhysicalReadsAvg, […]
Bu yazımızda DMV ve DMF serimizin 2.sine devam edeceğiz. Yazımızda sql server query execution sonuçlarını montior etme ve bunları nasıl anlamlandırabileceğimize bakacağız. Yazı sonunda hazır olarak çoğumuzun kullandığı bu DMV ve DMF’lerin nerede ve ne için kullanıldığını öğrenmiş olacağız. Bu seride Connection, Session ve Request bölümlerini inceleyeceğiz. Task ve Worker bölümleri operating system ile alakalı olduğundan dolayı bir sonraki bölümde onları ele alacağız. SQL Server bir session’ın process’i aşağıdaki gibi gerçekleşmektedir. Görsel – 1 Bu süreci detaylandırmak istersek adım adım aşağıda bunları ele alabiliriz. Sql Server’da connection yapıldıktan sonra unique olarak kendine özel bir session alır. Görsel – 2 session_id: Session’ın Id’si connect_time: Connection’ın gerçekleştirildiği tarih net_transport: SQL Server’a gerçekleştirilen bağlantı türü auth_scheme: Gerçekleştirilen bağlantının tipi client_net_address: Bağlantı gerçekleştiren Session’ın IP bilgisi num_reads: Session’ın yapmış olduğu okuma sayısı num_writes: Yapmış olduğu yazma sayısı last_read: Yapılan son okumanın tarihi last_write: Yapılan son yazmanın tarihi Görsel – 3 ve Sql Server […]