Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Korzystanie z DMV ( Dynamic Management View ) i DMF ( Dynamic Management Function ) | Rozwiązywanie problemów z wydajnością serwera SQL -4

Biodro>

W tej serii artykułów będę dalej wyjaśniać, jak rozwiązywać problemy z wydajnością SQL Server.

Rozwiązywanie problemów z wydajnością serwera SQL

Przeczytaj wcześniejszy artykuł.

Monitorowanie liczników wydajności za pomocą PERFMON | Rozwiązywanie problemów z wydajnością serwera SQL -3

DMV (widok zarządzania dynamicznego)

Dzięki DMV (widoki zarządzania dynamicznego) i DMF (funkcje zarządzania dynamicznego) wprowadzone w SQL Server 2005, możesz monitorować wszystkie działania wykonywane w bazie danych, stan wydajności i wyświetlać informacje o systemie w celu zarządzania i monitorowania baz danych.

Wszystkie bazy danych (Oracle, SQL Server, MySQL, Sybase, PostreSQL, DB2 itp.) gromadzą niektóre wewnętrzne informacje (sesje, procesy itp. i ich statystyki) o systemie i dostarczają te dane jako tabele systemowe i widoki.

Aby uzyskać informacje o systemie operacyjnym i bazie danych, następujące informacje są ogólnie dostępne w tabelach systemowych, które są okresowo aktualizowane przez SQL Server.

  • Ogólne informacje o bazie danych i serwerze bazy danych (nazwa, wydanie, wersja, zestaw znaków itp.)
  • Aktywne zapytania
  • Wykorzystanie procesora, we/wy i pamięci przez aktywne zapytania
  • Plan wykonania
  • Indeks używany przez uruchomione zapytanie
  • Oczekiwanie we/wy w pamięci, dysku i sieci
  • Brakujące indeksy, które niekorzystnie wpływają na wydajność bazy danych
  • Współczynniki wykorzystania indeksów (Skanuj, Szukaj wartości)
  • Czas odpowiedzi dysków

DMF (funkcja zarządzania dynamicznego)

Chociaż DMV i DMF wydają się takie same w SQL Server, różnicę między nimi można bezpośrednio sprawdzić jako nazwę DMV, podczas gdy DMF to funkcje, które pobierają parametr i odpowiednio zwracają tabelę.

Dzięki DMV i DMF możesz monitorować krytyczne bazy danych działające jako produkcja, natychmiast identyfikować problemy i podejmować odpowiednie działania. Za pomocą tych zapytań możesz odpytywać większość instrukcji dotyczących procesora, we/wy i pamięci z aktywnych zapytań w bazie danych, znaleźć brakujące tabele indeksów i znaleźć wolno działające zapytania.

Wszystkie DMV i DMF dostępne w SQL Server można zapytać za pomocą następującego zapytania.

wybierz nazwę,type_desc z sys.system_objects, gdzie nazwa taka jak „dm%” uporządkowana według nazwy;

Te DMV i DMF używane w programie SQL Server dostarczają użytkownikom informacje według kategorii, takich jak sesja, baza danych, system operacyjny (system operacyjny), transakcja itp. Na przykład; DMV i DMF w kategorii bazy danych zaczynają się od sys.dm_db lub DMV i DMF związane z transakcjami zaczynają się od sys.dm_tran .

Lista DMV i DMF według kategorii jest następująca.

Najczęściej używane DMV i DMF są jak poniżej.

Wykonywanie (SQL, zapytanie, proces itp.):  DMV i DMF aktywnych zapytań, które dostarczają informacji, takich jak użytkownik wywoływany z jakiej maszyny, procesy, szacowany czas zakończenia i statystyki zapytań.

Najważniejsze z nich są następujące.

  • 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)

Baza danych: To właśnie DMV i DMF dostarczają niezbędnych informacji o indeksowaniu, dublowaniu i partycjonowaniu na poziomie bazy danych. Najważniejsze z nich są następujące.

  • 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)

