检查索引碎片的结果:

CREATE DATABASE test_shrinkUSE test_shrinkCREATE TABLE show_extent(a INT,b NVARCHAR(3900))DECLARE @i INT
SET @i=1
WHILE @i<=100BEGININSERT INTO show_extent VALUES(1,REPLICATE(N'a',3900))INSERT INTO show_extent VALUES(2,REPLICATE(N'b',3900))INSERT INTO show_extent VALUES(3,REPLICATE(N'c',3900))INSERT INTO show_extent VALUES(4,REPLICATE(N'd',3900))INSERT INTO show_extent VALUES(5,REPLICATE(N'e',3900))INSERT INTO show_extent VALUES(6,REPLICATE(N'f',3900))INSERT INTO show_extent VALUES(7,REPLICATE(N'g',3900))INSERT INTO show_extent VALUES(8,REPLICATE(N'h',3900))SET @i=@i+1END--检查索引碎片DBCC SHOWCONTIG('show_extent')--删除a列不是5的数据DELETE dbo.show_extent WHERE a<>5--显示数据文件  64kbEXEC sys.sp_spaceused @objname = N'show_extent' -- nvarchar(776)DBCC SHOWCONTIG('show_extent')--查看数据库的文件和日志大小EXEC sys.sp_helpfile--fileid为1 收缩到40MBDBCC SHRINKFILE(2,40)--建立索引释放没有使用的区CREATE CLUSTERED INDEX show_I ON dbo.show_extent(a)--检查索引碎片DBCC SHOWCONTIG('show_extent')--收缩文件DBCC SHRINKFILE(1,1)--查看数据库的占用空间和未分配的空间EXEC sys.sp_spaceused @objname = N'show_extent'SELECT * FROM dbo.show_extent--找出每个区的对象理论上区数目和实际数目,然后重建大对象类型的表USE test_shrink--建立临时表CREATE TABLE #extentinfo([file_id] SMALLINT,page_id INT,pg_alloc INT,ext_size INT,obj_id INT,index_id INT,partition_number INT,partition_id BIGINT,iam_chain_type VARCHAR(50),pfs_bytes VARBINARY(10))CREATE PROCEDURE import_extentinfoasDBCC extentinfoDBCC extentinfo('test_shrink')INSERT INTO #extentinfo EXEC import_extentinfoSELECT [file_id],obj_id,index_id,partition_id,ext_size,'actual extent count'=COUNT(*),'actual page count'=SUM(pg_alloc),'possible extent count'=ceiling(SUM(pg_alloc)*1.0/ext_size),'possible extents/actual extents'=(ceiling(SUM(pg_alloc)*1.00/ext_size)*100.00)/COUNT(*)
FROM #extentinfoGROUP BY file_id,obj_id,index_id,partition_id,ext_sizeHAVING COUNT(*) -ceiling(SUM(pg_alloc)*1.0/ext_size)>0ORDER BY partition_id,obj_id,index_id,file_id--SQL2005以后有一个动态管理视图sys.dm_exec_query_stats,返回缓存查询计划的性能统计信息--SQL会统计从上次SQL启动以来,一共做了多少次logical读写,多少次physical读,还记录执行所用的   CPU时间总量--按照物理读的页面数排序 前50名SELECT TOP 50qs.total_physical_reads,qs.execution_count,qs.total_physical_reads/qs.execution_count AS [avg I/O],--截取字符串SUBSTRING(qt.text,qs.statement_start_offset/2,(CASE WHEN qs.statement_end_offset=-1THEN LEN(CONVERT(NVARCHAR(max),qt.text))*2ELSE qs.statement_end_offset END -qs.statement_start_offset)/2) AS query_text,qt.dbid,dbname=DB_NAME(qt.dbid),qt.objectid,qs.sql_handle,qs.plan_handlefrom sys.dm_exec_query_stats qsCROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qtORDER BY qs.total_physical_reads DESC--SQL Trace里面有一个reads字段,记录了某条语句完成过程中一共做了多少次读的动作,找到read最多的语句--每个SQL Trace里有成千成万的语句,可以使用fn_trace_gettable 像一张表一样把trace文件里的记录查询出来--可以用他将记录转入到SQLSERVER里,然后用查询语句进行统计分析。SELECT * INTO #SAMPLEFROM sys.fn_trace_gettable('C:\Users\Administrator\Desktop\1.trc',DEFAULT)WHERE EventClass IN(10,12)select * from sys.sysprocesses--运行下面DBCC命令释放SQL内存缓存DBCC freesessioncacheDBCC freeproccache

