Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Menggunakan DMV ( Tampilan Manajemen Dinamis ) dan DMF ( Fungsi Manajemen Dinamis ) | Pemecahan Masalah Kinerja SQL Server -4

Hai,

Saya akan terus menjelaskan cara Mengatasi Masalah Performa SQL Server di Seri Artikel ini.

Pemecahan Masalah Kinerja SQL Server

Baca artikel sebelumnya sebelum ini.

Memantau Penghitung Kinerja melalui PERFMON | Pemecahan Masalah Kinerja SQL Server -3

DMV ( Tampilan Manajemen Dinamis )

Dengan DMV ( Dynamic Management Views ) dan DMF ( Dynamic Management Functions) yang diperkenalkan di SQL Server 2005, Anda dapat memantau semua aktivitas yang terjadi di database, status kinerja, dan menampilkan informasi Sistem untuk mengelola dan memantau database.

Semua database (Oracle, SQL Server, MySQL, Sybase, PostreSQL, DB2, dll.) mengumpulkan Beberapa informasi internal (Sesi, Proses, dll. aktivitas dan statistiknya)  tentang sistem dan menyediakan data ini sebagai tabel dan Tampilan Sistem.

Untuk memperoleh informasi tentang OS dan Basis Data, informasi berikut umumnya tersedia di tabel Sistem yang diperbarui secara berkala oleh SQL Server.

  • Informasi Umum tentang Database dan Server Database (Nama, Edisi, Versi, Kumpulan Karakter, dll.)
  • Kueri Aktif
  • Penggunaan CPU, I/O, dan Memori dari Kueri Aktif
  • Rencana Eksekusi
  • Indeks yang digunakan oleh Kueri yang Berjalan
  • I/O menunggu di Memori, Disk, dan Jaringan
  • Indeks Tidak Ada yang berdampak buruk pada kinerja Basis Data
  • Tingkat penggunaan indeks (Pindai, Cari nilai)
  • Waktu respons disk

DMF ( Fungsi Manajemen Dinamis )

Meskipun DMV dan DMF tampak sama di SQL Server, perbedaan di antara keduanya dapat langsung ditanyakan sebagai nama DMV, sedangkan DMF adalah fungsi yang mengambil parameter dan mengembalikan tabel yang sesuai.

Berkat DMV dan DMF, Anda dapat memantau basis data penting yang berjalan sebagai Produksi, mengidentifikasi masalah dengan segera, dan mengambil tindakan yang sesuai. Dengan kueri ini, Anda dapat meminta sebagian besar pernyataan CPU, I / O, dan Konsumsi Memori dari kueri yang berjalan aktif di Database, menemukan tabel indeks yang hilang, dan menemukan kueri yang berjalan lambat.

Semua DMV dan DMF yang tersedia di SQL Server dapat ditanyakan dengan kueri berikut.

pilih nama,type_desc dari sys.system_objects di mana nama seperti 'dm%' diurutkan berdasarkan nama;

DMV dan DMF yang digunakan di SQL Server ini memberikan informasi kepada pengguna menurut Kategori seperti Sesi, Basis Data, OS (Sistem Operasi), Transaksi, dll. Misalnya; DMV dan DMF pada kategori Database dimulai dengan sys.dm_db atau DMV dan DMF terkait dengan Transaksi dimulai dengan sys.dm_tran .

Daftar DMV dan DMF berdasarkan kategori adalah sebagai berikut.

DMV dan DMF yang paling umum digunakan adalah seperti berikut.

Eksekusi( SQL, Query,Proses dll ):  DMV dan DMF kueri yang berjalan aktif yang memberikan informasi seperti pengguna mana yang dipanggil dari mesin mana, proses, perkiraan waktu akhir, dan statistik Kueri.

Yang paling penting adalah sebagai berikut.

  • sys.dm_exec_query_stats (DMV)
  • sys.dm_exec_requests (DMV)
  • sys.dm_exec_sessions (DMV)
  • sys.dm_exec_connections (DMV)
  • sys.dm_exec_query_plan (DMF)
  • sys.dm_exec_sql_text (DMF)
  • sys.dm_exec_cached_plans (DMV)
  • sys.dm_exec_cursors (DMF)

