sql >> Base de Datos >  >> RDS >> Sqlserver

Uso de DMV (Vista de gestión dinámica) y DMF (Función de gestión dinámica) | Solución de problemas de rendimiento de SQL Server -4

Hola,

Continuaré explicando cómo solucionar problemas de rendimiento de SQL Server en esta serie de artículos.

Solución de problemas de rendimiento del servidor SQL

Lea el artículo anterior antes de este.

Supervisión de contadores de rendimiento a través de PERFMON | Solución de problemas de rendimiento de SQL Server -3

DMV (Vista de gestión dinámica)

Con DMV (Vistas de administración dinámica) y DMF (Funciones de administración dinámica) introducidas en SQL Server 2005, puede monitorear todas las actividades ocurridas en la base de datos, el estado de rendimiento y mostrar información del sistema para administrar y monitorear las bases de datos.

Todas las bases de datos (Oracle, SQL Server, MySQL, Sybase, PostreSQL, DB2, etc.) recopilan cierta información interna (actividades de sesión, proceso, etc. y sus estadísticas) sobre el sistema y proporcionan estos datos como tablas y vistas del sistema.

Para obtener información sobre el sistema operativo y la base de datos, la siguiente información generalmente está disponible en las tablas del sistema que SQL Server actualiza periódicamente.

  • Información general sobre la base de datos y el servidor de la base de datos (nombre, edición, versión, conjunto de caracteres, etc.)
  • Consultas activas
  • Uso de CPU, E/S y memoria de consultas activas
  • Plan de ejecución
  • Índice utilizado por una consulta en ejecución
  • Espera de E/S en memoria, disco y red
  • Índices faltantes que afectan negativamente el rendimiento de la base de datos
  • Tasas de uso de índices (escanear, buscar valores)
  • Tiempo de respuesta de los discos

DMF (función de gestión dinámica)

Aunque DMV y DMF parecen lo mismo en SQL Server, la diferencia entre ellos se puede consultar directamente como el nombre de DMV, mientras que DMF son funciones que toman un parámetro y devuelven una tabla en consecuencia.

Gracias a DMV y DMF, puede monitorear bases de datos críticas que se ejecutan como producción, identificar problemas de inmediato y tomar las medidas correspondientes. Con estas consultas, puede consultar la mayoría de las declaraciones de consumo de CPU, E/S y memoria de consultas activas en ejecución en la base de datos, encontrar las tablas de índice que faltan y encontrar consultas de ejecución lenta.

Todos los DMV y DMF disponibles en SQL Server se pueden consultar con la siguiente consulta.

seleccione nombre, type_desc de sys.system_objects donde nombre como 'dm%' ordene por nombre;

Estos DMV y DMF utilizados en SQL Server brindan información a los usuarios de acuerdo con categorías como sesión, base de datos, sistema operativo (sistema operativo), transacción, etc. Por ejemplo; DMV y DMF en la categoría de base de datos comienzan con sys.dm_db o DMV y DMF relacionados con Transacciones comienzan con sys.dm_tran .

La lista de DMV y DMF por categorías es la siguiente.

Los DMV y DMF más utilizados son los siguientes.

Ejecución (SQL, consulta, proceso, etc.):  DMV y DMF de consultas activas en ejecución que brindan información como a qué usuario se llama desde qué máquina, procesos, tiempos de finalización estimados y estadísticas de consulta.

Los más importantes son los siguientes.

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

Base de datos: Son DMV y DMF los que brindan la información necesaria sobre el índice, la duplicación y el particionamiento a nivel de base de datos. Los más importantes son los siguientes.

  • sys.dm_db_missing_index_detalles (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)

Sistema operativo: Es DMV y DMF que brinda la información necesaria sobre el sistema operativo. Los más importantes son los siguientes.
  • 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_rendimiento_contadores(DMV)
  • sys.dm_os_cluster_nodes (DMF)
Transacción: Son el DMV y el DMF los que brindan la información necesaria sobre la Transacción. Los más importantes son los siguientes.
  • sys.dm_tran_active_transactions (DMV)
  • sys.dm_tran_session_transactions (DMV)
  • sys.dm_tran_database_transactions (DMV)
  • sys.dm_tran_transacción_actual (DMV)
Vamos a usar DMV y DMF para consultar las declaraciones TOP 10 CPU. Puede consultar las 10 mejores declaraciones de CPU en la base de datos utilizando DMV y DMF como se muestra a continuación.

