惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
M
MIT News - Artificial intelligence
D
Docker
S
SegmentFault 最新的问题
B
Blog
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
腾讯CDC
阮一峰的网络日志
阮一峰的网络日志
U
Unit 42
C
Check Point Blog
GbyAI
GbyAI
美团技术团队
Recent Announcements
Recent Announcements
F
Fortinet All Blogs
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog

博客园 - ideas

从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值。 移除google搜索结果中烦人的URL跟踪跳转 关于分页存储过程的优化【让数据库按我们的意思执行查询计划】 中国娱乐网招聘asp.net软件工程师 几个有用的DMV查询 【转】Iframe高度自适应(兼容IE/Firefox、同域/跨域) 【转】MAQETTA: 基于HTML5的开源可视化界面设计工具 高效能人士的七个习惯 有《基于行块分布函数的通用网页正文抽取》想到的 MongoDB 学习笔记—MapReduce MongoDB系列文章推荐 【转】linux screen 命令详解 - [linux] 关于添加索引视图后的数据存储区别 索引视图 添加计算列,并创建索引 浏览器的加载与页面性能优化【转】 IO瓶颈 内存瓶颈 Windows Live Writer 插件 Source Code Plug-in
DiscuzNT首页版块提取优化
ideas · 2011-05-18 · via 博客园 - ideas

  最近论坛更换为DiscuzNT,在对数据库监测过程发现[dnt_getindexforumlist]这个存储过程的lob逻辑读取次数过大,且等待时间也相对较长。查看存储过程源码发现,其实这个存储过程很简单,也就是dbo.dnt_forums和dbo.dnt_forumfields两个表关联查询。主要原因出现在dbo.dnt_forumfields这个表上,该表共有text和ntext类型字段10个。我们知道text是做为LOB对象来存储的,在实际的存储中,数据记录页上存储的是该字段的一个指针,真正的数据是存储在LOB数据页上。因此查询每一条记录时,都需要10次的IO来读取该字段的实际值。

  解决方案很简单,只需要把text换为varchar(max),把ntext换为nvarchar(max)既可。为什么这样就能减少IO次数,提高性能呢?因为,varchar(max)类型的实际长度如果在8000字节以下,这个值将被做为普通的varchar类型来处理,只有在长度超赤8000时,才被做为LOB对象来存储。

  我们论坛的版块有290个,优化之后IO次数立马见分晓。

  优化之前的IO信息:

表 'dnt_forumfields'。扫描计数 1,逻辑读取 77 次,物理读取 0 次,预读 0 次,lob 逻辑读取 5801 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'dnt_forums'。扫描计数 2,逻辑读取 298 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

  优化之后的IO信息:

表 'dnt_forumfields'。扫描计数 1,逻辑读取 2 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'dnt_forums'。扫描计数 2,逻辑读取 298 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。