处理过后的索引碎片:

--SQL2005以后有一个动态管理视图sys.dm_exec_query_stats,返回缓存查询计划的性能统计信息
 --SQL会统计从上次SQL启动以来,一共做了多少次logical读写,多少次physical读,还记录执行所用的   CPU时间总量
  --按照物理读的页面数排序 前50名

  SELECT TOP 50qs.total_physical_reads,qs.execution_count,qs.total_physical_reads/qs.execution_count AS [avg I/O],--截取字符串SUBSTRING(qt.text,qs.statement_start_offset/2,(CASE WHEN qs.statement_end_offset=-1THEN LEN(CONVERT(NVARCHAR(max),qt.text))*2ELSE qs.statement_end_offset END -qs.statement_start_offset)/2) AS query_text,qt.dbid,dbname=DB_NAME(qt.dbid),qt.objectid,qs.sql_handle,qs.plan_handlefrom sys.dm_exec_query_stats qsCROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qtORDER BY qs.total_physical_reads DESC

--找出使用内存比较多的语句,简化他们,调整应用程序行为,减少工作负荷
--检查动态管理视图,了解每个查询资源信号量的状态信息。(SQL里默认有两个查询资源信号量,分别处理复杂度不一样
 --的查询,这样的设计有助于防止几个超大的查询把整个SQL资源用尽,连一些很简单的查询都不能响应的现象发生)

 --检查语句:SELECT CONVERT(VARCHAR(30),GETDATE(),121) AS runtime,resource_semaphore_id,target_memory_kb,total_memory_kb,available_memory_kb,granted_memory_kb,used_memory_kb,grantee_count,waiter_count,timeout_error_countfrom sys.dm_exec_query_resource_semaphores

--resource_semaphore_id:资源信号量的非唯一ID,0表示常规资源信号量,1表示小型查询资源信号量
 --target_memory_kb:该资源信号量能够授予使用的内存目标,也就是当前的使用上限
 --total_memory_kb:资源信号量现在所持有的总内存,是可用内存和被授予内存的和。如果系统内存不足或频繁强制缩小内存,该值可以
 --大于target_memory_kb值,但意味着这个资源信号量有内存压力
 --available_memory_kb:可用于新授予的内存
 --granted_memory_kb:授予的总内存
--used_memory_kb:授予内存中实际使用的部分
 --grantee_count:内存授予得到满足的活动查询数
 --waiter_count:等待内存授予得到满足的查询数,如果不为0,意味着内存压力存在
 --timeout_error_count:自服务器启动以来的超时错误总数,对于小型查询资源信号量,该值为null

--检查sys.dm_exec_query_memory_grants,返回已经获得内存授予的查询的有关信息,或依然在等待内存授予的查询的
 --有关信息。无须等待就获得内存授予的查询将不会出现在此视图中。所以对一个没有内存压力的SQL,这个视图应该是空的

SELECT GETDATE() AS runtime,session_id,scheduler_id,dop,request_time,grant_time,requested_memory_kb,granted_memory_kb,used_memory_kb,timeout_sec,query_cost,resource_semaphore_id,wait_order,is_next_candidate,wait_time_ms,REPLACE(REPLACE(CAST(s2.text AS VARCHAR(4000)),CHAR(10),''),CHAR(13),'') AS sql_statementFROM sys.dm_exec_query_memory_grants
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2