seleccione los 10 casos principales cuando sql_handle ES NULL y luego '' else ( substring(st.text,(qs.statement_start_offset+2)/2, ( caso cuando qs.statement_end_offset =-1 luego 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 ) como [AvgCPUTime], lecturas_lógicas_totales como [Lecturas_lógicas], escrituras_lógicas_totales como [Escrituras_lógicas], conteo_ejecución, tiempo_de_creación, tiempo_última_ejecución, lecturas_lógicas_totales+escrituras_lógicas_totales como [AggIO], (lecturas_lógicas_totales+escrituras_lógicas_totales)/(recuento_ejecuciones + 0.0) como [E/S promedio], nombre_bd( st.dbid) como nombre_de_base_de_datos, st.objectid como id_de_objeto de sys.dm_exec_query_stats qs aplicar de forma cruzada sys.dm_exec_sql_text(sql_handle) st APLICACIÓN CRUZADA sys.dm_exec_query_plan(qs.plan_handle) COMO qp donde total_worker_time> 0 pedido por total_worker_time desc;

Cuando ejecuto la consulta anterior en la base de datos de prueba de AdventureWorks que utilicé para mis pruebas, el resultado será el siguiente.

Compartiré la secuencia de comandos (Incluir SO y base de datos DMV y DMF) que brinda información general sobre el sistema operativo que ejecuta la instancia de la base de datos de SQL Server, como CPU total, memoria, tamaño total del disco, tamaño de la base de datos y tamaño del registro de transacciones.

Este script es especialmente necesario al preparar los inventarios de su base de datos.

sp_configure 'mostrar opciones avanzadas', 1;GORECONFIGURE;GOsp_configure 'Procedimientos de automatización antiguos', 1;GORECONFIGURE;GO/*********************** ********************************/FIJAR NOCOUNT ONDECLARE @hr intDECLARE @fso intDECLARE @drive char(1)DECLARE @ odrive intDECLARE @TotalSize varchar(20) DECLARE @MB Numérico; SET @MB =1048576CREAR TABLA #unidades (unidad char(1) PRIMARY KEY, FreeSpace int NULL,TotalSize int NULL) INSERT #unidades(unidad,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 SELECCIONAR unidad de #unidades ORDENAR por driveOPEN dcur FETCH NEXT FROM dcur INTO @driveWHILE @@FETCH_STATUS=0BEGINEXEC @hr =sp_OAMethod @fso,'GetDrive', @odrive SALIDA, @driveIF @hr <> 0 EXEC sp_OAGetErrorInfo @fso EXEC @hr =sp_OAGetProperty@odrive,'TotalSize', @TotalSize SALIDA SI @hr <> 0 EXEC sp_OAGetErrorInfo@odrive ACTUALIZAR #unidades SET [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 as 'Total(MB) ', FreeSpace como '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)
INSERTAR EN #CPUInfo( Logical_CPU_Count, Hyperthread_Ratio, Physical_CPU_Count, Physical_Memory_MB) SELECCIONE cpu_count COMO [Logical_CPU_Count] ,hyperthread_ratio COMO [Hyperthread_Ratio] ,cpu_count/hyperthread_ratio COMO [Physical_CPU_Count] , Physical_memory_kb/1024 AS [Phys_md_infoos 
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, Total_Database_log_size Total_Database_Data_File_Size_MB)select convert(varchar(50),serverproperty('MachineName')) 'Machine_Name' ,convert(varchar(50),isnull(serverproperty('InstanceName'),'mssqlserver')) 'Instance_Name' ,convert(varchar( de sys.databases d combinación externa izquierda sys.dm_os_performance_counters como lu en lu.instance_name=d.name y lu.counter_name como N'Log File(s) Used Size (KB)%' combinación externa izquierda sys.dm_os_performance_counters como ls en ls. insta nce_name=d.name y ls.counter_name como N'Log File(s) Size (KB)%' y ls.cntr_value> 0 combinación externa izquierda sys.dm_os_performance_counters como lp en lp.instance_name=d.name y lp.counter_name como N'Porcentaje de registro utilizado%' combinación externa izquierda sys.dm_os_performance_counters como ds en ds.instance_name=d.name y ds.counter_name como N'Data File(s) Size (KB)%'where d.database_id>4; -- base de datos del sistema 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)SELECT * FROM #DatabaseInfo,#CPUInfo, TamañoDiscoDROP TABLE #Unidades DROP TABLE #DatabaseInfoDROP TABLE #CPUInfo GO/************************************* ******************//* Deshabilitar procedimientos de automatización Ole */sp_configure 'mostrar opciones avanzadas', 1;GORECONFIGURE;GOsp_configure 'Procedimientos de automatización Ole', 0;GORECONFIGURE;/ **************************************************** *****/IR

El resultado del script es el siguiente.

Seguiré explicando la solución de problemas de rendimiento de SQL Server en el próximo artículo.

Solución de problemas de rendimiento de SQL Server -5 Uso de SQL Server Profiler