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

推荐订阅源

Martin Fowler
Martin Fowler
J
Java Code Geeks
博客园 - 【当耐特】
宝玉的分享
宝玉的分享
腾讯CDC
D
DataBreaches.Net
Microsoft Azure Blog
Microsoft Azure Blog
Engineering at Meta
Engineering at Meta
V
V2EX
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
Jina AI
Jina AI
GbyAI
GbyAI
大猫的无限游戏
大猫的无限游戏
A
About on SuperTechFans
酷 壳 – CoolShell
酷 壳 – CoolShell
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
U
Unit 42
B
Blog
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium

博客园 - 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 次。