WEB开发网
开发学院数据库MSSQL Server SQL Server执行部分语句的内存代价 阅读

SQL Server执行部分语句的内存代价

 2007-08-03 09:46:46 来源:WEB开发网   
核心提示: 此时,可以开始进行我们的试验了,SQL Server执行部分语句的内存代价(2),为了准确观察每一次SQL语句变化情况,在执行第一条SQL语句以前,由于是全表读取,表明P_User表全部数据所占用的数据页数也正是4,我们首先清空SQL Server所占用的数据内存:CHECKPOINTGO

此时,可以开始进行我们的试验了。为了准确观察每一次SQL语句变化情况,在执行第一条SQL语句以前,我们首先清空SQL Server所占用的数据内存:

CHECKPOINT
GO
DBCC DROPCLEANBUFFERS

这将清空SQL Server所占用的数据缓冲区(此语句在生产服务器上慎用,因为将导致一段时间内后续的SQL语句执行变慢)。

测试1:在没有索引的表上执行SQL语句1.1  执行全表选取或者低选择性选取

Select * From P_User

从SQL执行计划可以看到,由于此时表中没有任何索引,因此将产生Table Scan。而IO统计结果如下:

(1000 row(s) affected)

表'P_User'。扫描计数1,逻辑读取4 次,物理读取4 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。

我们看一下数据库内存中的情况。

首先查询到我们所操作database的database_id:

Select database_id From sys.databases Where name='TestGDB'

然后使用该database_id从表中查看内存情况:

SELECT * FROM sys.dm_os_buffer_descriptors bd
WHERE database_id=5
order by allocation_unit_id,page_id

得到结果如下:

得到的结果中可以看到,除了必要的管理页(一个PFS_Page和一个IAM_Page)外,内存中总共出现了4个Data_Page页。这和刚才IO统计中看到的结果:逻辑读为4,物理读为4相同。由于是全表读取,表明P_User表全部数据所占用的数据页数也正是4,将这4个数据页的row_count数加起来也可以验证其总数据行=1000。

上一页  1 2 3 4 5 6  下一页

Tags:SQL Server 执行

编辑录入:coldstar [复制链接] [打 印]
赞助商链接