把TEMPDB放到内存里

guguda2008 2010-12-13 01:49:56
加精
博客地址
http://blog.csdn.net/guguda2008/archive/2010/12/13/6073049.aspx
------------------------------------烤鸭专用分割线-----------------------------------------------
TEMPDB是MSSQL重要的系统数据库(废话,所有系统数据库都很重要),数据库日常所有计算几乎都依赖于对于TEMPDB库的读写。很多优化策略上也都有这么一句:“把TEMPDB库放到读写速度最快的硬盘上”。但我昨晚睡不着觉的时候突然想起来似乎没有硬盘会比内存更快的,于是今天就找大叔问了一嘴,在得到肯定的回复后实践了一下,成功后重启了服务器和机器,数据库还是正常的。性能方面我的机器上没法测,但估计肯定是有好处的。下面就说一下具体步骤:

1.下载内存虚拟硬盘工具

我用的是VSuite Ramdisk,可以把未识别的内存划成硬盘分区 ,如果有别的替代工具也可以,总之就是找个工具把内存映射成硬盘,以存放TEMPDB的数据和日志文件。

提供一个下载地址:华军下载

2.把内存分区

可以先开启未识别的内存


下图是我的设置


3.把TEMPDB放到刚分出的Z盘根目录下

这个必须要用语句,因为TEMPDB的文件和日志名字是固定的,所以直接用我写的语句改改盘符和目标文件名就行:

ALTER DATABASE TEMPDB MODIFY FILE(NAME=TEMPDEV,FILENAME='Z:\TEMPDEV.MDF')
ALTER DATABASE TEMPDB MODIFY FILE(NAME=TEMPLOG,FILENAME='Z:\TEMPLOG.LDF')


建议再加两个文件到物理硬盘,防止TEMPDB爆掉

ALTER DATABASE TEMPDB ADD FILE(NAME=TEMPDEV2,FILENAME='D:\DATABASES\TEMPDEV2.MDF')
ALTER DATABASE TEMPDB ADD LOG FILE(NAME=TEMPLOG2,FILENAME='D:\DATABASES\TEMPLOG.LDF')


4.重启数据库,查询是否成功修改

SELECT NAME,TYPE_DESC,PHYSICAL_NAME FROM SYS.DATABASE_FILES
/*
tempdev ROWS Z:\TEMPDEV.MDF
templog LOG Z:\TEMPLOG.LDF
TEMPDEV2 ROWS D:\DATABASES\TEMPDEV2.MDF
TEMPLOG2 LOG D:\DATABASES\TEMPLOG2.LDF
*/
...全文
1778 114 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
114 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgn31 2010-12-27
  • 打赏
  • 举报
回复
正好用得着,顶个
glmstucn 2010-12-24
  • 打赏
  • 举报
回复
有条件测试一下!
yibey 2010-12-21
  • 打赏
  • 举报
回复
学习,但是目前对我来说还没啥用处
coleling 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 xman_78tom 的回复:]

与其把内存交给 tempdb,不如把内存交给数据库实例自动管理。现在,64 位的数据库系统完全可以充分利用大容量内存。

况且,在生产型的数据库上,所需的 tempdb 数据库的容量不是内存可以满足的。引入 tempdb 数据库的目的之一就是临时存储那些在内存中存储不下的中间数据。
[/Quote]

up, 正解
bobo628 2010-12-19
  • 打赏
  • 举报
回复
强大 啊
chengyiszl 2010-12-19
  • 打赏
  • 举报
回复
好好学习一下吧!
tt335799 2010-12-18
  • 打赏
  • 举报
回复
不是蛮懂
呼特李一号 2010-12-18
  • 打赏
  • 举报
回复
压力好大!
wwwzsim 2010-12-18
  • 打赏
  • 举报
回复
高手啊!学习了1
haitao 2010-12-17
  • 打赏
  • 举报
回复
[Quote=引用 93 楼 sz_haitao 的回复:]
这么牛X?!
还能找回os无法识别的内存。。。。。。。。
不知道主板无法识别的内存能否找回(一个联想pc,插了4G内存bios也只能认出3G,装了win2003企业版也只有3G)[/Quote]

也是不能。。。。。。。

另外,发现一个不如RamDiskGavotte的地方:VSuite Ramdisk无法修改已经建立的ramdisk的大小!
mf3665293 2010-12-17
  • 打赏
  • 举报
回复
我在(❤墙)丶刻下你的名。
michael__xia 2010-12-17
  • 打赏
  • 举报
回复
谢谢 分享!
q107770540 2010-12-16
  • 打赏
  • 举报
回复
[Quote=引用 91 楼 crayon_fayd 的回复:]

牛人,谢谢分享
[/Quote]
~
crayon_fayd 2010-12-16
  • 打赏
  • 举报
回复
牛人,谢谢分享
ithlcasu 2010-12-16
  • 打赏
  • 举报
回复
高手就是高手
lulubooboo 2010-12-16
  • 打赏
  • 举报
回复
强大
haitao 2010-12-16
  • 打赏
  • 举报
回复
[Quote=引用 89 楼 winner2050 的回复:]
VSuite Ramdisk 是威力最大的Ramdisk 软件,可惜楼主用的是免费版,没有动态内存分配功能。

我自己电脑用的是破解版,我的电脑是8G内存如果用普通的ramdisk软件分几G出来真不舍得,如果遇到需要使用虚拟机就很紧张了。

