利用虚拟硬盘(把内存当作硬盘)来提高数据库的效率(目前只针对SQL Server 2000)可以提高很多

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: 上一篇:让你的笔记本更快一点——我的笔记本的性能测试和虚拟硬盘(把内存当成硬盘)的使用感觉         虚拟硬盘:就是把内存当作硬盘来用,比如有2G的内存,那么可以拿出来1G的内存当作硬盘来用。

 

上一篇:让你的笔记本更快一点——我的笔记本的性能测试和虚拟硬盘(把内存当成硬盘)的使用感觉

 

      虚拟硬盘:就是把内存当作硬盘来用,比如有2G的内存,那么可以拿出来1G的内存当作硬盘来用。

      自从知道了“虚拟硬盘”这个东东,我就一直在想如何才能把这个虚拟硬盘发挥到极致,上一篇也写了一些简单的应用,当然提高的效率并不多,并不是很理想。我最想提高的是提高数据库的读取速度,也就是提高分页效率。一开始是想把数据库文件放到虚拟硬盘里面,这样读取速度不就快乐吗?但是当我把一个250万条记录的数据库放在了虚拟硬盘上做测试后,发现效果并不理想。

      250万条记录,利用主键排序(聚集索引),可以提高几倍的效率,但是如果换成一般的字段(nvarchar类型的,没有设置索引),查看第1000页的数据的时候居然超时了?!这个也太。。。还是“内存”了吗?无意间看了一眼硬盘指示灯,这个灯在显示数据的时候居然一直在亮!不会把,从虚拟硬盘里面读数据,硬盘灯为什么会亮呀?看来SQL Server2000在大量数据排序的时候会往硬盘里面写数据。查看了一下发现SQL Server2000会往Tempdb数据库里面写数据,居然写了100多M的数据,看来这是照成超时的原因了。

      那么能不能把Tempdb换到虚拟硬盘里面呢?一开始用了一个笨着,竟然把SQL Server2000给弄死了,害得我重装了一遍。后来才发现,有现成的SQL语句可以使用。好了现在可以改Tempdb的位置了,再来测试一遍。这回效果比较理想,翻到第5000页,花费了11秒多,没有超时。

 

 

USE  master
Go
ALTER   DATABASE  tempdb MODIFY  FILE  (NAME  =  tempdev, FILENAME  =   ' t:\data\tempdb.mdf ' )
Go
ALTER   DATABASE  tempdb MODIFY  FILE  (NAME  =  templog, FILENAME  =   ' t:\data\templog.ldf ' )
Go

 

      Tempdb数据库里并不会存放重要数据,丢掉了也不会有什么大问题,只需要在重启计算机后把文件拷贝过去就可以了,代价不大,效率却可以提高很多,有减少了硬盘的读写次数,保护了硬盘嘛,应该是一个很好的方法。

 

      测试的具体情况:

      SQL Server 2000 ,Northwind数据库里的Products表,表里面有2523136条记录数,  每页15条记录,共168210页。

      ProductID 字段是主键,聚集索引,其他字段都没有索引。

      1、使用颠倒Top的分页算法,按照ProductName,ProductID来排序。一开始比较慢,需要20多秒(需要把数据读取到Tempdb),后来就快了一些,11秒左右。就是说翻到了第1000页、第 5000页只需要11秒左右,硬盘灯也没怎么亮。第10000页,12秒。第十万页,22秒。(注意:这是250万条记录,按照nvarchar字段排序的结果

      第99999页使用的SQL语句:

 

  select   *   from  Products  where  productid  in  
   ( 
select   top   15  productid  from  
     ( 
select   top   1499985  productname,productid  from  Products 
         
order   by  productname,productid )  as  t 
      
order   by  t.productname  desc ,t.productid  desc  )

order   by  productname,productid 

 

 

      2、使用Max分页算法,按照主键(ProductID)字段排序。这个就非常快了,10000页以内都是0毫秒到32毫秒,第五万页是200毫秒左右,第十万页是300多毫秒,第十六万页(快到最后了)是600毫秒左右。可以用秒杀来形容了。

      第1600000页使用的SQL语句:

 

select   top   15   *   from  Products 
where  productid >=  
  (
SELECT   max (productid )  from  
     (
select   top   2399986  productid  from  Products  order   by  productid )  as  t )

 
order   by  productid 

 

    2.1、同样的条件下,如果Tempdb放在物理硬盘里面的话,速度慢很多。下面是测试数据。(使用Max分页算法,按照主键(ProductID)字段排序)

    

页号 时间:毫秒
第1页 156
第2页 15
第10000页 1390
第10001页 47
第140000页 8391
第140001页 546
第160000页 1766
第160001页 600
   

     注意:这里并不是想说分页算法如何如何的快,而是想说,对于SQL Server2000来说,如果把Tempdb数据库的文件(tempdb.mdf)放在虚拟硬盘里面,可以提高很大的效率!至于SQL Server 2005还没有测试。

 

 

相关实践学习
使用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
相关文章
|
7天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
45 10
|
24天前
|
SQL 存储 BI
【软件设计师备考 专题 】数据库语言(SQL)
【软件设计师备考 专题 】数据库语言(SQL)
89 0
|
17天前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
15 0
|
7天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
62 6
|
3天前
|
SQL 数据库
数据库SQL语言实战(二)
数据库SQL语言实战(二)
|
7天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
11天前
|
SQL 安全 Java
SQL server 2017安装教程
SQL server 2017安装教程
14 1
|
15天前
|
数据库 SQL 索引
什么是数据库 SQL Execution Plan
什么是数据库 SQL Execution Plan
10 0
|
22天前
|
监控 关系型数据库 数据库
OceanBase数据库常见问题之增加内存依旧报内存不足如何解决
OceanBase 是一款由阿里巴巴集团研发的企业级分布式关系型数据库,它具有高可用、高性能、可水平扩展等特点。以下是OceanBase 数据库使用过程中可能遇到的一些常见问题及其解答的汇总,以帮助用户更好地理解和使用这款数据库产品。
|
24天前
|
SQL 存储 Python
Microsoft SQL Server 编写汉字转拼音函数
Microsoft SQL Server 编写汉字转拼音函数

热门文章

最新文章