SQLServer常用运维SQL整理教程ServerSQL

印迹3月前 156

WIN2012安装SQL2016

      【1】 安装SQL2016的前置条件
               需要安装KB2919355-x64补丁。  而KB2919355又需要前置安装KB2919442-X64补丁。
      【2】 安装KB2919355补丁,报错:更新失败
               第一步。移除失败更新(对所有更新补丁可用),OS下命令行使用
               dism /online /remove-package /packagename:Package_for_KB2919355~31bf3856ad364e35~amd64~~6.3.1.14
               第二步。清除Windows Update缓存
                dism /online /cleanup-image /startcomponentcleanup
               第三步。重启计算机后,再次进行安装。

SqlServer T-SQL

一、T-SQL 概述

此语言为Microsoft公司设计开发的结构化查询语言,是对SQL的扩展,具备标准SQL的主要特点,该语言可以实现图形界面能够完成的所有功能!

1、注释

代码中不执行的部分,一般是对功能的讲解说明,以 -- 开头到结尾部分的行 ,处于不执行阶段,单行注释,以/**/ 包裹的文本块,一般多行注释使用

2、变量

局部变量:作用在程序内部,以@开头的名称,且必须以 declare定义后才可以使用

#定义
declare {@l_v1 data_type}[,...n]
#赋值
set @l_v1=expression
select {@l_v1=expression} [,...n]
#显示
print @l_v1
select @l_v1
declare @name varchar(8),@sex varchar(2),@age smallint
declare @address varchar(100) 
set @address='宣城'
select @address

全局变量:非用户定义,是服务器级别的,以@@开头

常用的全局变量

@@connections 返回最近一次启动SQL Server,尝试连接的次数
@@error    返回最后执行SQL 语句的错误代码
@@rowcount    返回上次语句影响的行数
@@servername    返回允许SQL Server本地服务器的名称
@@version    返回SQL Server当前安装的日期、版本和处理器类型
@@language    返回SQL Server服务器的语言

3、运算符

算数运算符、赋值运算符、位运算符、比较运算符、逻辑运算符、字符串串联运算符

二、 T-SQL语句

1、DML
        数据操作语言:查询、插入、删除、更新

select
insert
delete
update

2、DDL
        数据定义语言:定义结构和数据关系等

create
alter
drop

3、DCL
        数据控制语言:数据完整性和存储控制

grant
revoke
deny
Alter 扩展:

在修改Sql Server表结构时,常用到Alter语句,把一些常用的alter语句列举如下

1:向表中添加字段

Alter table [表名] add [列名] 类型

2:  删除字段

Alter table [表名]  drop column [列名]

3:  修改表中字段类型 (可以修改列的类型,是否为空)

Alter table [表名] alter column [列名] 类型

4:添加主键

Alter table [表名] add constraint [ 约束名] primary key( [列名])

5:添加唯一约束

Alter table [表名] add constraint [ 约束名] unique([列名])

6:添加表中某列的默认值

Alter table [表名] add constraint [约束名] default(默认值) for [列名]

7:添加约束

Alter table [表名] add constraint [约束名] check (内容)

8:添加外键约束

Alter table [表名] add constraint [约束名]  foreign key(列名) referencese 另一表名(列名)

9:删除约束

Alter table [表名] drop constraint [约束名]

10:重命名表

exec sp_rename '[原表名]','[新表名]'

11:重命名列名

exec sp_rename '[表名].[列名]','[表名].[新列名]'

删除主键,以及主键上的索引

alter table table_name drop constraint clusteredName


三、流程控制

1、流程控制关键字

        declare : 声明变量
        begin...end:定义语句块
        berak  :退出while循环
        continue  :重新开始循环
        goto label  : 从label之后的语句处继续进行处理
        if...else   : 双分支判断
        case...when...then...end :多分支判断
        return  :退出
        waitfor :等待延迟
        while  :循环
        print :输出


2、语法格式

begin
    {
    select、insert、update...
    }
end
if xxx
    xxx
     
     
if xxx
    xxx
else xxx
    xxx
     
case  xxx
when  xxx  then  xxx
...
when  xxx  then  xxx
else xxx
end
while xxx
    xxx
    [bread]
    xxx
    [continue]



问题追踪

线上SQLServer数据库的CPU被打爆了,紧急情况下,分析了数据库阻塞、连接分布、最耗CPU的TOP10 SQL、查询SQL并行度配置、查询SQL 重编译的原因等等

整理了一些常用的SQL

1. 查询数据库阻塞

SELECT * FROM  sys.sysprocesses WHERE blocked<>0 

查询结果中,重点看Blocked这一列,先找出最多的SID,然后循环找出Root的阻塞根源SID

查询阻塞根源Session的SQL

DBCC Inputbuffer(sid)

2. 查询SQL连接分布

SELECT Hostname FROM  sys.sysprocesses WHERE hostname<>''

3. 查询最消耗CPU的SQL Top10   

select top(10) st.text as Query, qs.total_worker_time, qs.execution_count from
sys.dm_exec_query_stats as qs CROSS Apply sys.dm_exec_sql_text(qs.sql_handle) AS st
order by qs.total_worker_time desc

4. 查看SQLServer并行度

SELECT value_in_use  FROM sys.configurations WHERE name = 'max degree of parallelism'

并行度如果设置为1,To suppress parallel plan generation, set max degree of parallelism to 1

将阻止并行编译生成SQL执行计划,最大并行度设置为1

设置策略和具体设置方法,请参考:https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/configure-the-max-degree-of-parallelism-server-configuration-option?view=sql-server-2017

USE DatabaseName ; 
GO  
EXEC sp_configure 'show advanced options', 1; 
GO 
RECONFIGURE WITH OVERRIDE; 
GO 
EXEC sp_configure 'max degree of parallelism', 16; 
GO 
RECONFIGURE WITH OVERRIDE; 
GO

5. 查询SQL Server Recompilation Reasons

select dxmv.name, dxmv.map_key,dxmv.map_value from
sys.dm_xe_map_values as dxmv where dxmv.name='statement_recompile_cause' order by dxmv.map_key

6. 将SQL Trace文件存入一张表,做聚合分析(CPU、IO、执行时间等)

SELECT * INTO TabSQL
FROM fn_trace_gettable('C:\Users\***\Desktop\Trace\sql05trace20180606-业务.trc', default);
GO

对上述表数据进行聚合分析最耗时的SQL

 select  top 100    
        replace(replace(replace(  substring(Textdata,1,6600) ,char(10),' '),char(13),' ') ,char(9),' ')  as '名称',
        --substring(Textdata,1,6600)  as old,
       count(*) as '数量',
       sum(duration/1000) as '总执行时间ms',
       avg(duration/1000) as '平均执行时间ms',
       avg(cpu) as '平均CPU时间ms',
       avg(reads) as '平均读次数',
       avg(writes) as '平均写次数', LoginName
from TabSQL   t
group by   replace(replace(replace(  substring(Textdata,1,6600) ,char(10),' '),char(13),' ') ,char(9),' ') , LoginName
order by sum(duration) desc

最耗IO的SQL

select  TOP 100 replace(replace(replace(  substring(Textdata,1,6600) ,char(10),' '),char(13),' ') ,char(9),' ') as '名称' ,LoginName,
       count(*) as '数量',
       sum(duration/1000) as '总执行时间ms',
       avg(duration/1000) as '平均执行时间ms',
       sum(cpu) as '总CPU时间ms',
       avg(cpu) as '平均CPU时间ms',
       sum(reads) as '总读次数',
       avg(reads) as '平均读次数',
       avg(writes) as '平均写次数'
from TabSQL
group by replace(replace(replace(  substring(Textdata,1,6600) ,char(10),' '),char(13),' ') ,char(9),' ')  ,LoginName
order by  sum(reads) desc

最耗CPU的SQL

SELECT TOP 100 replace(replace(replace(  substring(Textdata,1,6600) ,char(10),' '),char(13),' ') ,char(9),' ')  as '名称',LoginName,
       count(*) as '数量',
       sum(duration/1000) as '总执行时间ms',
       avg(duration/1000) as '平均执行时间ms',
       sum(cpu) as '总CPU时间',
       avg(cpu) as '平均CPU时间',
       avg(reads) as '平均读次数',
       avg(writes) as '平均写次数'
from TabSQL
group by replace(replace(replace(  substring(Textdata,1,6600) ,char(10),' '),char(13),' ') ,char(9),' ')   ,LoginName
order by avg(cpu) desc

 


http://www.virplus.com/thread-1357.htm
转载请注明:3月前 于 Virplus.com 发表

推荐阅读
最新回复 (0)

    ( 登录 ) 后,可以发表评论!

    返回