[译]MSSQL:使用SQL Prompt 快速使用十大常用脚本
SqlServer
2020-01-15
594
0
我之前有篇Top 10 Most Common Database Scripts 的文章,这个排名是由SQLServerCentrol社区投票的.我们的DBA经常会用到.不过如果你像我这样比较懒惰..那么肯定会想办法方便的执行这些脚本,比如敲两个字代替二十个字.
在本文中.我会向你展示,使用Redget SQL Prompt 设置Snippet来快速输入这些脚本.
#1 sp_who2 / sys.dm_exec_requests / sp_whoisactive
第一个语句是动态管理对象.用来显示你当前系统正在执行的查询,和查询计划等.这个打起来要一会儿时间,在此我们创建一个Snippet 名字为rn 意为right now .如下图
/rn/ SELECT SUBSTRING(dest.text, ( der.statement_start_offset / 2 ) + 1, ( CASE der.statement_end_offset WHEN -1 THEN DATALENGTH(dest.text) ELSE der.statement_end_offset - der.statement_start_offset END ) / 2 + 1) AS querystatement , deqp.query_plan , der.session_id , der.start_time , der.status , DB_NAME(der.database_id) AS DBName , USER_NAME(der.user_id) AS UserName , der.blocking_session_id , der.wait_type , der.wait_time , der.wait_resource , der.last_wait_type , der.cpu_time , der.total_elapsed_time , der.reads , der.writes FROM sys.dm_exec_requests AS der CROSS APPLY sys.dm_exec_sql_text(der.sql_handle) AS dest CROSS APPLY sys.dm_exec_query_plan(der.plan_handle) AS deqp;
#2 STATISTICS IO/TIME
你可能会想STATISTICS IO 花不了多少时间,所以..有必要节省这么点时间么?事实上,设置ON和OFF是很快的,但是Prompt有个placeholder的功能,让我们用起来更方便.
下图是Snippet的配置:
/ssit/ SET STATISTICS IO ON; SET STATISTICS TIME ON; $SELECTEDTEXT$$CURSOR$ SET STATISTICS IO OFF; SET STATISTICS TIME OFF;$SELECTEDTEXT$ 和$CURSOR$ 是占位符,你使用这个Snippet的时候光标会直接定位到on 和off之间,直接把代码贴进去就可以了.很方便. 如果你用的是Prompt7以上的版本,当你选中一段SQL之后,左边会出现Prompt的图标.里面输入Snippet就可以看到效果了.ON和OFF分别在我们选定语句的两边
#3 BACKUP DATABASE
关于BACKUP DATABASE 命令,我来快速创建一个带WITH COPY_ONLY字句的备份配置如下
/bu/ BACKUP DATABASE $DatabaseName$ TO DISK = 'C:\bu$DatabaseName$.bak' WITH COPY_ONLY;当我们使用的时候太会直接在占位符的地方提示我们输入数值,相同的占位符会全部替换掉
#4 sp_help
SQL Prompt已经内置了这个Snippet 名为sph,不过我改了一下,后面加了个分号
/sps/ EXEC sys.sp_spaceused @objname = N'$ObjectName$', @updateusage = '$UpdateUsage$';
#5 DBCC SQLPERF
这个没有什么好改的了.直接配置上去
/dsp/ DBCC SQLPERF (LOGSPACE);
#6 sys.dm_exec_query_stats
这个是对已完成查询的,之前查询计划缓存中统计,与之前的rn sys.dm_exec_requests 不同,这个我们称作 nrn 即'Not Right Now'
/nrn/ SELECT SUBSTRING(dest.text, ( deqs.statement_start_offset / 2 ) + 1, ( CASE deqs.statement_end_offset WHEN -1 THEN DATALENGTH(dest.text) ELSE deqs.statement_end_offset - deqs.statement_start_offset END ) / 2 + 1) AS querystatement , deqp.query_plan , deqs.execution_count , deqs.total_worker_time , deqs.total_logical_reads , deqs.total_elapsed_time FROM sys.dm_exec_query_stats AS deqs CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest CROSS APPLY sys.dm_exec_query_plan(deqs.plan_handle) AS deqp$CURSOR$;
#7 RESTORE DATABASE
这里重新用了 $DatabaseName$ 占位符
/rd/ RESTORE DATABASE $DatabaseName$ FROM DISK = 'D:\bu$DatabaseName$.bak' WITH REPLACE, NORECOVERY;
#8 RESTORE FILELISTONLY
同样的RESTORE FILELISTONLY 虽然简单,但是还是能省下一些时间 ( 2333…我觉得像我这样几百年都用不了一次这种命令的..光是让我想起来这个Snippet都要不少时间)
/rf/ RESTORE FILELISTONLY FROM DISK = '$PASTE$'; GO
#9 sp_spaceused
设置一个有默认值的Snippet是相当方便的,如下图
/sps/ EXEC sys.sp_spaceused @objname = N'$ObjectName$', @updateusage = '$UpdateUsage$';
#10 DBCC SHOW_STATISTICS
DBCC SHOW_STATISTICS('$TableName$','$Statistic$'); GO
参考
原文 https://www.simple-talk.com/sql/t-sql-programming/using-sql-prompt-to-accelerate-the-top-10-most-common-database-scripts/ Prompt设置文件https://www.simple-talk.com/content/file.ashx?file=11993 Top10 SQL 脚本 https://www.simple-talk.com/content/file.ashx?file=11994