SQL DMO のDMV
这两天对公司的一个项目进行优化,看着长长的SQL,脑袋不经有些大,一时间竟然不知道如何下手,一顿手忙脚乱后,小有成效,响应速度快了不少,同样的条件下可以做到秒级响应。闲暇时间想了想,还是得做点功课,最起码也要把原来丢下的东西捡回来,再有这样的事情不至于抓瞎。这样就有了今天的这篇文章,先挤一点,以后慢慢补充。
Microsoft SQL Server 在2005以后提供了一些工具来监控数据库,这对我们进行数据库方面的调优提供了极大的便利,在今天之前有的我也只是听说过,缺乏实际的操作。下面我们就来了解一下DMO和他的孩子DMV[动态管理视图]。
首先我们先要看下DMO都能做些什么?[网上抄来的]:
- 执行相关的DMO(sys.dm_exec_*):提供与执行相关的统计信息。可以用于监控与缓存查询、执行计划、活动连接/会话和带有执行计划的当前运行的查询的相关统计信息。
- 索引相关的DMO(sys.dm_db_index_*和sys.dm_db_missing_*):提供关于索引的统计信息。这些DMO可以用于监控和分析因为丢失索引、无效索引而导致的性能问题,也可以用来检查索引的使用情况。
- 数据库相关DMO(sys.dm_db_*):提供数据库相关统计信息。可以用于监控和分析数据库的性能问题,分析数据库相关文件的统计信息、会话统计信息和任务统计信息。
- I/O相关DMO(sys.dm_io_*):提供I/O操作的统计信息,用于监控和分析SQLServer的I/O性能问题。
- OS相关DMO(sys.dm_os_*):提供关于sqlos内部统计信息,用于监控和分析服务器配置问题。
- 事务相关的DMO(sys.dm_trn_*):提供事务相关的统计信息,用于监控和分析长时间运行的事务的锁定、死锁问题。
看了网上的描述使我对DMO更好奇了,你呢,有木有?我们先来看些实际的代码吧:
- DMV获取当前正在执行的查询信息
SELECT DB_NAME(R.database_id) AS DatabaseName ,
S.original_login_name AS LoginName ,
S.host_name AS ClientMachine ,
S.program_name AS ApplicationName ,
R.start_time AS RequestStartTime ,
ST.text AS SQLQuery ,
QP.query_plan AS ExecutionPlan ,
R.cpu_time AS CPUTime ,
R.total_elapsed_time AS TotalTimeElapsed ,
R.open_transaction_count AS TotalTransactionOpened ,
R.reads ,
R.logical_reads ,
R.writes AS TotalWrites
FROM sys.dm_exec_requests AS R
INNER JOIN sys.dm_exec_sessions AS S ON R.session_id = S.session_id
CROSS APPLY sys.dm_exec_sql_text(R.sql_handle) AS ST
CROSS APPLY sys.dm_exec_query_plan(R.plan_handle) AS QP
ORDER BY TotalTimeElapsed DESC
GO
- 通过DMV获取的索引缺失的表和需要建立索引的列
SELECT MID.statement AS ObjectName ,
MID.equality_columns ,
MID.inequality_columns ,
MID.included_columns ,
MIGS.avg_user_impact AS ExpectedPerformanceImprovement ,
( MIGS.user_seeks + MIGS.user_scans ) * MIGS.avg_total_user_cost
* MIGS.avg_user_impact AS PossibleImprovement
FROM sys.dm_db_missing_index_details AS MID
INNER JOIN sys.dm_db_missing_index_groups AS MIG ON MID.index_handle = MIG.index_handle
INNER JOIN sys.dm_db_missing_index_group_stats AS MIGS ON MIG.index_group_handle = MIGS.group_handle
GO
查询结果: ObjectName equality_columns inequality_columns included_columns ExpectedPerformanceImprovement PossibleImprovement
SalesOrderDetail NULL [ModifiedDate] 需要查询的列 88.23 97.8503286933556
SalesOrderDetail [ProductID] NULL 需要查询的列 99.52 110.371355679052
通过上面的查询结果,我们可以很清楚的看到,SQL Server推荐的需要建立所以的表和列,更为友好的是,它还给出了建立索引后能带来多少的效率提升。那要怎么来建立索引呢?描述比较绕口,我抄来以为网友的说明,呵呵:
若要将由 sys.dm_db_missing_index_details 返回的信息转换为 CREATE INDEX 语句,则相等列应该放置在不等列前面,并且应该一起创建索引键。应该使用 INCLUDE 子句将包含列添加到
CREATE INDEX 语句。若要确定相等列的有效顺序,请基于其选择性排序:首先列出选择性最强的列(列列表中的最左侧)。也就是这样:
create index [索引名称] on [表](equality_columns,inequality_columns) include(included_columns)
是不是很方便?当然效果好不好,不能只看广告,要看实际效果哦。
需要注意的是sys.dm_db_missing_index_details记录了当前数据库下所有的missing index的信息,他针对的是SQLSERVER从启动以来所有运行的语句,而不是针对某一个查询。并且sys.dm_db_missing_index_details返回的信息会不是持久化的。
今天先写到这里,我们还可以通过DMV查看tempDB的情况以及查看查看磁盘IO的情况,这些将在以后进行,今天只是我的一个备忘记录。
SQL DMO のDMV的更多相关文章
- 通过sql的DMV查看数据库使用状态
--数据库隔离级别 读未提交 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; --查找每次执行时引发I/O最多的前10位的查询 total_logi ...
- Sql Server CPU 性能排查及优化的相关 Sql
Sql Server CPU 性能排查及优化的相关 Sql 语句,非常好的SQL语句,记录于此: --Begin Cpu 分析优化的相关 Sql --使用DMV来分析SQL Server启动以来累计使 ...
- sql server中的孤立用户
此问题出现在数据库的移值上.移值后,数据库的登陆名和数据库用户名孤立,原数据中,用建立的用户名密码登陆可以访问数据库,但是移值后就不能访问了.而且如果您尝试向该登录帐户授予数据库访问权限,则会因该用户 ...
- 【数据库】Sql Server 2008完全卸载方法(其他版本类似)
本文介绍如何卸载 Microsoft SQL Server 2008的方法.当您按照本文中的步骤时,您还准备系统以便可以重新安装 SQL Server 2008版本 一. SQL2008卸载. ...
- SQL Server统计信息:问题和解决方式
在网上看到一篇介绍使用统计信息出现的问题已经解决方式,感觉写的很全面. 在自己看的过程中顺便做了翻译. 因为本人英文水平有限,可能中间有一些错误. 假设有哪里有问题欢迎大家批评指正.建议英文好的直接看 ...
- 如何识别和解决SQL Server中的热闩锁(PAGELATCH_EX)
描述 在SQL Server中,内部闩锁体系结构可在SQL操作期间保护内存.通过页面上的读写操作,可以确保内存结构的一致性.从根本上讲,它具有两个类:缓冲区锁存器和非缓冲区锁存器,它们在SQL Eng ...
- SharePoint 计时器作业
本文将介绍 SharePoint 2010 的默认计时器作业,即我们通常说的Timer服务.计时器作业在 SharePoint Server 的特定 Windows 服务中运行.计时器作业还是执行定时 ...
- SQL Server 2012新增和改动DMV
SQL Server 2012新增和改动DMV 系统视图 说明 sys.dm_exec_query_stats (Transact-SQL) 添加了四列,以帮助排除长时间运行的查询所存在的问题. 可 ...
- SQL Server在哪里存放DMV的数据?
我被反复问到的一个问题是,通过各个DMV和DMF返回的数据,SQL Server在哪里存放? 很多人认为这类数据会存放在像mater这样的系统数据库里.但事实并非如此.各个系统数据库(master和m ...
随机推荐
- SQL Server 全文搜索 配置、查询初体验
原文:SQL Server 全文搜索 配置.查询初体验 一.使用SQL Server全文搜索配置 要使用SQL Server的全文搜索服务,需要进行如下配置. 1.开启全文搜索服务: 2.开启数据库的 ...
- android-wear开发之定义布局
Android Wear使用跟手机一样的布局技术,但需要对特定情况进行设计.不要把手机的UI直接照搬过来.更多可查看:Android Wear Design Guidelines 当创建android ...
- Android NetWorkUtil
package com.android.hcframe.netdisc.util; import java.io.BufferedReader; import java.io.InputStreamR ...
- LNMP搭建(CentOS 6.3+Nginx 1.2.0+PHP 5.3.15(fpm)+ MySQL 5.5.35)
Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 ...
- 【转】 linux iio子系统
原文网址:http://blog.csdn.net/tsy20100200/article/details/47101661 最近由于工作的需要,接触了Linux iio子系统,对于这个目录其实以前是 ...
- 数据结构,可并堆(左偏树):COGS [APIO2012] 派遣
796. [APIO2012] 派遣 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿. 在这个帮派里,有一名忍者被称之为Master.除了Master以外,每名忍者都有且 ...
- 暴力求解——最大乘积 Maximum Product,UVa 11059
最大乘积 Maximum Product 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/B 解题思路 ...
- SRM 400(1-250pt, 1-500pt)
DIV1 250pt 题意:给定一个正整数n(n <= 10^18),如果n = p^q,其中p为质数,q > 1,则返回vector<int> ans = {p, q},否则 ...
- 个人整理--Java编码规范
编码规范对于开发人员来说是非常重要的,有以下几个原因: 1.一个软件的生命周期中,80%的花费在于维护 2.几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护 3.编码规范可以改善软件 ...
- 在eclipse下编译hadoop2.0源码
Hadoop是一个分布式系统基础架构,由apache基金会维护并更新.官网地址: http://hadoop.apache.org/ Hadoop项目主要包括以下4个模块: Hadoop Common ...