--返回控制

--session_id:正在运行查询的会话ID(spid)
 --scheduler_id:正在计划查询的SQL Processor调度的ID
--dop:查询的并行度
 --request_time:查询请求内存授予的日期和时间
 --grant_time:向查询授予内存的日期和时间。如果尚未授予内存,则此值为null
 --requested_memory_kb:请求的内存总量
 --granted_memory_kb:实际授予的内存总量。如果尚未授予内存,该值为null。在典型情况下,该值应该与requested_memory_kb相同
 --创建索引时,除了初始授予的内存外,服务器还允许增加按需分配的内存
 --used_memory_kb:此刻使用的物理内存
--query_cost:估计查询开销
 --timeout_sec:查询放弃内存授予请求前的超时时间
 --resource_semaphore_id:查询正在等待的资源信号量的非唯一ID
 --wait_order:等待查询在指定的queue_id中的顺序,如果其他查询获得内存授予或超时,则给定查询的该值可以更改。如果已授予内存,则为null
--is_next_candidate:下一个内存授予的候选对象:1:是  0:否 null:已授予内存
 --wait_time_ms:等待时间。如果已经授予内存,则为null
--plan_handle:查询计划的标志符。使用sys.dm_exec_query_plan可提取实际的xml计划
 --sql_handle:查询的TSQL文本标志符。查询中使用他链接sys.dm_exec_sql_text获取实际的TSQL文本

--SQL2005 DMV SQL启动以来累计使用CPU资源最多的语句 前50名

 SELECThighest_cpu_queries.*,highest_cpu_queries.total_worker_time,DB_NAME(q.dbid)  AS dbname,q.[text] AS qtextfrom(SELECT TOP 50 qs.* from sys.dm_exec_query_stats qs ORDER BY qs.total_worker_time DESC) AS highest_cpu_queriesCROSS APPLY sys.dm_exec_sql_text(plan_handle) AS q
ORDER BY highest_cpu_queries.total_worker_time DESC

--找到最经常做重编译的存储过程

 SELECT TOP 25sql_text.text AS sqltext,sql_handle AS sqlhandle,plan_generation_num AS plangenerationnum,execution_count AS execcount,DB_NAME(dbid) AS dbname,objectid AS objectidfrom sys.dm_exec_query_stats aCROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sql_textWHERE plan_generation_num>1ORDER BY plan_generation_num DESC

--返回经常执行的100条语句

 --返回最经常运行的100条语句SELECT TOP 100cp.cacheobjtype,cp.usecounts,cp.size_in_bytes,qs.statement_start_offset,qs.statement_end_offset,qt.dbid,qt.objectid,SUBSTRING(qt.text,qs.statement_start_offset/2,CASE WHEN qs.statement_end_offset=-1 THEN LEN(CONVERT(NVARCHAR(max),qt.text))*2 ELSE qs.statement_end_offset END -qs.statement_start_offset/2)AS statementfrom sys.dm_exec_query_stats qsCROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qtINNER JOIN sys.dm_exec_cached_plans AS cp ON qs.plan_handle=cp.plan_handleWHERE cp.plan_handle=qs.plan_handleAND cp.usecounts>4ORDER BY dbid,usecounts DESC

转载于:https://www.cnblogs.com/sunliyuan/p/6567911.html

