利用虚拟硬盘(把内存当作硬盘)来提高数据库的效率 续

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: 续 上一篇引起了大家的讨论,看着讨论我是比较晕的,这也怪我没有说清楚,所以再补一个续把问题说清楚吧。   笔记本配置 CPU:Core 2 7250 2.0G 内存:4G,其中2G设置成了虚拟硬盘,虚拟硬盘的软件:Ramdisk。

上一篇引起了大家的讨论,看着讨论我是比较晕的,这也怪我没有说清楚,所以再补一个续把问题说清楚吧。

 

笔记本配置
CPU:Core 2 7250 2.0G
内存:4G,其中2G设置成了虚拟硬盘,虚拟硬盘的软件:Ramdisk。读取:5.5G,写入:3.5G。
硬盘:160G,平均读取:70M/s。写入:不详,估计没有读取快。

(内存的读取速度是硬盘的读取速度的785倍。)

 这里是我的笔记本的测试:http://www.cnblogs.com/jyk/archive/2009/05/10/1453551.html

 

软件:SQL Server 2000,asp.net2.0

 

SQL Server 2000 里面有几个重要的数据库,master、model、msdb、tempdb,这里主要想说的是tempdb数据库,这里有一个MSND的介绍。

 

目的:提高SQL Server 2000显示数据时的速度。

 

想法:把tempdb 放在虚拟硬盘(即内存)里面,利用内存的读写速度远远大于硬盘的优势,提高速度。

 

事件的经过:

    上周三,一开始的想法是想要把客户的数据库直接放在虚拟硬盘里面测试一下速度,也就是对比一下看看能够提高多少性能,如果性能能够提高很多的话,那么在考虑一下保证数据的安全性,也就是说在意外发生的时候,保证数据不能丢失。

    我是想先看看性能到底能够提高多少,如果提高的多的话才有应用价值,如果提高微弱,那就一点价值都没有了。于是我利用SQL Server 2000自带的northwnd,把里面的Products表里面的数据copy到了250万条以便于测试。然后再把数据库文件复制成两份,一份放在物理硬盘里面,附加到数据库里,叫做northwnd_Disk;另一份放在虚拟硬盘(即内存)里面,附加到数据库里,叫做northwnd_Ram。好了两份数据库准备好了,下面开始测试。

    我先测试了一下能够利用索引的情况,使用Max的分页算法,按照ProductID(主键,聚集索引)排序。两个数据库都没有超时,northwnd_Ram可以提高8倍左右的效率,基本还可以。

    能够利用索引自然是好,但是好多情况是不能利用索引的呀,那么再不能利用索引的情况下,虚拟硬盘能够带来多少的性能提升呢?于是我又做了第二个实验。

 

    不能利用索引的情况,还是用那两个数据库,这回按照 order by  ProductName, ProductID的条件来分页,采用颠倒Top的分页算法(注意这里并不是想要讨论分页算法的效率问题,而是要看看虚拟硬盘的效率)。

    这回我就傻眼了,两个数据库,第一页倒是都显示出来了,但是第500页,第1000页都是超时?数据库文件放在了物理硬盘里面超时了,这我还可以理解,硬盘读写速度慢呀。但是我明明把另一份数据库文件放在了虚拟硬盘(内存)里面了呀,怎么他也超时了?!文件放在内存里面都读不过来?这也太不可思议了吧!我检查了代码,有检查了数据库文件的设置,没有弄错呀。正在疑惑呢,突然发现硬盘灯在狂闪不止,都到了常亮的程度了,但是这时候我明明是在做northwnd_Ram(虚拟硬盘)的测试呀,这个时候为什么要读写硬盘呢?难道是灵异事件?代码和数据库的设置绝对没有错误,问题出在哪里呢?

    我突然想到了一个事情,在我上大学学习数据结构的时候,老师讲解排序算法时说过,在对几百条数据进行排序的时候,排序算法好写,把数据都写到内存里面排序就可以了,但是如果数据达到几万条,几百万条的时候,要如何来写排序算法呢?难道要把几百万条数据都读到内存里面?对呀,在2000年的时候,内存可不像现在是以G为单位的,那时候才128M吧 ,服务器的内存也到不了多少,估计微软施舍不能占用太多的内存,而是把一些数据写到了硬盘里面,这样我就想到了Tempdb数据库,如果能够把Tempdb放在虚拟硬盘里面,那么速度是不是可以提升一些呢?当时就笨了,没有想到更改数据库文件的路径地方法,后来在周五的时候才找到了一个方法。测试了一下,效果明显,于是才引出了那篇帖子。

   

    当时是很兴奋的,因为即使是northwnd_Disk(数据库文件放到了物理硬盘里),按照order by ProductName, ProductID都没有超时,这个意义就很大了。原先还想把客户的数据库放在虚拟硬盘(我当然知道这么做是很危险地)里呢,现在不用了,只需要把Tempdb放在虚拟硬盘里就可以提升很大的效率,这不就不用担心库户的数据的丢失问题了吗。而且在重启计算机(或者重启SQL服务)的时候,即使没有了tempdb.mdf文件,SQL服务也会重新建立一份文件(可惜不能建立文件夹),是不是很方便。速度也快了,数据也安全,除了tempdb.mdf文件的体积不能太大,几乎没有缺点了。

    对于32位的操作系统,最大只能识别4G的内存,这样留给Tempdb的空间确实不是太多。我现在的一个客户,20多人使用,Tempdb的空间只有8M,可能是我不使用临时表的原因吧,至少对于我来说,我觉得我是完全可以把Tempdb放在虚拟硬盘里面的,我打算今天下午就试一下。

