当前位置:Gxlcms > 数据库问题 > 跟踪数据库中执行时间超过1.5秒的语句及SP,导入数据库

跟踪数据库中执行时间超过1.5秒的语句及SP,导入数据库

时间:2021-07-01 10:21:17 帮助过:9人阅读

============================================================================ --新建两个目录 D:\InOut\TraceDB D:\InOut\TraceLog\ --建数据库,建跟踪执行时间超过1.5秒的语句及SP --建作业,每天在固定时间将跟踪文件导入数据库 --============================================================================ USE [master] GO /****** Object: Database [TraceDB] Script Date: 2017/2/15 11:16:02 ******/ CREATE DATABASE [TraceDB] CONTAINMENT = NONE ON PRIMARY ( NAME = NTraceDB, FILENAME = ND:\inout\TraceDB\TraceDB.mdf , SIZE = 102400KB , MAXSIZE = UNLIMITED, FILEGROWTH = 102400KB ) LOG ON ( NAME = NTraceDB_log, FILENAME = ND:\inout\TraceDB\TraceDB_log.ldf , SIZE = 20416KB , MAXSIZE = 2048GB , FILEGROWTH = 102400KB ) GO --ALTER DATABASE [TraceDB] SET COMPATIBILITY_LEVEL = 120 --GO IF (1 = FULLTEXTSERVICEPROPERTY(IsFullTextInstalled)) begin EXEC [TraceDB].[dbo].[sp_fulltext_database] @action = enable end GO ALTER DATABASE [TraceDB] SET ANSI_NULL_DEFAULT OFF GO ALTER DATABASE [TraceDB] SET ANSI_NULLS OFF GO ALTER DATABASE [TraceDB] SET ANSI_PADDING OFF GO ALTER DATABASE [TraceDB] SET ANSI_WARNINGS OFF GO ALTER DATABASE [TraceDB] SET ARITHABORT OFF GO ALTER DATABASE [TraceDB] SET AUTO_CLOSE OFF GO ALTER DATABASE [TraceDB] SET AUTO_SHRINK OFF GO ALTER DATABASE [TraceDB] SET AUTO_UPDATE_STATISTICS ON GO ALTER DATABASE [TraceDB] SET CURSOR_CLOSE_ON_COMMIT OFF GO ALTER DATABASE [TraceDB] SET CURSOR_DEFAULT GLOBAL GO ALTER DATABASE [TraceDB] SET CONCAT_NULL_YIELDS_NULL OFF GO ALTER DATABASE [TraceDB] SET NUMERIC_ROUNDABORT OFF GO ALTER DATABASE [TraceDB] SET QUOTED_IDENTIFIER OFF GO ALTER DATABASE [TraceDB] SET RECURSIVE_TRIGGERS OFF GO ALTER DATABASE [TraceDB] SET ENABLE_BROKER GO ALTER DATABASE [TraceDB] SET AUTO_UPDATE_STATISTICS_ASYNC OFF GO ALTER DATABASE [TraceDB] SET DATE_CORRELATION_OPTIMIZATION OFF GO ALTER DATABASE [TraceDB] SET TRUSTWORTHY OFF GO ALTER DATABASE [TraceDB] SET ALLOW_SNAPSHOT_ISOLATION OFF GO ALTER DATABASE [TraceDB] SET PARAMETERIZATION SIMPLE GO ALTER DATABASE [TraceDB] SET READ_COMMITTED_SNAPSHOT OFF GO ALTER DATABASE [TraceDB] SET HONOR_BROKER_PRIORITY OFF GO ALTER DATABASE [TraceDB] SET RECOVERY FULL GO ALTER DATABASE [TraceDB] SET MULTI_USER GO ALTER DATABASE [TraceDB] SET PAGE_VERIFY CHECKSUM GO ALTER DATABASE [TraceDB] SET DB_CHAINING OFF GO ALTER DATABASE [TraceDB] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF ) GO ALTER DATABASE [TraceDB] SET TARGET_RECOVERY_TIME = 0 SECONDS GO ALTER DATABASE [TraceDB] SET DELAYED_DURABILITY = DISABLED GO EXEC sys.sp_db_vardecimal_storage_format NTraceDB, NON GO USE [TraceDB] GO /****** Object: UserDefinedFunction [dbo].[Split] Script Date: 2017/2/15 11:16:02 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --表值函数用以截取字符串 --如果为其添加一列主键id,则其顺序就会固定了 create FUNCTION [dbo].[Split](@text NVARCHAR(max)) RETURNS @tempTable TABLE(value NVARCHAR(1000)) AS BEGIN DECLARE @StartIndex INT --开始查找的位置 DECLARE @FindIndex INT --找到的位置 DECLARE @Content VARCHAR(4000) --找到的值 --初始化一些变量 SET @StartIndex = 1 --T-SQL中字符串的查找位置是从1开始的 SET @FindIndex=0 --开始循环查找字符串逗号 WHILE(@StartIndex <= LEN(@Text)) BEGIN --查找字符串函数 CHARINDEX 第一个参数是要找的字符串 -- 第二个参数是在哪里查找这个字符串 -- 第三个参数是开始查找的位置 --返回值是找到字符串的位置 SELECT @FindIndex = CHARINDEX(, ,@Text,@StartIndex) --判断有没找到 没找到返回0 IF(@FindIndex =0 OR @FindIndex IS NULL) BEGIN --如果没有找到就表示找完了 SET @FindIndex = LEN(@Text)+1 END --截取字符串函数 SUBSTRING 第一个参数是要截取的字符串 -- 第二个参数是开始的位置 -- 第三个参数是截取的长度 SET @Content =SUBSTRING(@Text,@StartIndex,@FindIndex-@StartIndex) --初始化下次查找的位置 SET @StartIndex = @FindIndex+1 --把找的的值插入到要返回的Table类型中 INSERT INTO @tempTable (Value) VALUES (@Content) END RETURN END GO /****** Object: Table [dbo].[CommandLog] Script Date: 2017/2/15 11:16:02 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[CommandLog]( [ID] [int] IDENTITY(1,1) NOT NULL, [DatabaseName] [sysname] NULL, [SchemaName] [sysname] NULL, [ObjectName] [sysname] NULL, [ObjectType] [char](2) NULL, [IndexName] [sysname] NULL, [IndexType] [tinyint] NULL, [StatisticsName] [sysname] NULL, [PartitionNumber] [int] NULL, [ExtendedInfo] [xml] NULL, [Command] [nvarchar](max) NOT NULL, [CommandType] [nvarchar](60) NOT NULL, [StartTime] [datetime] NOT NULL, [EndTime] [datetime] NULL, [ErrorNumber] [int] NULL, [ErrorMessage] [nvarchar](max) NULL, CONSTRAINT [PK_CommandLog] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Object: Table [dbo].[TraceLog] Script Date: 2017/2/15 11:16:02 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[TraceLog]( [RowNumber] [int] IDENTITY(0,1) NOT NULL, [EventClass] [int] NULL, [Duration] [bigint] NULL, [TextData] [ntext] NULL, [SPID] [int] NULL, [BinaryData] [image] NULL, [CPU] [int] NULL, [EndTime] [datetime] NULL, [ObjectName] [nvarchar](128) NULL, [StartTime] [datetime] NULL, [Reads] [bigint] NULL, [Writes] [bigint] NULL, [DataBaseName] [nvarchar](256) NULL, [ApplicationName] [nvarchar](256) NULL, [HostName] [nvarchar](256) NULL, PRIMARY KEY CLUSTERED ( [RowNumber] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO /****** Object: StoredProcedure [dbo].[CommandExecute] Script Date: 2017/2/15 11:16:02 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[CommandExecute] @Command nvarchar(max), @CommandType nvarchar(max), @Mode int, @Comment nvarchar(max) = NULL, @DatabaseName nvarchar(max) = NULL, @SchemaName nvarchar(max) = NULL, @ObjectName nvarchar(max) = NULL, @ObjectType nvarchar(max) = NULL, @IndexName nvarchar(max) = NULL, @IndexType int = NULL, @StatisticsName nvarchar(max) = NULL, @PartitionNumber int = NULL, @ExtendedInfo xml = NULL, @LogToTable bit, @Exec bit AS BEGIN SET NOCOUNT ON DECLARE @StartMessage nvarchar(max) DECLARE @EndMessage nvarchar(max) DECLARE @ErrorMessage nvarchar(max) DECLARE @ErrorMessageOriginal nvarchar(max) DECLARE @StartTime datetime DECLARE @EndTime datetime DECLARE @StartTimeSec datetime DECLARE @EndTimeSec datetime DECLARE @ID int DECLARE @Error int DECLARE @ReturnCode int SET @Error = 0 SET @ReturnCode = 0 ---------------------------------------------------------------------------------------------------- --// Check core requirements //-- ---------------------------------------------------------------------------------------------------- IF @LogToTable = 1 AND NOT EXISTS (SELECT * FROM sys.objects objects INNER JOIN sys.schemas schemas ON objects.[schema_id] = schemas.[schema_id] WHERE objects.[type] = U AND schemas.[name] = dbo AND objects.[name] = CommandLog) BEGIN SET @ErrorMessage = The table CommandLog is missing. Download https://ola.hallengren.com/scripts/CommandLog.sql. + CHAR(13) + CHAR(10) + RAISERROR(@ErrorMessage,16,1) WITH NOWAIT SET @Error = @@ERROR END IF @Error <> 0 BEGIN SET @ReturnCode = @Error GOTO ReturnCode END ---------------------------------------------------------------------------------------------------- --// Check input parameters //-- ---------------------------------------------------------------------------------------------------- IF @Command IS NULL OR @Command = ‘‘ BEGIN SET @ErrorMessage = The value for the parameter @Command is not supported. + CHAR(13) + CHAR(10) + RAISERROR(@ErrorMessage,16,1) WITH NOWAIT SET @Error = @@ERROR END IF @CommandType IS NULL OR @CommandType = ‘‘ OR LEN(@CommandType) > 60 BEGIN SET @ErrorMessage = The value for the parameter @CommandType is not supported. + CHAR(13) + CHAR(10) + RAISERROR(@ErrorMessage,16,1) WITH NOWAIT SET @Error = @@ERROR END IF @Mode NOT IN(1,2) OR @Mode IS NULL BEGIN SET @ErrorMessage = The value for the parameter @Mode is not supported. + CHAR(13) + CHAR(10) + RAISERROR(@ErrorMessage,16,1) WITH NOWAIT SET @Error = @@ERROR END IF @Error <> 0 BEGIN SET @ReturnCode = @Error GOTO ReturnCode END ---------------------------------------------------------------------------------------------------- --// Log initial information //-- ---------------------------------------------------------------------------------------------------- SET @StartTime = GETDATE() SET @StartTimeSec = CONVERT(datetime,CONVERT(nvarchar,@StartTime,120),120) IF @LogToTable=0 BEGIN SET @StartMessage = Date and time: + CONVERT(nvarchar,@StartTimeSec,120) + CHAR(13) + CHAR(10) SET @StartMessage = @StartMessage + Command: + @Command IF @Comment IS NOT NULL SET @StartMessage = @StartMessage + CHAR(13) + CHAR(10) + Comment: + @Comment SET @StartMessage = REPLACE(@StartMessage,%,%%) RAISERROR(@StartMessage,10,1) WITH NOWAIT END IF @LogToTable = 1 BEGIN INSERT INTO dbo.CommandLog (DatabaseName, SchemaName, ObjectName, ObjectType, IndexName, IndexType, StatisticsName, PartitionNumber, ExtendedInfo, CommandType, Command, StartTime) VALUES (@DatabaseName, @SchemaName, @ObjectName, @ObjectType, @IndexName, @IndexType, @StatisticsName, @PartitionNumber, @ExtendedInfo, @CommandType, @Command, @StartTime) END SET @ID = SCOPE_IDENTITY() ---------------------------------------------------------------------------------------------------- --// Execute command //-- ---------------------------------------------------------------------------------------------------- IF @Mode = 1 AND @Exec = 1 BEGIN EXECUTE(@Command) SET @Error = @@ERROR SET @ReturnCode = @Error END IF @Mode = 2 AND @Exec =1 BEGIN BEGIN TRY EXECUTE(@Command) END TRY BEGIN CATCH SET @Error = ERROR_NUMBER() SET @ReturnCode = @Error SET @ErrorMessageOriginal = ERROR_MESSAGE() SET @ErrorMessage = Msg + CAST(@Error AS nvarchar) + , + ISNULL(@ErrorMessageOriginal,‘‘) RAISERROR(

人气教程排行