SqlServerDBCC SHRINKFILE不起作用相关推荐

  1. 分享一下我研究SQLSERVER以来收集的笔记

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 分享一下 ...

  2. SQL 笔记 By 华仔

    -------------------------------------读书笔记------------------------------- 笔记1-徐 最常用的几种备份方法 笔记2-徐 收缩数据 ...

  3. mysql备份时候事务日志_SQLSERVER备份事务日志的作用

    SQLSERVER备份事务日志的作用 事务日志备份有以下3种类型 (1)纯日志备份:仅包含相隔一段时间的事务日志记录,而不包含任何大容量更改 (2)大容量操作日志备份.包括由大容量操作更改的日志和数据 ...

  4. 经典MySQL语句大全和常用SQL语句命令的作用。

    转载自 http://blog.csdn.net/suyu_yuan/article/details/51784893 转自网络: 经典MSSQL语句大全和常用SQL语句命令的作用  下列语句部分是M ...

  5. Object的finalize()方法的作用是否与C++的析构函数作用相同

    Object的finalize()方法的作用是否与C++的析构函数作用相同 public class Finalization {private static Finalization finaliz ...

  6. 浅显易懂 Makefile 入门 (02)— 普通变量和自动变量定义、使用($@、$^、$< 作用)、变量覆盖 override、变量的来源 origin

    1. 变量的定义 Makefile 文件中定义变量的基本语法如下: 变量的名称=值列表 变量的名称可以由大小写字母.阿拉伯数字和下划线构成.等号左右的空白符没有明确的要求,因为在执行 make 的时候 ...

  7. 【B/S实践】解决:vs中修改样式表后不起作用的问题

    缓存,有好多,cpu和内存之间的三级缓存,浏览器内的缓存! 缓存是因为速率不对等,通过缓存来加速内容的显示! 今天我在敲牛腩的时候遇到一个问题,找了半小时,才发现是缓存导致的问题! 试着运行aspx文 ...

  8. 卷积神经网络之卷积计算、作用与思想 深度学习

    博客:blog.shinelee.me | 博客园 | CSDN 卷积运算与相关运算 在计算机视觉领域,卷积核.滤波器通常为较小尺寸的矩阵,比如3×33×3.从这个角度看,多层卷积是在进行逐层映射,整 ...

  9. 机器学习——标准化/归一化的目的、作用和场景

    对每个特征进行归一化处理,使得每个特征的取值缩放到0~1之间.这样做有两个好处: 模型训练更高效. 特征前的权重大小可代表该变量对预测结果的贡献度(因为每个特征值本身的范围相同). (一)归一化的作用 ...

最新文章

  1. Hadoop学习笔记之三 数据流向
  2. ubuntu_subversion_mantis_testlink使用ldap认证
  3. visual studio intergration
  4. EL之Bagging(DTR):利用Bagging对回归问题(实数值评分预测)建模(调2参)
  5. BZOJ-2705-Longge的游戏-SDOI2012-欧拉函数
  6. mybatis错误之配置文件属性配置问题
  7. redis 缓存 key常量命名规则
  8. python批量操作Linux服务器脚本,ssh密码登录(执行命令、上传、下载)(一)...
  9. python 天气雷达_python结合API实现即时天气信息
  10. 输入输出数组元素的函数重载_C ++函数重载| 查找输出程序| 套装3
  11. java mysql 回滚_Java 中对数据库操作时的 回滚
  12. android app功能测试,androidAPP功能测试要点幻灯片.pptx
  13. JavaScript 01
  14. jQuery 学习笔记之二 (jQuery代码风格)
  15. databinding include 控件空指针_Android Jetpack系列——细说DataBinding
  16. vue 四级联动 (修改版)
  17. .Net Core 使用Swagger,且使用自定义UI(Knife4jUI)
  18. Policy Center > Permissions and APIs that Access Sensitive Information
  19. ABAQUS 求解应力强度因子
  20. DNS配置异常无法上网(明明有网,但是网页打不开了?)

热门文章

  1. Nacos 入门教程
  2. java二柱子_japonensisjava导航
  3. 以太坊Sharding FAQ
  4. 分享一个slide:花式自然语言处理
  5. Tutorial on Variational AutoEncoders
  6. JZOJ 5623. 【NOI2018模拟4.2】program
  7. java函数式编程_Java 函数式编程和 lambda 表达式详解
  8. 生成对抗网络gan原理_生成对抗网络(GAN)的半监督学习
  9. mysql数据库建设网站,网站设计与建设-MySQL数据库【松柏书屋】
  10. 计算机控制系统三种信号,计算机控制技术模拟试题3