Ps:

1、我怀疑,在有的时候(比如排序),SQL 会对Tempdb进行很频繁的读写操作

2、至于如果把客户的数据库放在了虚拟硬盘里面,如何才能保证数据的安全的问题,我也是想过的。最稳妥的方式就是,大家有过做数据库读写分离的吧,就是一个数据库专门负责数据的读取,叫做A数据库,另一个负责写入,叫做B数据库。然后把这个负责读取的A数据库文件放在虚拟硬盘里面,这样速度不就快了吗?而且A数据库的数据完全是从另B数据库里面订阅多来的,B数据库可是放在物理硬盘里面的,这样就不用担心数据丢失的问题了。

这个方案还行吧。

3、SSD
在百科里面查了一下,固态硬盘的存储介质分为两种,一种是采用闪存(FLASH芯片)作为存储介质,另外一种是采用DRAM作为存储介质。

数据存储速度:从PConline评测室的评测数据来看,固态硬盘相对传统硬盘性能提升2倍多。
价格:目前市场上80G Intel固态硬盘,价格为4000元左右。而这个价钱足够买几个容量为1TB的传统硬盘了。

详细内容:
http://baike.baidu.com/view/723957.html?tp=1_11  

 

 


 

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
5月前
|
Oracle 关系型数据库 Linux
解决在linux服务器上部署定时自动查找cpu,内存,磁盘使用量,并将查询结果写入数据库的脚本,只能手动运行实现插库操作
问题描述:将脚本名命名为mortior.sh(以下简称mo),手动执行脚本后查询数据库,表中有相应的信息,放入自动执行队列中,脚本被执行,但是查询数据库,并没有新增数据。
43 0
|
27天前
|
监控 关系型数据库 数据库
OceanBase数据库常见问题之增加内存依旧报内存不足如何解决
OceanBase 是一款由阿里巴巴集团研发的企业级分布式关系型数据库,它具有高可用、高性能、可水平扩展等特点。以下是OceanBase 数据库使用过程中可能遇到的一些常见问题及其解答的汇总,以帮助用户更好地理解和使用这款数据库产品。
|
4月前
|
NoSQL 安全 Java
基于内存的分布式NoSQL数据库Redis(六)AOF设计
基于内存的分布式NoSQL数据库Redis(六)AOF设计
166 0
|
4月前
|
存储 分布式计算 NoSQL
基于内存的分布式NoSQL数据库Redis(五)数据存储与RDB设计
基于内存的分布式NoSQL数据库Redis(五)数据存储与RDB设计
153 0
|
4月前
|
分布式计算 NoSQL Java
基于内存的分布式NoSQL数据库Redis(四)Jedis:使用方式
基于内存的分布式NoSQL数据库Redis(四)Jedis:使用方式
183 0
|
4月前
|
存储 NoSQL Redis
基于内存的分布式NoSQL数据库Redis(三)常用命令
基于内存的分布式NoSQL数据库Redis(三)常用命令
180 1
|
4月前
|
存储 NoSQL Java
基于内存的分布式NoSQL数据库Redis(二)数据结构与通用命令
基于内存的分布式NoSQL数据库Redis(二)数据结构与通用命令
183 0
|
4月前
|
存储 NoSQL 关系型数据库
基于内存的分布式NoSQL数据库Redis(一)介绍与安装
基于内存的分布式NoSQL数据库Redis(一)介绍与安装
173 0
|
4月前
|
运维 Linux
Linux 查询 OS、CPU、内存、硬盘信息
Linux 查询 OS、CPU、内存、硬盘信息
90 0