Basis Data : Ini adalah DMV dan DMF yang memberikan informasi yang diperlukan tentang Index, Mirroring dan partisi pada tingkat database. Yang paling penting adalah sebagai berikut.

  • sys.dm_db_missing_index_details ( DMV)
  • sys.dm_db_missing_index_columns ( DMF )
  • sys.dm_db_missing_index_groups (DMV)
  • sys.dm_db_missing_index_group_stats (DMV)
  • sys.dm_db_index_usage_stats (DMV)
  • sys.dm_db_index_physical_stats (DMF)
  • sys.dm_db_index_operational_stats (DMF)
  • dm_db_partition_stats (DMV)
  • sys.dm_db_mirroring_connections (DMV)

Sistem Operasi: Ini adalah DMV dan DMF yang memberikan informasi yang diperlukan tentang sistem Operasi. Yang paling penting adalah sebagai berikut.
  • sys.dm_os_sys_info (DMV)
  • sys.dm_os_sys_memory(DMV)
  • sys.dm_os_waiting_tasks(DMV)
  • sys.dm_os_wait_stats(DMV)
  • sys.dm_os_waiting_tasks (DMV)
  • sys.dm_os_performance_counters(DMV)
  • sys.dm_os_cluster_nodes (DMF)
Transaksi: Ini adalah DMV dan DMF yang memberikan informasi yang diperlukan tentang Transaksi. Yang paling penting adalah sebagai berikut.
  • sys.dm_tran_active_transactions (DMV)
  • sys.dm_tran_session_transactions (DMV)
  • sys.dm_tran_database_transactions (DMV)
  • sys.dm_tran_current_transaction (DMV)
Mari kita gunakan DMV dan DMF untuk menanyakan pernyataan TOP 10 CPU. Anda dapat menanyakan TOP 10 CPU Statements dalam database menggunakan DMV dan DMF seperti berikut.

pilih top 10 case ketika sql_handle IS NULL lalu ''else ( substring(st.text,(qs.statement_start_offset+2)/2, ( case ketika qs.statement_end_offset =-1 lalu len(convert(nvarchar(MAX)) ,st.text))*2 else qs.statement_end_offset end - qs.statement_start_offset) /2 ) ) diakhiri sebagai query_text, qp.query_plan, (total_worker_time+0.0)/1000 sebagai total_worker_time, (total_worker_time+0.0)/(execution_count*1000 ) sebagai [AvgCPUTime], total_logical_reads sebagai [LogicalReads], total_logical_writes sebagai [logicalWrites], execution_count, waktu_kreasi, last_execution_time, total_logical_reads+total_logical_writes sebagai [AggIO], (total_logical_reads+total_logical_count) sebagai [(AvIO_logical_writes) st.dbid) sebagai database_name, st.objectid sebagai object_iddari sys.dm_exec_query_stats qs lintas menerapkan sys.dm_exec_sql_text(sql_handle) st LINTAS BERLAKU sys.dm_exec_query_plan(qs.plan_handle) SEBAGAI qp di mana total_worker_time> 0 diurutkan berdasarkan total_worker_time desc;

Ketika saya menjalankan kueri di atas dalam database pengujian AdventureWorks yang saya gunakan untuk pengujian saya, hasilnya adalah sebagai berikut.

Saya akan membagikan skrip  ( Include OS and Database DMV and DMF ) yang memberikan informasi umum tentang OS yang dijalankan oleh instance database SQL Server, seperti Total CPU, Memory, Total Disk Size, Database Size, dan Transaction Log Size.

Skrip ini sangat diperlukan saat menyiapkan inventaris basis data Anda.

