Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Използване на DMV (изглед за динамично управление) и DMF (функция за динамично управление) | Отстраняване на проблеми с производителността на SQL Server -4

Здравей,

Ще продължа да обяснявам как да отстранявам проблеми с производителността на SQL Server в тази серия от статии.

Отстраняване на проблеми с производителността на SQL сървър

Прочетете предишната статия преди тази.

Наблюдение на броячите на производителността чрез PERFMON | Отстраняване на проблеми с производителността на SQL Server -3

DMV ( Динамичен изглед за управление)

С DMV (изгледи за динамично управление) и DMF (функции за динамично управление), въведени в SQL Server 2005, можете да наблюдавате всички извършени дейности в базата данни, състоянието на производителността и да показвате системна информация за управление и наблюдение на бази данни.

Всички бази данни (Oracle, SQL Server, MySQL, Sybase, PostreSQL, DB2 и др.) събират известна вътрешна информация (дейности за сесии, процеси и т.н. и тяхната статистика)  за системата и предоставят тези данни като системни таблици и изгледи.

За да получите информация за операционната система и базата данни, следната информация обикновено е достъпна в системните таблици, които се актуализират периодично от SQL Server.

  • Обща информация за базата данни и сървъра на базата данни (име, издание, версия, набор от знаци и др.)
  • Активни заявки
  • Използване на процесор, вход/изход и памет на активни заявки
  • План за изпълнение
  • Индекс, използван от изпълняваща се заявка
  • I/O чакат в паметта, диска и мрежата
  • Липсващи индекси, които влияят неблагоприятно върху производителността на базата данни
  • Проценти на използване на индекси (Сканиране, Търсене на стойности)
  • Време за реакция на дисковете

DMF ( Функция за динамично управление)

Въпреки че DMV и DMF изглеждат еднакви в SQL Server, разликата между тях може да бъде директно запитана като име на DMV, докато DMF са функции, които приемат параметър и съответно връщат таблица.

Благодарение на DMV и DMF, можете да наблюдавате критични бази данни, работещи като Производство, да идентифицирате проблемите незабавно и да предприемете съответните действия. С тези заявки можете да правите заявки към повечето CPU, I/O и Консумиращите памет оператори от активни изпълнявани заявки в базата данни, да намерите липсващите индексни таблици и да намерите бавно изпълнявани заявки.

Всички DMV и DMF, налични в SQL Server, могат да бъдат запитани със следната заявка.

изберете name,type_desc от sys.system_objects, където име като 'dm%' подредете по име;

Тези DMV и DMF, използвани в SQL Server, предоставят информация на потребителите според категории като  сесия, база данни, ОС (операционна система), транзакция и др. Например; DMV и DMF в категория База данни започват с sys.dm_db или DMV и DMF, свързани с транзакции, започват с sys.dm_tran .

Списъкът на DMV и DMF по категории е както следва.

Най-често използваните DMV и DMF са както следва.

Изпълнение (SQL, Заявка, Процес и т.н.):  DMV и DMF на активни изпълнявани заявки, които предоставят информация, като например кой потребител е извикан от коя машина, процеси, прогнозни крайни времена и статистика на заявките.

Най-важните са следните.

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

База данни: Това са DMV и DMF, които предоставят необходимата информация за индекс, огледално копиране и разделяне на ниво база данни. Най-важните са следните.

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

Операционна система: Именно DMV и DMF дава необходимата информация за операционната система. Най-важните са следните.
  • 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)
Транзакция: Именно DMV и DMF предоставят необходимата информация за транзакцията. Най-важните са следните.
  • sys.dm_tran_active_transactions (DMV)
  • sys.dm_tran_session_transactions (DMV)
  • sys.dm_tran_database_transactions (DMV)
  • sys.dm_tran_current_transaction (DMV)
Нека да използваме DMV и DMF за запитване на ТОП 10 CPU изявления. Можете да заявите ТОП 10 CPU изявления в базата данни, като използвате DMV и DMF, както следва.

