Serdar BAYRAK

Yönetici

SQL Server Database Administrator

  • Toplam 52 Yazı
  • Toplam 4 Yorum

SQL Server DMV ve DMF – 4

SQL Server 4 hafta önce

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 […]

SQL Server DMV ve DMF – 3

SQL Server 4 hafta önce

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, […]

SQL Server DMV ve DMF – 2

SQL Server 2 ay önce

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 […]

SQL Server DMV ve DMF – 1

SQL Server 2 ay önce

Bu başlık altında SQL Server Performans tuning, monitoring, optimizasyon ve teşhis için kullanılan DMO (Dynamic Management Objects) olarak adlandırılan DMV (Dynamic Management Views) ve DMF’ler (Dynamic Management Functions) için serinin ilkine bakacağız. SQL Server 2005 öncesinde bunları kendi içinde tablolar ile yapmaktaydı 2005 ve sonrasında bunları DMV ve DMF ile sunmaya başladı. Özellikle sistemde bir sorunla karşılaştığımızda bunu adreslemek istediğimizde ve çözüm için bize hint verebilecek en önemli yapı taşları DMV ve DMF’lerdir. Bu iki yapı doğru okunabilirse ve sorunu adreslemek ve çözmek için bizi iyi bir rehber olacaktır. Dynamic Management View (DMV): Table gibi objectlerdir ve view olarak adlandırılırlar. Select komutu ile bu viewları okuyabiliriz. Dynamic Management Function (DMF): Input parametresi alarak verilen bu parametreye göre sonucu bize döndürecektir. Kullanımı esnasında CROSS APPLY ile function kullanımı sağlanmaktadır. SQL Server’da, Server ve Database kapsamında 2 tür DMV ve DMF vardır. Server kapsamında olanlar, server’a ilişkin bilgileri verir ve bu objelerin […]

Service Principal Name (SPN)

SQL Server 2 ay önce

Service Principal Name (SPN) nedir? Bu yazımızda Service Principal Name (SPN) hakkında konuşacağız. Active Directory ve SQL Server arasında Kerberos kimlik doğrulaması için kullanılan benzersiz bir tanımlayıcıdır. SQL Server instance’ının hangi Windows hesabı altında çalıştığını belirlemek için kullanılır. Kerberos kimlik doğrulaması, istemci ve sunucunun aynı Windows etki alanında veya güvenilen etki alanlarında olmasını ve SPN’nin Active Directory ile kaydedilmiş olmasını gerektirir. SPN kaydedilmediğinde veya kayıt başarısız olduğunda, Windows güvenlik katmanı hesabı SPN ile ilişkilendiremez ve Kerberos kimlik doğrulaması kullanılmaz. Kerberos nedir dediğimizde ise, Windows 2000’den itibaren Active directory etki alanları için varsayılan kimlik doğrulama protokolüdür. Simetrik şifreleme tekniği kullandığından dolayı NTLM’den daha güvenilir ve daha hızlıdır. Kerberos Authentiction’ın bize faydalarına bakarsak eğer, Client ve server arasında doğrulama yaparak güvenli bir şekilde doğrulama yapmaktadır. Biz buna Mutual Authentication diyoruz. Doğrulama yaparken server ve client arasında ticket alışverişi yapar ve bu alışveriş kriptoludur bu şekilde daha güvenli hale getirir. Bu durumu Secure […]

SQL Server Cache Plan

SQL Server 2 ay önce

