EurobankTekfen SQL Server DBA Turgay Sahtiyan
Ajanda DMV-DMF Nedir? Ne Amaçla Kullanılır? DMV-DMF Farkı Nedir? Nasıl Bir Yetki Gereklidir? Tüm DMV – DMF Listesi Örnekler DMV’ler ile Başka Neler Yapılabilir? Soru - Cevap
DMV – DMF Nedir? SQL Server da Dynamic Management View(DMV) ve Dynamic Management Function’lar (DMF), sistemi monitor etmek, herhangi bir problemi teşhis etmek veya sistemi daha performanslı çalışması için tune etmek için kullanılan, sistem durumu hakkında bilgi dönen view ve function’lardır. İlk kez SQL Server 2005 ile gelmiştir.
Ne Amaçla Kullanılır? Şu an devam eden işler ve çalışan query’ler nedir? Genel olarak SQL Server’ın işi yapmak için beklediği noktalar nereler? Network IO’larında bekleme var mı? Disklerin response time’ları nasıl? Şu an diskte bekleyen herhangi bir IO işlemi var mı? Eksik index’lerimden dolayı mı performans sıkıntım var? Bu eksik index’ler nelerdir? Index’lerimin scan,seek yani kısaca kullanım oranları nelerdir? En çok CPU ya da IO tüketen sorgularım hangileri?
DMV – DMF Farkı Nedir? Dynamic Management View (DMV) View’ler gibi select çekilerek sorgulanabilirler. Örnek kullanımı; Select * from sys.dm_os_wait_stats Dynamic Management Function (DMF) Input parametresi alarak bu parametreye göre sonuç döndüren fonksiyonlardır. Örnek kullanımı; SELECT * FROM sys.dm_exec_requests CROSS APPLY sys.dm_exec_sql_text(sql_handle)
Nasıl Bir Yetki Gereklidir? Permission (yetkilendirme) açısından 2 tipe ayrılırlar Database seviyesindeki DMV-DMF’ler Örn. sys.dm_db_partition_stats Yetkilendirme şu şekilde yapılır. GRANT VIEW DATABASE STATE TO userName Server seviyesindeki DMV-DMF’ler Örn. sys.dm_os_sys_info Yetkilendirme şu şekilde yapılır. GRANT VIEW SERVER STATE TO userName
Tüm DMV – DMF Listesi
Örnekler DMW’ler ile Session(Process) Kontrolleri (sys.em_exec_requests) En Çok CPU ya da IO Tüketen Sorgular (sys.dm_exec_query_stats) Prosess Beklemelerinin Analizi (sys.dm_os_wait_stats) Disklerin IO Response Time’ları (sys.dm_io_virtual_file_stats) Şu an Diskte Bekleyen IO Var mı? (sys.dm_io_pending_io_requests) Index’lerin Fragmante Oranları (sys.dm_db_index_physical_stats) Index’lerin Kullanım İstatistikleri (sys.dm_db_index_usage_stats) Eksik Index’lerin Sorgulanması Sys.dm_db_partition_stats ile Tablo Bilgileri Sys.dm_os_sys_info ile Server Bilgileri Cache’lenen Sorgular (sys.dm_exec_cached_plans)
DMW’ler ile Session(Process) Kontrolleri Aktif Prosess’ler Neler? Şu an Hangi Query’ler Çalışmakta? Bu Prossess’ler Hangi Login ile Hangi Makinadan Çalıştırılmış? Bu Prosess’lerin Tahmini Bitiş Süreleri Kullanılacak DMV ve DMF’ler sys.dm_exec_requests sys.dm_exec_connections sys.dm_exec_sessions sys.dm_exec_sql_text sys.dm_exec_query_plan
DMW’ler ile Session(Process) Kontrolleri
DBName : Session’ın çalıştığı DB’yi gösterir. login_name : Session’ın hangi user name ile açıldığını gösterir. host_name : Session’ın hangi makinadan yapıldığını gösterir. text : Çalışmakta olan query’nin tamamını gösterir. statement_text : Çalışmakta olan query’nin şu anda çalışmakta olan kısmını gösterir. Örneğin binlerce satırlık bir query’iniz olduğunu düşünün. Ve şu anda bu query’nin 400.satırındaki update işlemi yapılmakta. Text kolonu bu query’nin tamamını, statement_text kolonu ise gerçekten şu anda işletilmekte olan update işlemini gösteriyor olacaktır. blocking_session_id : Eğer bu session bir başka session tarafından bloklandıysa buraya bloğu koyan session’ın ID’si gelir. status : Query’nin şu andaki durumunu gösterir. wait_type : Eğer query şu anda blok’lu durumdaysa bu blok’un tipini verir. wait_time : Eğer query şu anda blok’lu durumdaysa milisaniye cinsinden ne kadar zamandır blok’lu olduğunu verir. percent_complete : Backup,Restore gibi bazı işlemleri yapan session’ın şu anda işinin yüzde kaçında olduğunu gösterir. estimated_completion_time : Gene Backup,Restore gibi bazı işlemlerin tahmini olarak ne kadarlık daha işi kaldığını milisaniye cinsinden verir.
En Çok CPU Tüketen İlk 50 Sorgu
En Çok IO Tüketen İlk 50 Sorgu
Prosess Beklemelerinin Analizi
Disklerin IO Response Time’ları
Şu an Diskte Bekleyen IO Var mı?
Index’lerin Kullanım İstatistikleri
Index’lerin Fragmante Oranları
Kullanılmayan Index Raporu
Eksik Index’lerin Sorgulanması sys.dm_db_missing_index_group_stats - DMV sys.dm_db_missing_index_groups - DMV sys.dm_db_missing_index_details - DMV sys.dm_db_missing_index_columns - DMF
Eksik Index’lerin Sorgulanması
sys.dm_db_partition_stats ile Tablo Bilgileri
object_id : Index’in bağlı bulunduğu table’ın ID’si. sys.objects’e join edeceğiz. index_id : Index’in ID si. sys.indexes’e join edeceğiz. partition_number : Partition number’ı. AdventureWorks’te hiç partitioning kullanılmadığı için bu değer bütün index’ler için 1’dir. in_row_data_page_count : Data’yı tutmak için kullanılan page sayısı. Index eğer Heap ise bu değer heap level’daki data page’lerin sayısını ifade eder. Eğer Clustered yada NonClustered Index ise bu değer leaf level’daki data page’leri ifade eder. NonLeaf’leri içermez. used_page_count : NonLeaf ve Leaf level’lardaki page’lerin toplamını ifade eder. reserved_page_count : Toplam rezerve edilen page sayısını ifade eder. Table’ın toplam kapladığı alan bu page sayısı üzerinden hareket edilerek bulunur. row_count : Bahsi geçen partition’daki satır sayısını ifade eder. AdventureWorks’te partitioning kullanılmadığı için her index için table’da bulunan satır sayısını ifade eder.
sys.dm_db_partition_stats ile Tablo Bilgileri Table’ların Kayıt Sayıları Table’ların Boyutları
sys.dm_os_sys_info ile Server Bilgileri
SQL Server UpTime
Cache’lenen Sorgular
DMV’ler ile Başka Neler Yapılabilir? SQL Server Buffer Pool Analizi Index’lerin Operasyonel İstatistikleri Stored Procedure İstatistikleri Trigger İstatistikleri CPU Üzerindeki Beklemelerin Kontrolü Dependent Objelerin Kontrolü Transaction Kontrolleri Performance Counter’ların Analizi Lock’lanan Kaynakların Kontrolü Cursor’ların Analizi SQL Server İlişkili Beklemelerin Analizi
Soru - Cevap Turgay Sahtiyan EurobankTekfen SQL Server DBA