изберете първите 10 случая, когато sql_handle Е NULL, след това '' else ( подниз(st.text,(qs.statement_start_offset+2)/2, ( случай, когато qs.statement_end_offset =-1 след това len(convert(nvarchar(MAX)) ,st.text))*2 else qs.statement_end_offset end - qs.statement_start_offset) /2 ) ) край като query_text, qp.query_plan, (total_worker_time+0.0)/1000 като total_worker_time, (total_worker_time, (total_worker_time), (total_worker_time), (total_worker_time)/+0 execu ) като [AvgCPUTime], total_logical_reads като [LogicalReads], total_logical_writes като [logicalWrites], execution_count, created_time, last_execution_time, total_logical_reads+total_logical_writes като [AggIO], (total_tological_writes като [AggIO], (total_tological_reads) [total_tological_read_name, executetal_read_0, execution_read. st.dbid) като име на база данни, st.objectid като object_id от sys.dm_exec_query_stats qs кръстосано прилагане sys.dm_exec_sql_text(sql_handle) st КРЪСТНО ПРИЛАГАНЕ sys.dm_exec_query_plan(qs.plan_handle) КАТО qp където total_worker_time> 0 подреждане по общо_worker_time desc;

Когато стартирам горната заявка в тестовата база данни на AdventureWorks, която използвах за моите тестове, изходът ще бъде както следва.

Ще споделя скрипта  ( Включва OS и база данни DMV и DMF ), който дава обща информация за операционната система, която се изпълнява от екземпляра на база данни на SQL Server, като общ процесор, памет, общ размер на диска, размер на базата данни и размер на регистрационния файл на транзакциите.

Този скрипт е особено необходим, когато подготвяте инвентаризациите на вашата база данни.

sp_configure 'показване на разширени опции', 1;GORECONFIGURE;GOsp_configure 'Ole Automation Procedures', 1;GORECONFIGURE;GO/************************* ********************************/ЗАДАВАНЕ НА NOCOUNT ONDECLARE @hr intDECLARE @fso intDECLARE @drive char(1)DECLARE @ odrive intDECLARE @TotalSize varchar(20) DECLARE @MB Числов; SET @MB =1048576CREATE TABLE #drives (drive char(1) PRIMARY KEY, FreeSpace int NULL,TotalSize int NULL) INSERT #drives(drive,FreeSpace) EXECmaster.dbo.xp_fixeddrives EXECmaster.dbo.xp_fixeddrives EXEC, @remObjectScrting@remObjectScrip@hrte'sp. fso OUT IF @hr <> 0 EXEC sp_OAGetErrorInfo@fsoDECLARE dcur CURSOR LOCAL FAST_FORWARDFOR SELECT диск от #drives ПОРЪЧАЙ по устройство ОТВОРЕТЕ dcur ИЗВЛЕЧИ СЛЕДВАЩ ОТ dcur INTO @driveWHILE @@FETCH_STATUS @hr =o'etGDrive EX_ OUT, @driveIF @hr <> 0 EXEC sp_OAGetErrorInfo @fso EXEC @hr =sp_OAGetProperty@odrive,'TotalSize', @TotalSize OUT IF @hr <> 0 EXEC sp_OAGEetErrorInfo@odrive UPDATE@odrive UPDATE@com@drives SET [email protected] ИЗВЛЕЧИ СЛЕДВАЩО ОТ dcur В @driveEndClose dcurDEALLOCATE dcurEXEC @hr=sp_OADestroy @fso IF @hr <> 0 EXEC sp_OAGEtErrorInfo @fso--SELECT @@Servername--Изберете-тализирате като) ', FreeSpace като 'Free(MB)' FROM #drives--ORDER BY drive
СЪЗДАЙТЕ ТАБЛИЦА #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)SELECT cpu_count AS [Logical_CPU_Count] ,hyperthread_ratio AS [Hyperthread_Ratio] ,cpu_count/hyperthread_ratio AS [Physical_CPU_Count] , physical_memory_kb/1024 AS [Physical_Memory_MB]FROM sys.dm_os_sys_info 
CREATE TABLE #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 #DatabaseInfo( Machine_Name, Instance_Name, Sql_Server_Name, Total_Database_log_size_MB, Total_Database_log_used_MB, Total_Database_Data_File_Size_MB)select convert(varchar(50),serverproperty('MachineName')) 'Machine_Name' ,convert(varchar(50),isnull(serverproperty('InstanceName'),'mssqlserver')) 'In 50),@@SERVERNAME) 'Sql_Server_Name' ,sum(ls.cntr_value/1024) като [Total_Database_log_size_MB] ,sum(lu.cntr_value/1024)като [Total_Database_value/1024)като [Total_Database_value/1024)като [Total_Database_value]das.cntr_value/1024 като [Total_Database_log_size_MB]. sys.databases d ляво външно присъединяване sys.dm_os_performance_counters като lu на lu.instance_name=d.name и lu.counter_name като N'Log File(s) Използван размер (KB)%' ляво външно присъединяване sys.dm_os_performance_counters като ls на ls. инста nce_name=d.name и ls.counter_name като N'Log File(s) Size (KB)%' и ls.cntr_value> 0 ляво външно присъединяване sys.dm_os_performance_counters като lp на lp.instance_name=d.name и lp.counter_name като N'Percent Log Used%' ляво външно присъединяване sys.dm_os_performance_counters като ds на ds.instance_name=d.name и ds.counter_name като N'Data File(s) Size (KB)%'where d.database_id>4; -- системна база данни ler haricWITH SizeDisc AS( -- sunucu üzerindeki tüm размер на устройството и свободен размер bilgisiSELECT SUM(TotalSize) като 'Total_Disc_Sizeon_Server_MB', SUM(FreeSpace) като 'Total_Free_Disc_SizeOn) #Dabase_Disc_SizeOn, #Dabase_Disc_SizeOn #Dabase_Disc_SizeOn #Dabase_Disc_SizeOn_S SizeDiscDROP TABLE #Drives DROP TABLE #DatabaseInfoDROP TABLE #CPUInfo GO/**************************************** ******************//* Деактивиране на процедурите за автоматизация на Ole */sp_configure 'покажи разширени опции', 1;GORECONFIGURE;GOsp_configure 'Процедури за автоматизация на Ole', 0;GORECONFIGURE;/ ************************************************** *****/GO

Резултатът от скрипта е както следва.

Ще продължа да обяснявам отстраняването на проблеми с производителността на SQL сървъра в следващата статия.

Отстраняване на проблеми с производителността на SQL Server -5 Използване на 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. Добавете вход за свързан сървър в SQL Server (пример за T-SQL)

  2. T-SQL подзаявка Макс (дата) и присъединявания

  3. Създайте таблица (структура) от съществуваща таблица

  4. Използване на SolarWinds Serv-U на Linux с база данни за удостоверяване на SQL Server

  5. Как изброявате първичния ключ на таблица на SQL Server?