Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема производительности при переходе от 2000 к 2008  [new]
avk_soft
Member

Откуда:
Сообщений: 92
Установили SQL Server 2008 Standart Edition for Small Busines (x64) под ОС Windows Small Business Server 2008 Premium Edition.
Далее установили пользовательские базы на 2008 (путем сохранения дампа на 2000 и последующего подъема на 2008).
Проблема в низкой производительности на исполнении операции INSERT на 2008!!!
По сравнению с 2000 примерно в 2.5 раза медленнее!!!
При этом железо с установленным 2008 примерно во столько же раз мощнее сервера с 2000.
Пробовал:
- выставлять уровень совместимости 80 и 100;
- обновлять статистику и перестраивать индексы;
- отключил все связанные с SQL сервисы (за исключением MSSQL и агента);
Ничего не помогает :(

Т.е. выполняем запрос на обоих серверах:

set showplan_all on
go
DECLARE @IDBal int
INSERT INTO BalDesc (TypeRep, AccSubType, Part, Item, SubItem, AccFirst, AccSec, Type, TypeSum, BalDesc)
VALUES (0, 0, 1, 0, 0, NULL, NULL, NULL, 0, 'РАЗДЕЛ 1 КАПИТАЛ')
SET @IDBal = @@IDENTITY
INSERT INTO BalAcc (IDBal, TypeOper, AccMask)
VALUES (@IDBal, 0, '1%')
go
set showplan_all off
go

в результате
на 2000:

INSERT INTO BalAcc (IDBal, TypeOper, AccMask)
VALUES (@IDBal, 0, '1%') 
  |--Assert(WHERE:(If (NOT([Pass1008]) AND ([Expr1007] IS NULL)) then 0 else NULL)) 
       |--Nested Loops(Left Semi Join, WHERE:([@IDBal] IS NULL), DEFINE:([Expr1007] = [PROBE VALUE]))
            |--Table Insert(OBJECT:([ref].[dbo].[BalAcc]), SET:([BalAcc].[TypeAcc]=NULL, [BalAcc].[TypeOper]=RaiseIfNull(0), [BalAcc].[IDBal]=RaiseIfNull([@IDBal]), [BalAcc].[IDMask]=RaiseIfNull([Expr1002]), [BalAcc].[AccMask]=RaiseIfNull('1%'), [BalAcc].[MaskAcc]=NULL), DEFINE:([Expr1002]=getidentity(1390627997, 16, NULL)))
            |--Index Seek(OBJECT:([ref].[dbo].[BalDesc].[PK_BalDesc]), SEEK:([BalDesc].[IDBal]=[@IDBal]) ORDERED FORWARD)

на 2008:

INSERT INTO BalAcc (IDBal, TypeOper, AccMask)
VALUES (@IDBal, 0, '1%')
  |--Assert(WHERE:(CASE WHEN [Expr1011] IS NULL THEN (0) ELSE NULL END)) 
       |--Nested Loops(Left Semi Join, OUTER REFERENCES:([ref].[dbo].[BalAcc].[IDBal]), DEFINE:([Expr1011] = [PROBE VALUE]))
            |--Table Insert(OBJECT:([ref].[dbo].[BalAcc]), OBJECT:([ref].[dbo].[BalAcc].[PK_BalAcc]), OBJECT:([ref].[dbo].[BalAcc].[idx_IDBal]), SET:([ref].[dbo].[BalAcc].[IDBal] = RaiseIfNullInsert([@IDBal]),[ref].[dbo].[BalAcc].[TypeOper] = [Expr1005],[r
            |    |--Compute Scalar(DEFINE:([Expr1005]=(0), [Expr1006]='1%'))
            |         |--Compute Scalar(DEFINE:([Expr1004]=getidentity((1390627997),(7),NULL)))
            |              |--Constant Scan
            |--Index Seek(OBJECT:([ref].[dbo].[BalDesc].[PK_BalDesc]), SEEK:([ref].[dbo].[BalDesc].[IDBal]=[ref].[dbo].[BalAcc].[IDBal]) ORDERED FORWARD)

Как видите план запроса отличается.
Кластерных индексов нет.
В чем может быть проблема?

Насколько смотрел по форуму данная проблема не нова.
Ранее подобное проявлялось при переходе от 2000 к 2005. К сожалению обсуждение данного вопроса свелось к флуду и было закрыто модератором.

Сообщение было отредактировано: 31 авг 11, 13:37
31 авг 11, 13:31    [11205680]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
Wizandr
Member

Откуда: Империя Добра
Сообщений: 37079
это на не нагруженном сервере в 2.5 раза медленее?
31 авг 11, 13:45    [11205795]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
iljy
Member

Откуда:
Сообщений: 8711
avk_soft,

а как собственно вы меряете производительность на ОДНОМ запросе на вставку?? Это во-первых. Ну и во-вторых, судя по вот этому
автор
OBJECT:([ref].[dbo].[BalAcc].[PK_BalAcc]), OBJECT:([ref].[dbo].[BalAcc].[idx_IDBal])

у вас на таблице появились новые индексы, которые естественно влияют на вставку.
31 авг 11, 13:48    [11205825]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
avk_soft
Member

Откуда:
Сообщений: 92
Для примера взял реальный скрипт загрузки справочной информации.
Подобные запросы не единичны, но проблема одна, заметное падение производительности на 2008 по сравнению с 2000 :(
Новые индексы в таблице не появились, структура таблицы (индексы в том числе) при переходе осталась неизменной.
Вот план запроса, непонятно почему, действительно изменился.
31 авг 11, 14:40    [11206311]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
avk_soft
индексы в таблице не появились, структура таблицы (индексы в том числе) при переходе осталась неизменной.
А в плане почему-то видно обратное.
31 авг 11, 14:54    [11206436]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
avk_soft
Member

Откуда:
Сообщений: 92
Оба индекса OBJECT:([ref].[dbo].[BalAcc].[PK_BalAcc]) и OBJECT:([ref].[dbo].[BalAcc].[idx_IDBal]) были в 2000.
Первый из них уникальный по первичному ключу, второй по обычному полю данных (оба не кластерные).
Как сообщал ранее индексы после перехода на 2008 перестраивал.
В плане запроса 2008 в Table Insert появилась ссылка на эти индексы.
У меня есть подозрение, что "тормоз" с производительностью как то с этим связан, но как с этим "бороться"?
31 авг 11, 15:22    [11206692]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
avk_soft,

может, статистику обновить?
31 авг 11, 15:31    [11206789]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
avk_soft
Member

Откуда:
Сообщений: 92
В своем первом сообщении писал по обновление статистики. Не помогает :(
31 авг 11, 17:57    [11208147]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
komrad
Member

Откуда:
Сообщений: 5763
avk_soft
В своем первом сообщении писал по обновление статистики. Не помогает :(


select @@version


дисковые очереди смотрели?
31 авг 11, 18:11    [11208285]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
avk_soft,

а статистика io одинаковая?
31 авг 11, 18:28    [11208427]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31987
avk_soft
В своем первом сообщении писал по обновление статистики. Не помогает :(
Начать надо с
select @@version
select * from sys.indexes where object_id = object_id('BalDesc')
select * from sys.indexes where object_id = object_id('BalAcc')
на обоих базах (серверах)
31 авг 11, 18:38    [11208516]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
avk_soft
Member

Откуда:
Сообщений: 92
Выполнил на обоих серверах:

select @@version
select id, name from sysindexes where id = object_id('BalAcc')

результата 2000:

--------------------------------------------
Microsoft SQL Server 2000 - 8.00.2282 (Intel X86)
Dec 30 2008 02:22:41
Copyright (c) 1988-2003 Microsoft Corporation
Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 4)

id name
----------- --------------------------------
1390627997 BalAcc
1390627997 PK_BalAcc
1390627997 idx_IDBal
1390627997 _WA_Sys_TypeOper_52E34C9D

результат 2008:

------------------------------------------------
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
Apr 2 2010 15:48:46
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

id name
----------- -------------------------------------
1390627997 NULL
1390627997 PK_BalAcc
1390627997 idx_IDBal
1390627997 _WA_Sys_TypeOper_52E34C9D
1390627997 _WA_Sys_00000004_52E34C9D

В 2008 в индесной таблице появилась еще одна запись. Что за объект не понятно.
Напомню структура таблицы при переходе не менялась.

komrad подскажите как посмотреть дисковые очереди?
1 сен 11, 10:29    [11210374]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35398
Блог
avk_soft,

дисковые очереди можно посмотреть с помощью счетчиков windows.
PerfMon
1 сен 11, 10:56    [11210601]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
iljy
Member

Откуда:
Сообщений: 8711
avk_soft,

это статистика появилась, она на скорость особо влиять не должна. А вот то, что у вас RTM без единого обновления - это может запросто.
И еще - проверьте, а включены ли индексы на 2000, странно, что они в плане не упоминаются.
1 сен 11, 11:15    [11210793]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
komrad
Member

Откуда:
Сообщений: 5763
iljy
avk_soft,
А вот то, что у вас RTM без единого обновления - это может запросто.

RTM = 8.00.194
1 сен 11, 11:25    [11210883]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31987
komrad
iljy
avk_soft,
А вот то, что у вас RTM без единого обновления - это может запросто.

RTM = 8.00.194
Имеется в виду 2008 R2
1 сен 11, 11:26    [11210902]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
avk_soft
Member

Откуда:
Сообщений: 92
Индексы на 2000 включены - это рабочий сервер.
Более того проверил по плану запроса - включены.
На сервере 2008 операции DELETE ни каких "тормозов", проблема с INSERT.

komrad подскажите страничку где на сайте Microsoft можно скачать обновления для установленной у меня версии SQL?
а то что-то не могу найти.
1 сен 11, 11:34    [11210992]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
komrad
Member

Откуда:
Сообщений: 5763
avk_soft
komrad подскажите страничку где на сайте Microsoft можно скачать обновления для установленной у меня версии SQL?


SQL2008 R2 SP1
1 сен 11, 11:57    [11211275]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
avk_soft
Member

Откуда:
Сообщений: 92
Спасибо komrad!

Обновление установил, теперь:

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64)
Jun 17 2011 00:54:03
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

Но лучше не стало, все равно тормозит на INSERT :(

Как советовали посмотрел дисковые очереди на момент исполнения скрипта.
Ничего критичного не заметил, по сравнению с исполнением иных операций SQL сервера.
Может все же проблема связана с какими либо настройками самого SQL сервера?
1 сен 11, 15:03    [11212984]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
Wizandr
Member

Откуда: Империя Добра
Сообщений: 37079
avk_soft,

нужно посмотреть сколько виртуальных чтений в обоих случаях
1 сен 11, 15:08    [11213036]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
avk_soft
Member

Откуда:
Сообщений: 92
Посмотрел системный монитор.
Средняя длина очереди диска зашкаливает и равна 1.
База данных размещена на логическом диске представляющем собой 2 физических диска по 2ТБ объединенных RAID1+0.
Куда копать?
2 сен 11, 14:48    [11218697]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
avk_soft
Посмотрел системный монитор.
Средняя длина очереди диска зашкаливает и равна 1.
База данных размещена на логическом диске представляющем собой 2 физических диска по 2ТБ объединенных RAID1+0.
Куда копать?
1 - это не зашкаливает.
2 сен 11, 14:49    [11218710]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
avk_soft
...База данных размещена на логическом диске представляющем собой 2 физических диска по 2ТБ объединенных RAID1+0.
Это как это?
На 2 дисках можно только или 1, или 0.
2 сен 11, 14:53    [11218774]     Ответить | Цитировать Сообщить модератору
 Re: Проблема производительности при переходе от 2000 к 2008  [new]
avk_soft
Member

Откуда:
Сообщений: 92
Сравнивать счетчики очередей дисков на двух серверах думаю будет не очень верно т.к. сервера SQL2000 (ОС Windows 2000 Server (x86)) и SQL2008 (ОС Windows 2008 (x64)) разные по железу и нагрузке. Создать одинаковые условия не представляется возможным.

Попробовал запустить стандартный тест записи данных:
sqlio -d<диск с БД> -kW

Результат на 2000:
IO/sec: 117.20
MBs/sec: 0.22

Результат на 2008:
IO/sec: 621.63
MBs/sec: 1.21

Как видите 2008 на операциях записи на диск в разы более "резвый".
При этом один и тотже скрипт (в обоих случаях запускался с консоли сервера) на 2008 выполняется значительно дольше.
Может все же проблема лежит в каких-либо настройках SQL2008 сервера?
5 сен 11, 11:48    [11227204]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить