1.查看执行时间和cpu占用时间

set statistics time on

select * from dbo.Product

set statistics time off

打开你查询之后的消息里面就能看到啦。

2.查看查询对I/0的操作情况

set statistics io on

select * from dbo.Product

set statistics io off

执行之后

扫描计数:索引或表扫描次数

逻辑读取:数据缓存中读取的页数

物理读取:从磁盘中读取的页数

预读:查询过程中,从磁盘放入缓存的页数

lob逻辑读取:从数据缓存中读取,image,text,ntext或大型数据的页数

lob物理读取:从磁盘中读取,image,text,ntext或大型数据的页数

lob预读:查询过程中,从磁盘放入缓存的image,text,ntext或大型数据的页数

如果物理读取次数和预读次说比较多,可以使用索引进行优化。

如果你不想使用sql语句命令来查看这些内容,方法也是有的,哥教你更简单的。

查询--->>查询选项--->>高级

被红圈套上的2个选上,去掉sql语句中的set statistics io/time on/off 试试效果。哦也,你成功啦。。

3.查看执行计划

选中查询语句,点击

然后看消息里面,会出现下面的图例

首先我这个例子的语句太过简单,你整个复杂的,包涵啊。

分析:鼠标放在图标上会显示此步骤执行的详细内容,每个表下面都显示一个开销百分比,分析站百分比多的的一块,可以根据重新设计数据结构,或这重写sql语句,来对此进行优化。如果存在扫描表,或者扫描聚集索引,这表示在当前查询中你的索引是不合适的,是没有起到作用的,那么你就要修改完善优化你的索引,具体怎么做,你可以根据我上一篇文章中的sql优化利器--数据库引擎优化顾问对索引进行分析优化。

方法2.

SET SHOWPLAN_ALL ON;

4.sql server的优化建议

Microsoft SQL Server 2008 >> 工具  >>  SQL Server Profiler。

然后选择文件  >>  新建  >>  跟踪打开一个连接窗口,选择将要跟踪的服务器实例然后连接。打开如下“跟踪属性”对话框。

 如果有许多跟踪,可以提供一个跟踪名称来帮助在以后进行分类。不同的跟踪模板可帮助建立用于不同目的的跟踪。

 打开跟踪属性窗口后,单击“事件选择”选项卡,为跟踪提供更详细的定义。

4、使用多个文件

在大多数情况下,小型的数据库并不需要创建多个文件来存放数据。但是随着数据的增长,单个文件的弊端就会出现。

- 首先,使用多个文件分布到不同的磁盘分区(多个硬盘)能够几大提高IO性能。

- 其次,多个文件对于数据比较多的数据库来说,备份和恢复都会方便。

- 但是,多文件需要占用更多的磁盘空间,因为每个文件中都有自己的一套B树组织方式和自己的增长空间。当然也有自己的碎片。

- 总体来说,多个文件带来的优点是远远大于弊端的。

5. 维护语句

--日志收缩为1M

USE [数据库名];

ALTER DATABASE [数据库名] SET RECOVERY SIMPLE;

DBCC SHRINKFILE ([数据库名_log], 1);

ALTER DATABASE [数据库名] SET RECOVERY FULL;

6. 维护计划

点击工具栏,拖动到空白区域,如果有上一个任务,可以拖动箭头指向新添加的任务

6.1. 执行T-SQL语句

USE [Sogal.YHZS];

-- 压缩日志到1MB

ALTER DATABASE [Sogal.YHZS] SET RECOVERY SIMPLE;

DBCC SHRINKFILE ([Sogal.YHZS_log], 1);

ALTER DATABASE [Sogal.YHZS] SET RECOVERY FULL;

-- 清除错误日志

EXEC sp_cycle_errorlog;

6.2.

备份数据库

“设置备份压缩” >> “压缩备份”,会比普通备份再RAR的压缩率低一些,不过可以自动进行,测试过普通压缩16g使用后未2G

网上资料如下可参考

6.3.

清除历史记录

PS:

需要开启Sql sever Agent(sql server代理)的服务,并设置为开机自动启动

问题2:在 sys.database_files 中找不到数据库 'XXX' 的文件 '[XXX_3_log]'。该文件不存在或者已被删除。

分析:一定是从某个原始库backup然后restore过来的.这种情况下XXX的日志的逻辑文件名不一定叫'XXX_3_log',不信,你可以

方法1:select type_desc,name from sys.master_files WHERE database_id=db_id('XXX');

方法2:use XXX

select * from sys.database_files

可以看'name'列的输出,然后收缩那个名称里的日志文件就可以了.

一般restore后,如果库名和以前不一样

解决方法:

方法1:改为正确的日志逻辑名称

方法2:最好改下数据库和日志的2个逻辑文件名,保持后新明称一致.

alter database xhtest modify file(name=xhtest_old, newname=xhtest) 

alter database xhtest modify file(name=xhtest_old_log, newname=xhtest_log) 

6. Log文件夹中的文件过多

C:\Program Files (x86)\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL

7. 死锁

-- 查找死锁的进程

select   

request_session_id spid,  

OBJECT_NAME(resource_associated_entity_id) tableName   

from   

sys.dm_tran_locks  

where   

resource_type='OBJECT'

-- 干掉死锁的进程

kill 53

-- 查询该会话正在执行的Sql语句

DBCC INPUTBUFFER (53)

资料:https://www.cnblogs.com/OpenCoder/p/5557514.html

-- SQL Server Profiler查看死锁

Microsoft SQL Server 2008 >> 工具  >>  SQL Server Profiler

>> 文件 >> 模板 >> 导入模板 >> 点击开始监控

Ctrl + F 查找“deadlock”找到死锁记录

8. 查询耗时较长的语句

SELECT  creation_time  N'语句编译时间'

,last_execution_time  N'上次执行时间'

,total_physical_reads N'物理读取总次数'

,total_logical_reads/execution_count N'每次逻辑读次数'

,total_logical_reads  N'逻辑读取总次数'

,total_logical_writes N'逻辑写入总次数'

, execution_count  N'执行次数'

, total_worker_time/1000 N'所用的CPU总时间ms'

, total_elapsed_time/1000  N'总花费时间ms'

, (total_elapsed_time / execution_count)/1000  N'平均时间ms'

,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,

((CASE statement_end_offset

WHEN -1 THEN DATALENGTH(st.text)

ELSE qs.statement_end_offset END

- qs.statement_start_offset)/2) + 1) N'执行语句'

FROM sys.dm_exec_query_stats AS qs

CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st

where SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,

((CASE statement_end_offset

WHEN -1 THEN DATALENGTH(st.text)

ELSE qs.statement_end_offset END

- qs.statement_start_offset)/2) + 1) not like '%fetch%'

AND last_execution_time <'20170519 17:35'

ORDER BY  total_elapsed_time / execution_count DESC;

Sql Server 优化技巧的更多相关文章

  1. SQL Server优化技巧——如何避免查询条件OR引起的性能问题

    之前写过一篇博客"SQL SERVER中关于OR会导致索引扫描或全表扫描的浅析",里面介绍了OR可能会引起全表扫描或索引扫描的各种案例,以及如何优化查询条件中含有OR的SQL语句的 ...

  2. SQL Server优化技巧——如何避免查询条件OR引起的性能问题

    原文:SQL Server优化技巧--如何避免查询条件OR引起的性能问题 之前写过一篇博客"SQL SERVER中关于OR会导致索引扫描或全表扫描的浅析",里面介绍了OR可能会引起 ...

  3. SQL Server优化技巧之SQL Server中的"MapReduce"

    日常的OLTP环境中,有时会涉及到一些统计方面的SQL语句,这些语句可能消耗巨大,进而影响整体运行环境,这里我为大家介绍如何利用SQL Server中的”类MapReduce”方式,在特定的统计情形中 ...

  4. 深入SQL Server优化【推荐】

    深入sql server优化,MSSQL优化,T-SQL优化,查询优化 十步优化SQL Server 中的数据访问故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性 ...

  5. SQL Server 优化器特性导致的内存授予相关BUG

    我们有时会遇到一些坑,要不填平,要不绕过.这里为大家介绍一个相关SQL Server优化器方面的特性导致内存授予的相关BUG,及相关解决方式,也顺便回答下邹建同学的相关疑问. 问题描述 一个简单的查询 ...

  6. SQL Server优化器特性-隐式谓词

    我们都知道,一条SQL语句提交给优化器会产生相应的执行计划然后执行输出结果,但他的执行计划是如何产生的呢?这可能是关系型数据库最复杂的部分了.这里我为大家介绍一个有关SQL Server优化器的特性- ...

  7. [SQL Server优化]善用系统监视器,确定系统瓶颈

    原文:[SQL Server优化]善用系统监视器,确定系统瓶颈 来自: http://hi.baidu.com/solorez/blog/item/f82038fa0e71b78d9e51468c.h ...

  8. SQL Server 优化存储过程的七种方法

    原文:SQL Server 优化存储过程的七种方法 优化存储过程有很多种方法,下面介绍最常用的7种. 1.使用SET NOCOUNT ON选项 我们使用SELECT语句时,除了返回对应的结果集外,还会 ...

  9. sql server 小技巧(8) visual studio 2013里使用Sql server compact 4.0及发布问题处理

    1. 安装 Microsoft SQL Server Compact 4.0  https://www.microsoft.com/zh-cn/download/confirmation.aspx?i ...

随机推荐

  1. Linux 读书笔记 三 (第二章)

      一.学习目标 1. 理解二进制在计算机中的重要地位 2. 掌握布尔运算在C语言中的应用 3. 理解有符号整数.无符号整数.浮点数的表示 4. 理解补码的重要性 5. 能避免C语言中溢出,数据类型转 ...

  2. object-oriented first work

    前言:在星期三的第一次面向对象程序设计课,遇见我们的栋哥,初次见面,发现老师的幽默.....下课后,就给我们一道作业题目... 作业要求:Create a program that asks for ...

  3. 【Coursera】因子分析模型

    一.协方差矩阵 协方差矩阵为对称矩阵. 在高斯分布中,方差越大,数据分布越分散,方差越小发,数据分布越集中. 在协方差矩阵中,假设矩阵为二维,若第二维的方差大于第一维的方差,则在图像上的体现就是:高斯 ...

  4. 团队作业8——测试与发布(Beta阶段)之展示博客

    展示博客 1. 团队成员的简介和个人博客地址,团队的源码仓库地址. a.陈福鹏 擅长技术:java.web等网站方面技术: 博客:http://www.cnblogs.com/royalchen/b. ...

  5. iOS- CALayer绘图,如何绘制渐变效果图

    1.渐变效果 —> 色彩空间 首先:自定义一个渐变视图,在自定义视图中重写drawRect #import "ViewController.h" #import " ...

  6. Effective Modern C++翻译(6)-条款5:auto比显示的类型声明要更好

        在概念上说,auto关键字和它看起来一样简单,但是事实上,它要更微妙一些的.使用auto会让你在声明变量时省略掉类型,同时也会防止了手动类型声明带来的正确性和性能上的困扰:虽然按照语言预先定义 ...

  7. 学术诚信与职业道德——《构建之法》P384~391读后感

    程序本身没有伦理和职业道德, 但是程序员和软件企业要有,因为程序员明白伦理道德的存在. 对于刚刚经历被不负责队友抛下的经历,对此很有感触,软件工程师除了遵守任务做事,也要考虑道德上.责任上的事情. 就 ...

  8. 关于SVM数学细节逻辑的个人理解(一) :得到最大间隔分类器的基本形式

    网上,书上有很多的关于SVM的资料,但是我觉得一些细节的地方并没有讲的太清楚,下面是我对SVM的整个数学原理的推导过程,其中逻辑的推导力求每一步都是有理有据.现在整理出来和大家讨论分享. 因为目前我的 ...

  9. springmvc上传文件报错org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.web.multipart.MultipartFile]

    在用springmvc+mybatis进行项目开发时,上传文件抛异常... org.springframework.beans.BeanInstantiationException: Could no ...

  10. vue 组件 子向父亲通信用自定义方法用事件监听

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>T ...