System operacyjny: To DMV i DMF dostarcza niezbędnych informacji o systemie operacyjnym. Najważniejsze z nich są następujące.
  • 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)
Transakcja: To DMV i DMF dostarcza niezbędnych informacji o Transakcji. Najważniejsze z nich są następujące.
  • sys.dm_tran_active_transactions (DMV)
  • sys.dm_tran_session_transactions (DMV)
  • sys.dm_tran_database_transactions (DMV)
  • sys.dm_tran_current_transaction (DMV)
Przejdźmy do użycia DMV i DMF do odpytywania instrukcji TOP 10 CPU. Możesz wyszukiwać TOP 10 CPU Statements w bazie danych za pomocą DMV i DMF, jak poniżej.

wybierz 10 pierwszych przypadków, gdy sql_handle JEST NULL, a następnie '' else ( substring(st.text,(qs.statement_start_offset+2)/2, ( przypadek, gdy qs.statement_end_offset =-1 then len(convert(nvarchar(MAX)) ,st.text))*2 else qs.statement_end_offset end - qs.statement_start_offset) /2 ) ) end as query_text, qp.query_plan, (total_worker_time+0.0)/1000 as total_worker_time, (total_worker_time+0.0)/(execution_count*1000 ) jako [Śr.CzasCPU], całkowita_odczyty_logiczne jako [Odczyty_logiczne], całkowita_liczba_zapisów_logicznych jako [logiczneWrites], liczba_wykonań, czas_utworzenia, czas_ostatniego_wykonania, całkowita_odczyty_logiczne+całkowita_zapisy_logiczne jako [AggIO], (całkowita_liczba_odczytów_logicznych+całkowita_db+(nazwa_logicznej]liczba_zapisów) st.dbid) jako database_name, st.objectid jako object_idfrom sys.dm_exec_query_stats qs zastosowanie krzyżowe sys.dm_exec_sql_text(sql_handle) st KRZYŻ ZASTOSUJ sys.dm_exec_query_plan(qs.plan_handle) JAKO qp gdzie total_worker_time> 0 order by total_worker_time desc;

Kiedy uruchomię powyższe zapytanie w testowej bazie danych AdventureWorks, której użyłem do moich testów, dane wyjściowe będą następujące.

Udostępnię skrypt ( Uwzględnij system operacyjny i bazę danych DMV i DMF ), który zawiera ogólne informacje o systemie operacyjnym, w którym działa instancja bazy danych SQL Server, takie jak całkowity procesor, pamięć, całkowity rozmiar dysku, rozmiar bazy danych i rozmiar dziennika transakcji.

Ten skrypt jest szczególnie potrzebny podczas przygotowywania inwentaryzacji bazy danych.