Bu yazımızda sql server’da arka planda kullanılan, kaynak yönetimini ve sorgularımızı doğrudan ilgilendiren “Cache Plan” hakkında bilgileri ele alacağız. SQL Server’da bir sorgu ilk kez çalıştırıldığında derlenir (compile) ve query için bir plan oluşturulur. Bu plan sayesiyle sorgu hangi adımları izleyeceğini plana göre gerçekleştirir. Ve bu plan SQL Server’da Plan Cache içerisinde depolanır. Görsel -1 Plan cache içerisinde depolanan planlar sayesinde query tekrar geldiğinde yeni bir plan oluşturmasına gerek kalmaz ve aynı planı kullanarak sonucu geri döndürür. Bu sorgu planının ön bellekte kalma süresi sorgunun ne kadar kullanıldığı ile alakalıdır. Daha sık kullanılan sorgular plan cache’te daha fazla kalır. Plan Cache içerisinde tutabileceğim maximum plan sayısı 160.036. SQL Plans, Object Plans, Bound Trees, Extended SPs her biri için bu rakam 40.009’dur. Yoğun ad hoc sorguları SQL Plan bucket sayımızı arttırabilir ve bu durum SOS_CACHESTORE spinlock contention yaşamamıza neden olabilir. Bu durumun üstesinden -T174 Trace flag ekleyerek sayıyı 4 katına çıkarabiliriz. […]

Full-Text Search Part-II

SQL Server 9 ay önce

Full-Text Index Fragmentation and Crawl Full-Text Index kullanırken kontrol edilmesi gereken 2 bilgi vardır. Bunlardan biri fragmentation diğeri ise Crawl bilgisi. Fragmentation Bilgisine aşağıdaki scriptinden ulaşılabilir; WITH FragmentationDetails AS ( SELECT table_id, COUNT(*) AS FragmentsCount, CONVERT(DECIMAL(9,2), SUM(data_size/(1024.*1024.))) AS IndexSizeMb, CONVERT(DECIMAL(9,2), MAX(data_size/(1024.*1024.))) AS largest_fragment_mb FROM sys.fulltext_index_fragments GROUP BY table_id ) SELECT DB_NAME() AS DatabaseName, ftc.fulltext_catalog_id AS CatalogId, ftc.[name] AS CatalogName, fti.change_tracking_state AS ChangeTrackingState, fti.object_id AS BaseObjectId, QUOTENAME(OBJECT_SCHEMA_NAME(fti.object_id)) + '.' + QUOTENAME(OBJECT_NAME(fti.object_id)) AS BaseObjectName, f.IndexSizeMb AS IndexSizeMb, f.FragmentsCount AS FragmentsCount, f.largest_fragment_mb AS IndexLargestFragmentMb, f.IndexSizeMb – f.largest_fragment_mb AS IndexFragmentationSpaceMb, CASE WHEN f.IndexSizeMb = 0 THEN 0 ELSE 100.0 * (f.IndexSizeMb – f.largest_fragment_mb) / f.IndexSizeMb END AS IndexFragmentationPct FROM sys.fulltext_catalogs ftc JOIN sys.fulltext_indexes fti ON fti.fulltext_catalog_id = ftc.fulltext_catalog_id JOIN FragmentationDetails f ON f.table_id = fti.object_id ; Full-text crawl olduğunda veri akışı sağlanmaz ve aramalarda veriyi bulamayabilirsiniz. Aramanın devam etmesi için aşağıdaki script çalıştırılmalı. ALTER FULLTEXT INDEX ON CatalogName SET CHANGE_TRACKING MANUAL; ALTER FULLTEXT INDEX […]

Cannot Drop the Database ‘xxxDB’ Because It Is Being Used for Replication

SQL Server 9 ay önce

