如何查看磁盘I/O操作信息

SET STATISTICS IO ON 命令是一个 使 SQL Server 显示有关由 Transact-SQL 语句生成的磁盘活动量的信息。

我们在分析索引性能的时候,会非常有用。

启用了这个属性后,我们在执行 SQL 语句后,会收到类似如下的信息,这有利于我们分析SQL的性能:

(3999 row(s) affected)
表 'ChargeCL'。扫描计数 1,逻辑读取 9547 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

其中的 lob 逻辑读取、lob 物理读取、lob 预读 这三个指标是 读取 text、ntext、image 或大值类型 (varchar(max)、nvarchar(max)、varbinary(max)) 时的指标。
而 逻辑读取、物理读取、预读 是对普通数据页的读取。

测试中,释放缓存的一些方法

尤其查询语句性能测试时,数据是否被缓存,这是测试中一个重要点。下面几个命令帮助我们清除缓存。方便测试。

清除缓存有关的命令:
SQL 2000里面除了dbcc unpintable好像就没有了   而且这个操作也不会立即释放表内存Buffer
(DBCC   UNPINTABLE   does   not   cause   the   table   to   be   immediately   flushed   from   the   data   cache.   It   specifies   that   all   of   the   pages   for   the   table   in   the   buffer   cache   can   be   flushed   if   space   is   needed   to   read   in   a   new   page   from   disk.)

SQL 2005/2008让DBA能够更自由的对SQL所占用的内存空间做处理   如:
CHECKPOINT 将当前数据库的全部脏页写入磁盘。“脏页”是已输入缓存区高速缓存且已修改但尚未写入磁盘的数据页。CHECKPOINT 可创建一个检查点,在该点保证全部脏页都已写入磁盘,从而在以后的恢复过程中节省时间。

DBCC   DROPCLEANBUFFERS  
从缓冲池中删除所有清除缓冲区。

DBCC   FREEPROCCACHE   从过程缓存中删除所有元素。

DBCC FREESYSTEMCACHE 从所有缓存中释放所有未使用的缓存条目。SQL Server 2005 数据库引擎会事先在后台清理未使用的缓存条目,以使内存可用于当前条目。但是,可以使用此命令从所有缓存中手动删除未使用的条目。

另外还可以 sp_cursor_list 查看全部游标  
DBCC   OPENTRAN查看数据库打开事务状态等  

比如:查看索引的深度SQL 脚本如下:

select INDEXPROPERTY (OBJECT_ID('ChargeHeap'),'ChargeHeap_NCInd','IndexDepth')
其中的 'ChargeHeap' 为我们要查看索引所在的表名,'ChargeHeap_NCInd' 为所要查看的索引名,'IndexDepth' 为所要查看的索引属性。
更多属性请参看下面页面的参数说明:
http://technet.microsoft.com/zh-cn/library/ms187729.aspx
或者我们在 SQL Server Management Studio 中选中我们要查看的索引,然后在右键菜单中查看索引的属性。其中 Fragmentation 标签页会有很多我们对
这个索引感兴趣的内容.