固态硬盘和机械硬盘的比较和SQLSERVER在两种硬盘上的性能差异 在看这篇文章之前可以先看一下下面的文章: SSD小白用户收货!SSD的误区如何解决 这样配会损失性能?实测6种特殊装机方式 听说固态硬盘是高富帅的 必备神器 ,本人为了提升工作效率和提高工作速
在看这篇文章之前可以先看一下下面的文章:
SSD小白用户收货!SSD的误区如何解决
这样配会损失性能?实测6种特殊装机方式
听说固态硬盘是高富帅的必备神器,本人为了提升工作效率和提高工作速度
这个月节衣缩食,终于也决定买了一块三星固态硬盘120G容量
这个固态硬盘拿在手里轻飘飘的, 好像里面什么东西都没有似的
废话少说,先上图
开机速度20秒左右
测试环境:Windows7,SQLSERVER2005个人开发者版 SP4
我这里用旧的硬盘希捷硬盘和新买的固态硬盘三星硬盘来比较
这次测试用到的测试软件:
ASSSDBenchmark_1.7_XiaZaiBa
http://files.cnblogs.com/lyhabc/ASSSDBenchmark_1.7_XiaZaiBa.zip
HDTune 5.0
http://files.cnblogs.com/lyhabc/HDTune5.0.rar
ATTO DiskBenchmark:
http://files.cnblogs.com/lyhabc/ATTODiskBenchmark%E6%B5%8B%E8%AF%95%E7%A1%AC%E7%9B%98%E8%AF%BB%E5%86%99.rar
由于这篇文章:SSD固态硬盘详解说首次安装不能用GHOST版Windows7来安装
那我只能上网下载装机版镜像,并刻录成光碟,经过一番折腾终于安装好操作系统和SQLSERVER了
网上有很多4KB对齐的文章,例如下面所说:
GHOST11.5版本之前的 Ghost 装 Win7 会导致已有对齐的分区不对齐
Ghost 能用吗?
能用,只是 Ghost 11.5 之前的版本会导致即使原有分区是对齐的,Ghost 后不对齐
11.5 及之后版本 只要镜像创建于对齐的分区,恢复后也是对齐的。如果你不清楚你所使用 Ghost 的版本请最好不要使用。
-------------------------------------------------------------------------------------------------
用鲁大师显示一下硬盘信息
希捷硬盘
三星硬盘
关于性能问题:
由于是Windows7的系统,那么我的笔记本电脑瓶颈就在SATA2.0接口上
AHCI模式、TRIM指令、4KB对齐这些条件都没有问题
至于4KB这个对齐参数是不是可以达到性能最佳这个要看您的固态硬盘的闪存颗粒用的是哪一种
最好咨询一下卖家或者硬盘厂商,由于本人是固态硬盘的小白,为了装好系统尽快上班工作就不研究
这个参数了,直接设置为4KB
说明一下:这篇文章的测试结果仅供参考!!
IOPS
IOPS (Input/Output Operations Per Second),即每秒进行读写(I/O)操作的次数,多用于数据库等场合,衡量随机访问的性能。
存储端(例如硬盘,磁盘阵列)的IOPS性能和主机端的IO是不同的,IOPS是指存储每秒可接受多少次主机发出的访问,
主机的一次IO需要多次访问存储才可以完成。
例如,主机写入一个最小的数据块,也要经过“发送写入请求、写入数据、收到写入确认”等三个步骤,也就是3个存储端访问。
百度百科:http://baike.baidu.com/link?url=ynaU0M9SQPMWLjudQnyK5WqNJvPuFR1RjKCgx0FiA7REqY9A7AR7IAkNaWeA5nhAruLTPS_OtM2qscG3zkZ_mq
4KB对齐是什么?
大家知道Windows是以扇区为读写单位的,一个扇区默认就是4096BYTE(4KB),8个512字节
您们可以看到下面的测试软件,多数以4KB为单位
而固态硬盘是以页为读写单位的,为了兼容机械硬盘,硬盘厂商做了一些设置使兼容机械硬盘,而这个设置就是4KB对齐
但是不同的固态硬盘内存颗粒,不一定就是4KB大小就可以对齐的
因为本人对固态硬盘还是小白,不过原理应该就是这个o(∩_∩)o
HDTune 5.0
HDTUNE只测试了读取忘记了测试写入,不好意思啊各位!
希捷硬盘
三星硬盘
ATTO Disk Benchmark
希捷硬盘
三星硬盘
AS SSD Benchmark
希捷硬盘
由于希捷硬盘测试到中途突然停止了,没有办法继续测试,AS SSD Benchmark这部分我们只测试三星硬盘
而且在下面文章中也提到:机械硬盘在AS SSD和CDM软件下测试意义不大。
参考文章:别低估成绩 和你解读8款硬盘检测软件
Seq:持续测试,AS SSD会先以16MB的尺寸为单位,持续向受测分区写入生成1个达到1GB大小的文件,
然后再以同样的单位尺寸读取这个,最后计算平均成绩而给出结果。测试一完毕,测试文件会立刻删除。
4K:随机单队列深度测试,测试软件会以512KB的单位尺寸生成1GB大小的测试文件,
然后在其地址范围(LBA)内进行随机4KB单位尺寸进行写入及读取测试,直到跑遍这个范围为止,最后同样计算平均成绩给出结果。
由于有生成步骤,本测试对硬盘会产生一共2GB的数据写入量。本测试完毕后,测试文件会暂时保留。
4K-64Thrd(64Thrd 64线程):随机64队列深度测试,软件则会生成64个16MB大小的测试文件(共计1GB),
然后同时以4KB的单位尺寸,同时在这64个文件中进行写入和读取测试,最后依然以平均成绩为结果。
本步骤也同样产生2GB的数据写入量。本测试一完毕,测试文件会立刻删除。
Acc.time(accurate精确的):数据存取时间测试,软件会以4KB为单位尺寸,随机读取全盘地址范围(LBA),
写入则以512B为单位尺寸,随机写入保留的1GB地址范围内,最后以平均成绩给出结果。
三星硬盘
数据库读写比较
先创建数据库和表,使用下面脚本,我们随便建立一个堆表
<span> 1</span> <span>--</span><span>测试脚本</span> <span> 2</span> <span>USE</span><span> master </span><span> 3</span> <span>GO</span> <span> 4</span> <span>CREATE</span> <span>DATABASE</span><span> testdisk </span><span> 5</span> <span>GO</span> <span> 6</span> <span>USE</span><span> testdisk </span><span> 7</span> <span>GO</span> <span> 8</span> <span>--</span><span>建立堆表</span> <span> 9</span> <span>CREATE</span> <span>TABLE</span> testdisktable(id <span>INT</span> ,NAME <span>VARCHAR</span>(<span>5000</span><span>)) </span><span>10</span> <span>GO</span>
希捷硬盘
测试插入数据(10000条记录)
<span> 1</span> <span>--</span><span>测试插入</span> <span> 2</span> <span>DBCC</span><span> DROPCLEANBUFFERS </span><span> 3</span> <span>DBCC</span><span> FREEPROCCACHE </span><span> 4</span> <span>DBCC</span> freesystemcache(<span>'</span><span>ALL</span><span>'</span><span>) </span><span> 5</span> <span>GO</span> <span> 6</span> <span>SELECT</span> <span>GETDATE</span><span>() </span><span> 7</span> <span>GO</span> <span> 8</span> <span>DECLARE</span> <span>@i</span> <span>INT</span> <span> 9</span> <span>SET</span> <span>@i</span> <span>=</span> <span>1</span> <span>10</span> <span>WHILE</span> ( <span>@i</span> <span> <span>10000</span><span> ) </span><span>11</span> <span>BEGIN</span> <span>12</span> <span>INSERT</span> <span>INTO</span> <span>[</span><span>dbo</span><span>]</span>.<span>[</span><span>testdisktable</span><span>]</span> ( <span>[</span><span>id</span><span>]</span>, <span>[</span><span>name</span><span>]</span><span> ) </span><span>13</span> <span>VALUES</span> ( <span>@i</span>, <span>REPLICATE</span>(<span>'</span><span>s</span><span>'</span>, <span>3000</span><span>) ) </span><span>14</span> <span>SET</span> <span>@i</span> <span>=</span> <span>@i</span> <span>+</span> <span>1</span> <span>15</span> <span>END</span> <span>16</span> <span>CHECKPOINT</span> <span>17</span> <span>SELECT</span> <span>GETDATE</span><span>() </span><span>18</span> <span>GO</span></span>
(22:44:35.540) - (22:44:17.583)=大概18秒
两个时刻相减大概18秒
测试读取数据(10000条记录)
<span> 1</span> <span>--</span><span>测试读取</span> <span> 2</span> <span>DBCC</span><span> DROPCLEANBUFFERS </span><span> 3</span> <span>DBCC</span><span> FREEPROCCACHE </span><span> 4</span> <span>DBCC</span> freesystemcache(<span>'</span><span>ALL</span><span>'</span><span>) </span><span> 5</span> <span>GO</span> <span> 6</span> <span>SET</span> <span>STATISTICS</span> IO <span>ON</span> <span> 7</span> <span>SET</span> <span>STATISTICS</span> TIME <span>ON</span> <span> 8</span> <span>GO</span> <span> 9</span> <span>SELECT</span> <span>*</span> <span>10</span> <span>FROM</span><span> testdisktable </span><span>11</span> <span>SET</span> <span>STATISTICS</span> IO <span>OFF</span> <span>12</span> <span>SET</span> <span>STATISTICS</span> TIME <span>OFF</span> <span>13</span> <span>GO</span>
<span> 1</span> <span>DBCC</span> 执行完毕。如果 <span>DBCC</span><span> 输出了错误信息,请与系统管理员联系。 </span><span> 2</span> <span>DBCC</span> 执行完毕。如果 <span>DBCC</span><span> 输出了错误信息,请与系统管理员联系。 </span><span> 3</span> <span>DBCC</span> 执行完毕。如果 <span>DBCC</span><span> 输出了错误信息,请与系统管理员联系。 </span><span> 4</span> <span>SQL Server 分析和编译时间: </span><span> 5</span> CPU 时间 <span>=</span> <span>0</span> 毫秒,占用时间 <span>=</span> <span>102</span><span> 毫秒。 </span><span> 6</span> <span> 7</span> (<span>9999</span><span> 行受影响) </span><span> 8</span> 表 <span>'</span><span>testdisktable</span><span>'</span>。扫描计数 <span>1</span>,逻辑读取 <span>5004</span> 次,物理读取 <span>0</span> 次,预读 <span>5004</span> 次,lob 逻辑读取 <span>0</span> 次,lob 物理读取 <span>0</span> 次,lob 预读 <span>0</span><span> 次。 </span><span> 9</span> <span>10</span> <span>SQL Server 执行时间: </span><span>11</span> CPU 时间 <span>=</span> <span>78</span> 毫秒,占用时间 <span>=</span> <span>1108</span><span> 毫秒。 </span><span>12</span> <span>13</span> <span>SQL Server 执行时间: </span><span>14</span> CPU 时间 <span>=</span> <span>0</span> 毫秒,占用时间 <span>=</span> <span>0</span> 毫秒。
Logical reads:包含该语句从内存数据缓冲区中访问的页数和从物理磁盘读取的页数
---------------------------------------------------------------------------------------------------------
三星硬盘
测试插入数据(10000条记录)
<span> 1</span> <span>--</span><span>测试插入</span> <span> 2</span> <span>DBCC</span><span> DROPCLEANBUFFERS </span><span> 3</span> <span>DBCC</span><span> FREEPROCCACHE </span><span> 4</span> <span>DBCC</span> freesystemcache(<span>'</span><span>ALL</span><span>'</span><span>) </span><span> 5</span> <span>GO</span> <span> 6</span> <span>SELECT</span> <span>GETDATE</span><span>() </span><span> 7</span> <span>GO</span> <span> 8</span> <span>DECLARE</span> <span>@i</span> <span>INT</span> <span> 9</span> <span>SET</span> <span>@i</span> <span>=</span> <span>1</span> <span>10</span> <span>WHILE</span> ( <span>@i</span> <span> <span>10000</span><span> ) </span><span>11</span> <span>BEGIN</span> <span>12</span> <span>INSERT</span> <span>INTO</span> <span>[</span><span>dbo</span><span>]</span>.<span>[</span><span>testdisktable</span><span>]</span> ( <span>[</span><span>id</span><span>]</span>, <span>[</span><span>name</span><span>]</span><span> ) </span><span>13</span> <span>VALUES</span> ( <span>@i</span>, <span>REPLICATE</span>(<span>'</span><span>s</span><span>'</span>, <span>3000</span><span>) ) </span><span>14</span> <span>SET</span> <span>@i</span> <span>=</span> <span>@i</span> <span>+</span> <span>1</span> <span>15</span> <span>END</span> <span>16</span> <span>CHECKPOINT</span> <span>17</span> <span>SELECT</span> <span>GETDATE</span><span>() </span><span>18</span> <span>GO</span></span>
(12:50:04.847) - (12:50:02.150) =2秒多一点
两个时刻相减大概2秒多一点
测试读取数据(10000条记录)
<span> 1</span> <span>--</span><span>测试读取</span> <span> 2</span> <span>DBCC</span><span> DROPCLEANBUFFERS </span><span> 3</span> <span>DBCC</span><span> FREEPROCCACHE </span><span> 4</span> <span>DBCC</span> freesystemcache(<span>'</span><span>ALL</span><span>'</span><span>) </span><span> 5</span> <span>GO</span> <span> 6</span> <span>SET</span> <span>STATISTICS</span> IO <span>ON</span> <span> 7</span> <span>SET</span> <span>STATISTICS</span> TIME <span>ON</span> <span> 8</span> <span>GO</span> <span> 9</span> <span>SELECT</span> <span>*</span> <span>10</span> <span>FROM</span><span> testdisktable </span><span>11</span> <span>SET</span> <span>STATISTICS</span> IO <span>OFF</span> <span>12</span> <span>SET</span> <span>STATISTICS</span> TIME <span>OFF</span> <span>13</span> <span>GO</span>
<span> 1</span> <span>DBCC</span> 执行完毕。如果 <span>DBCC</span><span> 输出了错误信息,请与系统管理员联系。 </span><span> 2</span> <span>DBCC</span> 执行完毕。如果 <span>DBCC</span><span> 输出了错误信息,请与系统管理员联系。 </span><span> 3</span> <span>DBCC</span> 执行完毕。如果 <span>DBCC</span><span> 输出了错误信息,请与系统管理员联系。 </span><span> 4</span> <span>SQL Server 分析和编译时间: </span><span> 5</span> CPU 时间 <span>=</span> <span>0</span> 毫秒,占用时间 <span>=</span> <span>5</span><span> 毫秒。 </span><span> 6</span> <span> 7</span> (<span>9999</span><span> 行受影响) </span><span> 8</span> 表 <span>'</span><span>testdisktable</span><span>'</span>。扫描计数 <span>1</span>,逻辑读取 <span>5004</span> 次,物理读取 <span>0</span> 次,预读 <span>5028</span> 次,lob 逻辑读取 <span>0</span> 次,lob 物理读取 <span>0</span> 次,lob 预读 <span>0</span><span> 次。 </span><span> 9</span> <span>10</span> <span>SQL Server 执行时间: </span><span>11</span> CPU 时间 <span>=</span> <span>125</span> 毫秒,占用时间 <span>=</span> <span>651</span><span> 毫秒。 </span><span>12</span> <span>13</span> <span>SQL Server 执行时间: </span><span>14</span> CPU 时间 <span>=</span> <span>0</span> 毫秒,占用时间 <span>=</span> <span>0</span> 毫秒。
这两个硬盘的时间差异比较就是执行时间的差异比较和分析编译时间的差异比较
因为IO(读取数据页)无论是固态硬盘还是机械硬盘都是需要做的
但是分析编译时间和执行时间不一样
分析编译期间SQLSERVER需要编译中间代码,这个过程也是需要读取磁盘文件的
执行时间里包括从磁盘里读取数据,因为机械硬盘有寻道时间而固态硬盘没有
详细的大家可以看一下我这篇文章:带您理解SQLSERVER是如何执行一个查询的
总结
上面的测试结果有积极的参考意义,如果本人的笔记本电脑接口是原生SATA3.0的速度肯定会更快
打开网页的时候也很快,因为浏览器需要将cookies、缓存文件、图片下载到本地然后显示
自从换了SSD之后多年的老问题解决了,健步如飞了~
小贴士:三星固态硬盘在淘宝天猫买的不用600块,还包邮,卖家对我这种小白的态度也很好
有很多地方不明白也耐心教导o(∩_∩)o
如有不对的地方,欢迎大家拍砖o(∩_∩)o