布伦特·奥扎尔';s SQL检查脚本-内存/CPU/IO问题?

布伦特·奥扎尔';s SQL检查脚本-内存/CPU/IO问题?,sql,sp-blitz,Sql,Sp Blitz,在SQL Server 2016生产机器上使用Brent Ozar的免费SQL运行状况检查脚本需要多小心?该机器已经非常满且非常忙了?是否有人在运行以下任何一项时遇到内存、CPU或I/O问题?谢谢你的反馈 sp_闪电战 闪电缓存 闪电战第一 闪电指数 闪电锁 布利茨克雷斯托尔酒店 斯普·布利兹是谁 sp_WhoIsActive(亚当·马查尼克) 如果没有它,我是不可能的。我们有Redgate,我更经常使用Brents工具 我们的数据库容量为3 Tb,每秒大约有1500个查询,从未遇到过任何问题

在SQL Server 2016生产机器上使用Brent Ozar的免费SQL运行状况检查脚本需要多小心?该机器已经非常满且非常忙了?是否有人在运行以下任何一项时遇到内存、CPU或I/O问题?谢谢你的反馈

  • sp_闪电战
  • 闪电缓存
  • 闪电战第一
  • 闪电指数
  • 闪电锁
  • 布利茨克雷斯托尔酒店
  • 斯普·布利兹是谁
  • sp_WhoIsActive(亚当·马查尼克)

    • 如果没有它,我是不可能的。我们有Redgate,我更经常使用Brents工具

      我们的数据库容量为3 Tb,每秒大约有1500个查询,从未遇到过任何问题

      制作了一个依赖于sp_BlitzWho的自定义sp_BlitzWho扩展

      这需要斯普·布利兹的结果。把它放在临时表中,这样我可以添加一个过滤器。此外,还会识别和转换游标,以便您可以查看实际查询

      用于删除每个计划缓存的SQL都存在——因此,每当我们得到一个愚蠢的计划时,很容易找到并删除正确的计划

      现在只需5秒钟就可以确定罪犯并取消计划

      首先,我创建了一个函数来从游标获取查询文本

      create function [dbo].[CursorQuery]
      (
          @session_id int
      ) returns nvarchar(255)
      as
      begin
          declare @ret nvarchar(255) = null
      
          SELECT @ret = t.text
          FROM sys.dm_exec_cursors (@session_id) c
          LEFT JOIN sys.dm_exec_sessions AS es ON c.session_id = es.session_id
          CROSS APPLY sys.dm_exec_sql_text (c.sql_handle) t
      
          return @ret 
      end
      
      然后是存储过程

      CREATE PROCEDURE [dbo].[sp_BlitzWho_Ext]
      AS
      BEGIN
          CREATE TABLE #BlitzWhoResult
          (
              [run_date] VARCHAR(255),
              [elapsed_time] [varchar](41) NULL,
              [session_id] [smallint] NOT NULL,
              [database_name] [nvarchar](128) NULL,
              [query_text] [nvarchar](max) NULL,
              [query_plan] [xml] NULL,
              [live_query_plan] [xml] NULL,
              [query_cost] [float] NULL,
              [status] [nvarchar](30) NOT NULL,
              [wait_info] [nvarchar](max) NULL,
              [top_session_waits] [nvarchar](max) NULL,
              [blocking_session_id] [smallint] NULL,
              [open_transaction_count] [int] NULL,
              [is_implicit_transaction] [int] NOT NULL,
              [nt_domain] [nvarchar](128) NULL,
              [host_name] [nvarchar](128) NULL,
              [login_name] [nvarchar](128) NOT NULL,
              [nt_user_name] [nvarchar](128) NULL,
              [program_name] [nvarchar](128) NULL,
              [fix_parameter_sniffing] [nvarchar](150) NULL,
              [client_interface_name] [nvarchar](32) NULL,
              [login_time] [datetime] NOT NULL,
              [start_time] [datetime] NULL,
              [request_time] [datetime] NULL,
              [request_cpu_time] [int] NULL,
              [request_logical_reads] [bigint] NULL,
              [request_writes] [bigint] NULL,
              [request_physical_reads] [bigint] NULL,
              [session_cpu] [int] NOT NULL,
              [session_logical_reads] [bigint] NOT NULL,
              [session_physical_reads] [bigint] NOT NULL,
              [session_writes] [bigint] NOT NULL,
              [tempdb_allocations_mb] [decimal](38, 2) NULL,
              [memory_usage] [int] NOT NULL,
              [estimated_completion_time] [bigint] NULL,
              [percent_complete] [real] NULL,
              [deadlock_priority] [int] NULL,
              [transaction_isolation_level] [varchar](33) NOT NULL,
              [degree_of_parallelism] [smallint] NULL,
              [last_dop] [bigint] NULL,
              [min_dop] [bigint] NULL,
              [max_dop] [bigint] NULL,
              [last_grant_kb] [bigint] NULL,
              [min_grant_kb] [bigint] NULL,
              [max_grant_kb] [bigint] NULL,
              [last_used_grant_kb] [bigint] NULL,
              [min_used_grant_kb] [bigint] NULL,
              [max_used_grant_kb] [bigint] NULL,
              [last_ideal_grant_kb] [bigint] NULL,
              [min_ideal_grant_kb] [bigint] NULL,
              [max_ideal_grant_kb] [bigint] NULL,
              [last_reserved_threads] [bigint] NULL,
              [min_reserved_threads] [bigint] NULL,
              [max_reserved_threads] [bigint] NULL,
              [last_used_threads] [bigint] NULL,
              [min_used_threads] [bigint] NULL,
              [max_used_threads] [bigint] NULL,
              [grant_time] [varchar](20) NULL,
              [requested_memory_kb] [bigint] NULL,
              [grant_memory_kb] [bigint] NULL,
              [is_request_granted] [varchar](39) NOT NULL,
              [required_memory_kb] [bigint] NULL,
              [query_memory_grant_used_memory_kb] [bigint] NULL,
              [ideal_memory_kb] [bigint] NULL,
              [is_small] [bit] NULL,
              [timeout_sec] [int] NULL,
              [resource_semaphore_id] [smallint] NULL,
              [wait_order] [varchar](20) NULL,
              [wait_time_ms] [varchar](20) NULL,
              [next_candidate_for_memory_grant] [varchar](3) NOT NULL,
              [target_memory_kb] [bigint] NULL,
              [max_target_memory_kb] [varchar](30) NULL,
              [total_memory_kb] [bigint] NULL,
              [available_memory_kb] [bigint] NULL,
              [granted_memory_kb] [bigint] NULL,
              [query_resource_semaphore_used_memory_kb] [bigint] NULL,
              [grantee_count] [int] NULL,
              [waiter_count] [int] NULL,
              [timeout_error_count] [bigint] NULL,
              [forced_grant_count] [varchar](30) NULL,
              [workload_group_name] [sysname] NULL,
              [resource_pool_name] [sysname] NULL,
              [context_info] [varchar](128) NULL,
              [query_hash] [binary](8) NULL,
              [query_plan_hash] [binary](8) NULL,
              [sql_handle] [varbinary] (64) NULL,
              [plan_handle] [varbinary] (64) NULL,
              [statement_start_offset] INT NULL,
              [statement_end_offset] INT NULL
          )
      
          INSERT INTO #BlitzWhoResult
          EXEC  [dbo].[sp_BlitzWho] @ShowSleepingSPIDs = 1, @ExpertMode = 1,    @MinElapsedSeconds = 1
      
          SELECT [program_name],
          [session_id], 
          CASE WHEN [query_text] LIKE 'FETCH API_CURSOR%' 
              THEN CursorQuery(session_id) 
              ELSE query_text 
              END AS [query_text],
          [query_plan], 
          [fix_parameter_sniffing] AS [drop_cached_plan_sql], 
          [status], 
          [wait_info], 
          [login_name]
          from #BlitzWhoResult
          where database_name = 'PUT_YOUR_DATABASENAME_HERE' -- and... add more filters?
      
          DROP TABLE #BlitzWhoResult
      END
      

      所以。。我真的很喜欢布伦茨的工具以及他的视频和幽默感

      工具的来源:;我已经阅读了布伦特的很多文档资料,并观看了他的很多YouTube,听起来好像有很多想法和合作,但我以前从未在繁忙、繁重的prod中使用过它们。我同意,它们在他的视频中似乎设计得很好,表现得很好。我只是没有经验来支持这一点,所以我不打算猜测。如果有人好奇,我会把它们链接起来。我已经用了很多,很乐意推荐它们。sp_WhoIsActive我每天打几次电话(甚至有快捷方式设置)