Bu Yazıda Transactional Replcation kullanılan database’in başka bir ortamda StandBy/Read-Only Mod’da Restore ettikten sonra drop edilmek istendiğinde Replikasyondan kaynaklı kaldırılamamasının çözümünü yapacağız. Bu işlemi yaparken profesyonel danışmandan hizmet alınarak kontrollü bir biçimde yapılması gerekmektedir. Aşağıdaki işlemler hata almadan önce sırasıyla yapılan adımları içermektedir. Görsel 1: Database’in drop edilmesi Görsel 2: Database’in script ile drop edilmesi sonrası karşılaşılan hata Database Drop etmek istediğimizde ‘Cannot Drop the Database ‘YourDBName’ Because It Is Being Used for Replication’ hatası ile karşılaşıyoruz.   Görsel 3: Drop edilmek istenen database’in sahip olduğu Publication’un silinmesi Görsel 4: Publication’ı kaldırma sonra alınan hata   Yukarıda alınan hata StandBy/Read-only mod da çalışan Database üzerinden herhangi bir write işlemi yapılamayacağından kaldırma işleminde yukarıdaki veya başka bir yazma operasyonunda benzer hatalar ile karşılaşılacaktır.   Çözüm: StandBy/Read-Only modda olan Database norecovery moda veya recovery moda alınarak açıldıktan sonra kaldırılabilir.

Transactional Replication’da Publication’dan Subscription kaldırma

SQL Server 9 ay önce

Bu başlık altında SQL Server Transaction Replication’da var olan Publication altından Subscription çıkarma adımlarını göreceğiz. Bu adımı yapılma sebepleri arasında subsription olarak kullanılan sunucunun artık hizmet vermemesinden kaynaklı olarak veyahut başka bir sebepten dolayı bu sunucunun Transaction Replication’dan çıkarma ihtiyacı sonucunda subscription’dan çıkarma adımlarına bakacağız. Bu işlemi yapmadan önce kesinlikle uzmanından profesyonel destek alınız. Sistemin yoğun olduğu saatlerde bu işlemlerşi yapmayınız. 1.Publication (Sistemde kullanılan Publication 3 adet Subscription’a sahip).Aşağıdaki bilgiye Publication olan Server üzerinden görebilirsiniz. kab veri tabanı bizim replication olmasını istediğimiz database. Görsel 1: Publication   2.Distribution (Buradaki joblar sayesinde dataların Snapshot’u alınarak Subscription’a aktarılır.) Görsel 2: Distribution Jobs     3.Subscription (Transactional Replication’da dataların aktarıldığı ortam.) Görsel 3: Replication Sunucusunda Database İşlem olarak kab publication içinde varolan 3 adet subscription’lardan 1 tanesini çıkaracağız. İlk adımımız olan ve kaldırmak istediğimiz subscription üzerine gelip sağ click ve delete diyoruz. Görsel 4: Subscription Delete   İkinci adımda önümüze açılan pop-up ekranından […]

Transactional Replication’da Publication’a Yeni Subscription Ekleme

SQL Server 9 ay önce

Bu yazımızda, SQL Server Transactional Replication ile beslenen databaselerin nasıl oluştuğunu, varolan publications’a, subscription eklemenin adım adım nasıl yapıldığını, karşımıza çıkan hataları ve monitoring etmeyi öğreneceğiz. SQL Server Transactional Replication, ldf içinden logları okuyarak çalıştığı için bu işlemleri yapmadan önce bu konuda çok dikatli olunmalı ve profesyonel destek alınmalıdır. Transactional Replication Kurulumu için önceden kaleme aldığımız Adım Adım Transactional Replication Kurulumu adlı makaleyi okuyabilirsiniz. Bizler bu işlemleri yaparken AlwaysOn mimarisine sahip 2 node’lu ortama, 3. Node eklediğimizde yapılması gereken replikasyon adımlarını inceleyeceğiz.   1.Adım: Publication oluşturma (Bu adım bizde daha önceden var olduğu için bu adımı geçiyoruz.) Görsel 1: SQL Server Transaction Publication bilgisi   2.Adım: Varolan Publication’a, yeni Subscription ekleme seçeneği seçilerek Next diyoruz. Görsel 2: Yeni Subscription Ekleme seçeneği seçilir. 3.Adım: Hangi Database ve hangi Publication’a Subscription eklenecek ise o Database altındaki publication seçilir. Publisher bilgisi AlwaysOn sistemlerinde primary’den yapılması gerekir. Bu yüzden Publisher bilgisini seçerken dikkat edilmelidir. […]