sp_configure 'pokaż opcje zaawansowane', 1;GORECONFIGURE;GOsp_configure 'Ole Procedury automatyzacji', 1;GORECONFIGURE;GO/************************* ********************************/SET NOCOUNT ONDECLARE @hr intDECLARE @fso intDECLARE @drive char(1)DECLARE @ odrive intDECLARE @TotalSize varchar(20) DECLARE @MB Numeryczne; 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 IF @hr <> 0 EXEC sp_OAGetErrorInfo@fsoDECLARE dcur CURSOR LOCAL FAST_FORWARDFOR SELECT dysk z #drives ORDER by driveOPEN dcur FETCH NEXT FROM dcur INTO @driveWHILE @@FETCH_STATUS=0BEGINEXEC'GetDrive @spf_O OUT, @driveIF @hr <> 0 EXEC sp_OAGetErrorInfo @fso EXEC @hr =sp_OAGetProperty@odrive,'TotalSize', @TotalSize OUT IF @hr <> 0 EXEC sp_OAGetErrorInfo@odrive UPDATE #drives SET przykł[email protected]/@MB [email protected] FETCH NEXT FROM dcur INTO @driveEndClose dcurDEALLOCATE dcurEXEC @hr=sp_OADestroy @fso IF @hr <> 0 EXEC sp_OAGetErrorInfo @fso--SELECT @@Servername--SELECT--drive, TotalSize jako ' ', FreeSpace jako 'Free(MB)' FROM #drives--ORDER BY drive
CREATE TABLE #CPUInfo(Logical_CPU_Count bigint, Hyperthread_Ratio bigint, Physical_CPU_Count bigint, Physical_Memory_MB bigint)
WSTAW DO #CPUInfo(Liczba_logicznych_CPU,Współczynnik_hiperwątku,Współczynnik_fizycznych_CPU,Liczba_pamięci_fizycznych_MB)SELECT liczba_cpu_liczba AS [liczba_logicznych_procesorów] ,współczynnik_hiperwątku AS [współczynnik_hiperwątkowości] ,liczba_cpu/współczynnik_hiperwątku_sysm_ROM. pre> 
CREATE TABLE #DatabaseInfo(Nazwa_maszyny varchar(50), Nazwa_instancji varchar(50), Nazwa_serwera_Sql varchar(50), Total_Database_log_size_MB bigint, Total_Database_log_used_MBbase, Total_Database_Data_File_Size_MB_Server_Name Bigint, SERTce_ERTstan_Database_MB bigint, Total_Database_log_used_MB_base, Total_Database_Data_File_Size_MB_Server_Name Bigint, SERTce_ERTstan_Inteligt_Bazy danych Total_Database_Data_File_Size_MB)select convert(varchar(50),serverproperty('MachineName')) 'Machine_Name' ,convert(varchar(50),isnull(serverproperty('InstanceName'),'mssqlserver')) 'Instance_varchar(convert() 50),@@NAZWA_SERWERA) 'Nazwa_Sql_Server' ,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) as [Total_Database_Total] sys.databases d lewe sprzężenie zewnętrzne sys.dm_os_performance_counters jako lu na lu.instance_name=d.name i lu.counter_name jak N'Log File(s) Używany rozmiar (KB)%' lewe sprzężenie zewnętrzne sys.dm_os_performance_counters jako ls na ls. insta nce_name=d.name i ls.counter_name jak N'Log File(s) Size (KB)%' i ls.cntr_value> 0 lewe złącze zewnętrzne sys.dm_os_performance_counters jako lp na lp.instance_name=d.name i lp.counter_name jak N'Percent Log Used%' lewe złącze zewnętrzne sys.dm_os_performance_counters jako ds na ds.instance_name=d.name i ds.counter_name jak N'Rozmiar pliku(ów) danych (KB)%'gdzie d.database_id>4; -- systemowa baza danych lub haricWITH SizeDisc AS( -- sunucu üzerindeki tüm drive size ve free size bilgisiSELECT SUM(TotalSize) jako 'Total_Disc_Sizeon_Server_MB', SUM(FreeSpace) jako 'Total_Free_Disc_Size)',#ROMdrive_InfosInfos,#ROMdrive_Disc_SizeOn_#ROM SizeDiscDROP TABLE #Dyski DROP TABLE #DatabaseInfoDROP TABLE #CPUInfo GO/**************************************** ******************//* Wyłączanie procedur automatyzacji Ole */sp_configure 'pokaż opcje zaawansowane', 1;GORECONFIGURE;GOsp_configure 'Procedury automatyzacji ole', 0;GORECONFIGURE;/ ************************************************** *****/GO

Wynik skryptu jest następujący.

W następnym artykule wyjaśnię rozwiązywanie problemów z wydajnością serwera SQL.

Rozwiązywanie problemów z wydajnością programu SQL Server -5 Korzystanie z programu 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. Wywołanie procedury składowanej za pomocą VBA

  2. SQL Server — zwracana wartość po INSERT

  3. ISJSON() Przykłady w SQL Server (T-SQL)

  4. Zapisz byte[] w bazie danych SQL Server z C#

  5. Dowiedz się, na jakim systemie operacyjnym działa program SQL Server (przykład T-SQL)