惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
V
Vulnerabilities – Threatpost
Google Online Security Blog
Google Online Security Blog
Hugging Face - Blog
Hugging Face - Blog
L
LINUX DO - 热门话题
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
D
Docker
C
Cyber Attacks, Cyber Crime and Cyber Security
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
T
Tenable Blog
P
Privacy International News Feed
Google DeepMind News
Google DeepMind News
小众软件
小众软件
Cisco Talos Blog
Cisco Talos Blog
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
A
Arctic Wolf
C
Cybersecurity and Infrastructure Security Agency CISA
C
Cisco Blogs
T
Threat Research - Cisco Blogs
NISL@THU
NISL@THU
The Hacker News
The Hacker News
Project Zero
Project Zero
AWS News Blog
AWS News Blog
Simon Willison's Weblog
Simon Willison's Weblog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threatpost
V
Visual Studio Blog
The GitHub Blog
The GitHub Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
Jina AI
Jina AI
Cyberwarzone
Cyberwarzone
The Register - Security
The Register - Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
Vercel News
Vercel News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
MongoDB | Blog
MongoDB | Blog
U
Unit 42
Scott Helme
Scott Helme
A
About on SuperTechFans
WordPress大学
WordPress大学
F
Fortinet All Blogs
大猫的无限游戏
大猫的无限游戏
G
GRAHAM CLULEY
Latest news
Latest news
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
Schneier on Security

博客园 - 黄铨

AutoHotKey 简易自动化脚本的一些资料 Powershell 主题美化学习过程 - 黄铨 - 博客园 [实战]如何对比两个数据库之间的变化 - 黄铨 - 博客园 发个老梗,关于GIT如何回退已经提交的COMMIT,以及如何撤销未完成的合并。 Hello, .NET微软技术广州俱乐部 F7 - Visual Studio - switch between aspx and "codebehind" Mac OS X El Capitan(10.11)显示隐藏文件命令失效解决方法 undo/delete a commit on git 博文阅读密码验证 - 博客园 Move System Databases in MS SQL SERVER 部署Microsoft.ReportViewe 关于TFS强制undo他人check out 几段查看数据库表占用硬盘空间的tsql How to perform validation on sumbit only TFS 2012 Disable Multiple Check-out kill the vs2012 preview tabs 在Chrome Console中加载jQuery Using NuGet without committing packages to source control(在没有把包包提交到代码管理器的情况下使用NuGet进行还原 ) 关于asp.net网站下aux路径访问问题
[实战]分钟级简易数据库执行日志
黄铨 · 2018-12-27 · via 博客园 - 黄铨

相信很多童鞋都知道数据库忽然性能下来的时候,在没有其他辅助工具的情况下,会登上去跑个sp_who2来看看就行什么东西block住了,那么其实就可以用这个东西来做文章了。直接贴段代码吧,核心的出自Kent之手,我只是把他变成个SP,并起了个SQL Schedule Job设置成每分钟跑一次,跑挂了不要紧,下一分钟再跑就行,我们要的只是简易日志。这样就不用说抢着时间点去跑sp_who2了。出来的效果大概是这样,最后一列eventinfo就是在跑什么,就连schedule job的step id都能出来。enjoy :) 

 

CREATE PROC [dbo].[usp_log_sp_who2] 
AS
BEGIN

DECLARE @tempTable TABLE (SPID INT,Status VARCHAR(255),
      [Login]  VARCHAR(255),HostName  VARCHAR(255),
      BlkBy  VARCHAR(255),DBName  VARCHAR(255),
      Command VARCHAR(255),CPUTime INT,
      DiskIO INT,LastBatch VARCHAR(255),
      ProgramName VARCHAR(255),SPID2 INT,
      REQUESTID INT, 
      [parameters] SMALLINT, eventinfo NVARCHAR(MAX));

INSERT INTO @tempTable (spid, [status], [login], hostname, blkby, dbname, command, cputime, diskio, lastbatch, programname, spid2, requestid) EXEC sp_who2
DECLARE @t1 TABLE (eventtype nvarchar(MAX), [parameters] SMALLINT, eventinfo NVARCHAR(MAX))
DECLARE @sql NVARCHAR(MAX) 
DECLARE @spid INT, @parameters smallint, @eventinfo NVARCHAR(MAX)
DECLARE curTempTable CURSOR FOR SELECT spid FROM @tempTable FOR UPDATE OF [parameters], [eventinfo]

OPEN curTempTable
FETCH curTempTable INTO @spid
WHILE @@FETCH_STATUS = 0
BEGIN
   DELETE FROM @t1
   SET @sql = N'dbcc inputbuffer(' + CONVERT(NVARCHAR(MAX), @spid) + N')'
   INSERT @t1 EXEC(@sql)
   SELECT TOP 1 @parameters = [parameters], @eventinfo = [eventinfo] FROM @t1
   UPDATE @tempTable SET [parameters] = @parameters, [eventinfo] = @eventinfo WHERE CURRENT OF curTempTable
   FETCH NEXT FROM curTempTable INTO @spid
END
CLOSE curTempTable

DECLARE @now DATETIME = GETDATE()
DELETE LOG_SP_WHO2 WHERE [Branch]<DATEADD(day, -7, @now)
--这里-7其实随你喜欢,我只是需要一周内的日志而已,所以就把一周前的删除了
INSERT INTO LOG_SP_WHO2 SELECT @now, * FROM @tempTable END
--基础表
CREATE TABLE [dbo].[LOG_SP_WHO2](
    [Branch] [datetime] NULL,
    [SPID] [int] NULL,
    [Status] [varchar](255) NULL,
    [Login] [varchar](255) NULL,
    [HostName] [varchar](255) NULL,
    [BlkBy] [varchar](255) NULL,
    [DBName] [varchar](255) NULL,
    [Command] [varchar](255) NULL,
    [CPUTime] [int] NULL,
    [DiskIO] [int] NULL,
    [LastBatch] [varchar](255) NULL,
    [ProgramName] [varchar](255) NULL,
    [SPID2] [int] NULL,
    [REQUESTID] [int] NULL,
    [parameters] [smallint] NULL,
    [eventinfo] [nvarchar](max) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

--索引的随君所愿,我这里只是建了个按时间的聚集索引(非唯一) CREATE CLUSTERED INDEX [IX_LOG_SP_WHO2] ON [dbo].[LOG_SP_WHO2] ( [Branch] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO