Версия устройства, конечно, не серверная, но, как говорится, что имеем то и тестим.
Итак, я создал две новые базы SQL Server 2008 - одну на HDD (Seagate ST380815 - старая модель, но так даже лучше - видна динамика), другую на SSD и выполнял на них идентичные запросы.
Перед каждым тестом я сбрасывал буферы SQL Server.
Изначально я создал по одной таблице в каждой базе:
create table TestTable (ID int identity (1, 1), dt datetime, TextData varchar (255))
Сначала проверил последовательную вставку 1 000 000 записей:
declare @i int, @d int
declare @dt datetime
set @i = 1
while @i <= 1000000
begin
set @d = convert (int, (RAND () * 365))
set @dt = dateadd (day, @d, '2010-01-01')
insert into TestTable (dt, TextData)
values (@dt, convert (varchar (255), NEWID ()))
set @i = @i + 1
end
Результат: HDD - 4:45, SSD - 3:03
Затем я выполнил массовую вставку 1000000 записей:
select * into TestTable2
from TestTable
Результат: HDD - 0:08, SSD - 0:03
Далее - создание кластерного индекса.
create clustered index cIndex on TestTable (dt)
Результат: HDD - 0:07, SSD - 0:04
Случайное чтение 100 000 записей индексированной таблицы:
declare @i int, @d int
declare @dt datetime
declare @TextData varchar (255)
set @i = 1
while @i <= 100000
begin
set @d = convert (int, (RAND () * 365))
set @dt = dateadd (day, @d, '2010-01-01')
select @TextData = TextData from TestTable where dt = @dt
set @i = @i + 1
end
Результат: HDD - 1:57, SSD - 1:38
Случайное чтение 1 000 записей неиндексированной таблицы:
declare @i int, @d int
declare @dt datetime
declare @TextData varchar (255)
set @i = 1
while @i <= 1000
begin
set @d = convert (int, (RAND () * 365))
set @dt = dateadd (day, @d, '2010-01-01')
select @TextData = TextData from TestTable2 where dt = @dt
set @i = @i + 1
end
Результат: HDD - 1:38, SSD - 1:39
Как видим, здесь оценить разницу не удалось, поскольку вся таблица целиком была скеширована при первом обращении и в дальнейшем происходила работа уже с кешем, а не с физическим носителем.
Последовательное чтение записей индексированной таблицы:
select *
from TestTable
where dt between '2010-05-01' and '2010-06-30'
Результат: HDD - 206 мс, SSD - 36 мс
Последовательное чтение записей неиндексированной таблицы:
select *
from TestTable2
where dt between '2010-05-01' and '2010-06-30'
Результат: HDD - 70 мс, SSD - 11 мс
Еще раз приведу итоги своего тестирования в сводной таблице
Операция | HDD | SSD |
---|---|---|
Последовательная вставка 1 000 000 записей | 4:45 | 3:03 |
Массовая вставка 1 000 000 записей | 0:08 | 0:03 |
Создание кластерного индекса | 0:07 | 0:04 |
Случайное чтение 100 000 записей индексированной таблицы | 1:57 | 1:38 |
Случайное чтение 1 000 записей неиндексированной таблицы | 1:38 | 1:39 |
Последовательное 100 000 чтение записей индексированной таблицы | 206 мс | 36 мс |
Последовательное 100 000 чтение записей неиндексированной таблицы | 70 мс | 11 мс |
Мой вывод - на всех операциях SSD быстрее, особенно на массовых.
Вроде X-25V - это слабенькая модель, нет? У них на такой случай есть X-25E.
ОтветитьУдалитьДа, это модель для домашнего использования.
ОтветитьУдалитьСерверная - X-25M
Сессия была на TechEd по этому поводу. Можно скачать, кстати, там цифры, реальные серверные цифры. Правда, там тестировались дорогие конфигурации железа, серьёзная нагрузка и большие объёмы данных, ибо о датацентрах речь шла.
ОтветитьУдалитьЯ не ходил :)