用了VSuite Ramdisk 动态分配内存,就分2G过去,它是用多少实际分配多少。

不影响虚拟机大量使用内存。
[/Quote]

这么牛X?!
还能找回os无法识别的内存。。。。。。。。
不知道主板无法识别的内存能否找回(一个联想pc,插了4G内存bios也只能认出3G,装了win2003企业版也只有3G)
maimang09 2010-12-15
  • 打赏
  • 举报
回复
………………………………………………
winner2050 2010-12-15
  • 打赏
  • 举报
回复
VSuite Ramdisk 是威力最大的Ramdisk 软件,可惜楼主用的是免费版,没有动态内存分配功能。

我自己电脑用的是破解版,我的电脑是8G内存如果用普通的ramdisk软件分几G出来真不舍得,如果遇到需要使用虚拟机就很紧张了。

用了VSuite Ramdisk 动态分配内存,就分2G过去,它是用多少实际分配多少。

不影响虚拟机大量使用内存。
guguda2008 2010-12-15
  • 打赏
  • 举报
回复
[Quote=引用 83 楼 sysuleiw 的回复:]

请教楼主,一个数据库可以有多个mdf文件的么?
我只知道可以建立文件组,但是文件组是1个mdf和多个ndf哦。。。
[/Quote]
文件的后缀名是可以改的
加载更多回复(70)
【赛迪网-IT技术报道】SQL Server数据库查询速度慢的原因有很多,常见的有以下几种:   1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)     2、I/O吞吐量小,形成了瓶颈效应。     3、没有创建计算列导致查询不优化。     4、内存不足     5、网络速度慢     6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)     7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)     8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。     9、返回了不必要的行和列     10、查询语句不好,没有优化 ●可以通过以下方法来优化查询 : 1、把数据、日志、索引放到不同的I/O设备上,增加读取速度,以前可以将Tempdb应放在RAID0上,SQL2000不在支持。数据量(尺寸)越大,提高I/O越重要。 2、纵向、横向分割表,减少表的尺寸(sp_spaceuse) 3、升级硬件 4、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0)。索引应该尽量小,使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一索引如性别字段。 5、提高网速。 6、扩大服务器的内存,Windows 2000和SQL server 2000能支持4-8G的内存。 配置虚拟内存:虚拟内存大小应基于计算机上并发运行的服务进行配置。运行 Microsoft SQL Server? 2000时,可考虑将虚拟内存大小设置为计算机中安装的物理内存的1.5倍。如果另外安装了全文检索功能,并打算运行Microsoft搜索服务以便执行全文索引和查询,可考虑:将虚拟内存大小配置为至少是计算机中安装的物理内存的3倍。将SQL Server max server memory服务器配置选项配置为物理内存的1.5倍(虚拟内存大小设置的一半)。 7、增加服务器CPU个数;但是必须 明白并行处理串行处理更需要资源例如内存。使用并行还是串行程是MsSQL自动评估选择的。单个任务分解成多个任务,就可以在处理器上运行。例如耽搁查询 的排序、连接、扫描和GROUP BY字句同时执行,SQL SERVER根据系统的负载情况决定最优的并行等级,复杂的需要消耗大量的CPU的查询最适合并行处理。但是更新操作UPDATE,INSERT, DELETE还不能并行处理。 8、如果是使用like进行查询的话,简单的使用index是不行的,但是全文索引,耗空间。 like ''a%'' 使用索引 like ''%a'' 不使用索引用 like ''%a%'' 查询时,查询耗时和字段值总长度成正比,所以不能用CHAR类型,而是VARCHAR。对于字段的值很长的建全文索引。 9、DB Server 和APPLication Server 分离;OLTP和OLAP分离 10、分布式分区视图可用于实现数据库服务器联合体。 联合体是一组分开管理的服务器,但它们相互协作分担系统的处理负荷。这种通过分区数据形成数据库服务器联合体的机制能够扩大一组服务器,以支持大型的多层 Web 站点的处理需要。有关更多信息,参见设计联合数据库服务器。(参照SQL帮助文件''分区视图'') a、在实现分区视图之前,必须先水平分区表 b、 在创建成员表后,在每个成员服务器上定义一个分布式分区视图,并且每个视图具有相同的名称。这样,引用分布式分区视图名的查询可以在任何一个成员服务器上 运行。系统操作如同每个成员服务器上都有一个原始表的复本一样,但其实每个服务器上只有一个成员表和一个分布式分区视图。数据的位置对应用程序是透明的。 11、重建索引 DBCC REINDEX ,DBCC INDEXDEFRAG,收缩数据和日志 DBCC SHRINKDB,DBCC SHRINKFILE. 设置自动收缩日志.对于大的数据库不要设置数据库自动增长,它会降低服务器的性能。 在T-sql的写法上有很大的讲究,下面列出常见的要点:首先,DBMS处理查询计划的过程是这样的:   1、 查询语句的词法、语法检查     2、 将语句提交给DBMS的查询优化器     3、 优化器做代数优化和存取路径的优化     4、 由预编译模块生成查询规划     5、 然后在合适的时间提交给系统处理执行     6、 最后将执行结果返回给用户。 其次,看一下SQL SERVER的数据存放的结构:一个页面的大小为8K(8060)字节,8个页面为一个盘区,按照B树存放。

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