sp_configure 'tampilkan opsi lanjutan', 1;GORECONFIGURE;GOsp_configure 'Prosedur Otomasi Ole', 1;GORECONFIGURE;GO/********************* ********************************/SET NOCOUNT ONDECLARE @hr intDECLARE @fso intDECLARE @drive char(1)DECLARE @ odrive intDECLARE @TotalSize varchar(20) DECLARE @MB Numeric; SET @MB =1048576CREATE TABLE #drives (drive char(1) PRIMARY KEY, FreeSpace int NULL,TotalSize int NULL) INSERT #drives(drive,FreeSpace) EXECmaster.dbo.xp_fixeddrives EXEC @hr=sp_OACreate'Scripting.FileSystemObject',@ fso OUT JIKA @hr <> 0 EXEC sp_OAGetErrorInfo@fsoDECLARE dcur KURSOR LOKAL FAST_FORWARDFOR PILIH drive dari #drives ORDER by driveOPEN dcur FETCH NEXT FROM dcur INTO @driveWHILE @@FETCH_STATUS ='f_OAEC KELUAR, @driveIF @hr <> 0 EXEC sp_OAGetErrorInfo @fso EXEC @hr =sp_OAGetProperty@odrive,'TotalSize', @TotalSize OUT JIKA @hr <> 0 EXEC sp_OAGetErrorInfo@odrive UPDATE #drive SET [email protected]/@MB [email protected] FETCH NEXT DARI dcur KE @driveEndClose dcurDEALLOCATE dcurEXEC @hr=sp_OADestroy @fso JIKA @hr <> 0 EXEC sp_OAGetErrorInfo @fso--SELECT @@Servername--SELECT--drive, TotalSize as 'Total(MB) ', FreeSpace sebagai 'Gratis(MB)' FROM #drives--ORDER BY drive
BUAT TABEL #CPUInfo( Logical_CPU_Count bigint, Hyperthread_Ratio bigint, Physical_CPU_Count bigint, Physical_Memory_MB bigint)
INSERT INTO #CPUInfo( Logical_CPU_Count, Hyperthread_Ratio, Physical_CPU_Count, Physical_Memory_MB)PILIH cpu_count AS [Logical_CPU_Count] ,hyperthread_ratio AS [Hyperthread_Ratio] ,cpu_count/hyperthread_ratio AS. pra>
BUAT TABEL #DatabaseInfo( Machine_Name varchar(50), Instance_Name varchar(50), Sql_Server_Name varchar(50), Total_Database_log_size_MB bigint, Total_Database_log_used_MB bigint, Total_Database_Data_File_Size_MB bigint)INSERT_Into_Name_Database INTO(TO_Name_Database_Database yang digunakan, INTO_Name_Database INTO Total_Database_Data_File_Size_MB)pilih convert(varchar(50),serverproperty('MachineName')) 'Machine_Name' ,convert(varchar(50),isnull(serverproperty('InstanceName'),'mssqlserver')) 'Instance_Name' ,convert(varchar( 50),@@SERVERNAME) 'Sql_Server_Name' ,sum(ls.cntr_value/1024) as [Total_Database_log_size_MB] ,sum(lu.cntr_value/1024)as [Total_Database_log_used_MB] ,sum(ds.cntr_value/1024) sebagai [Total_File_Database_MB] sys.databases d luar kiri gabung sys.dm_os_performance_counters sebagai lu di lu.instance_name=d.name dan lu.counter_name seperti N'Log File Ukuran yang Digunakan (KB)%' luar kiri gabung sys.dm_os_performance_counters sebagai ls di ls. langsung nce_name=d.name dan ls.counter_name seperti N'Log File(s) Size (KB)%' dan ls.cntr_value> 0 kiri luar gabungkan sys.dm_os_performance_counters sebagai lp di lp.instance_name=d.name dan lp.counter_name like N'Percent Log Digunakan%' kiri luar gabungkan sys.dm_os_performance_counters sebagai ds pada ds.instance_name=d.name dan ds.counter_name seperti N'Data File(s) Size (KB)%'di mana d.database_id>4; -- sistem database ler haricWITH SizeDisc AS( -- sunucu üzerindeki tüm drive size ve free size bilgisiSELECT SUM(TotalSize) as 'Total_Disc_Sizeon_Server_MB', SUM(FreeSpace) as 'Total_Free_Disc_SizeOn_Server_MB' FROM #drives SizeDiscDROP TABLE #Drives DROP TABLE #DatabaseInfoDROP TABLE #CPUInfo GO/********************************** ******************//* Menonaktifkan Ole Automation Procedures */sp_configure 'show advanced options', 1;GORECONFIGURE;GOsp_configure 'Ole Automation Procedures', 0;GORECONFIGURE;/ ************************************************** *****/PERGI

Output dari skrip adalah sebagai berikut.

Saya akan terus menjelaskan Pemecahan Masalah Performa SQL Server di artikel berikutnya.

Pemecahan Masalah Kinerja SQL Server -5 Menggunakan SQL Server Profiler


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pernyataan KASUS SQL

  2. Gunakan IDENT_CURRENT() untuk Mengembalikan Nilai Identitas Saat Ini pada Kolom Identitas di SQL Server

  3. 4 Cara Mendaftar Semua Tampilan di Database SQL Server

  4. EXEC sp_executesql dengan beberapa parameter

  5. Apa tipe data yang paling tepat untuk menyimpan alamat IP di SQL server?