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

Откуда:
Сообщений: 189
взможно ли в скуле 2005 настроить так, чтобы курсоры открывались по умолчанию только для чтения?
Перевели базу 1С 7.7 с 2000й версии на 2005 и начались тормоза при работе в журнале документов.

Версия сервака: Microsoft SQL Server 2005 - 9.00.4266.00 (Intel X86) Oct 7 2009 16:41:15 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)

снимок профайлера прилагается...

К сообщению приложен файл (my.rar - 7Kb) cкачать
25 ноя 09, 10:32    [7974617]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL 2005  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
И что саппорт 1С-а на тему "1С7+sql2005" говорит?
--------------------------------------------------------------
Дьявол кроется в деталях.
25 ноя 09, 11:07    [7974898]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL 2005  [new]
olegves
Member

Откуда:
Сообщений: 189
Дедушка,

1С 7.7 с 2005м скулем не совместим, а чтобы заставить его работать, приходится патчить библиотеку bkend.dll
25 ноя 09, 11:25    [7975065]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL 2005  [new]
olegves
Member

Откуда:
Сообщений: 189
жаль, что никто ничем не может помочь.

а может установка уровня изоляции Snapshot изменит поведение курсоров?
25 ноя 09, 14:58    [7976972]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL 2005  [new]
VladimirKr
Member

Откуда: СПб
Сообщений: 1050
olegves
жаль, что никто ничем не может помочь.

а может установка уровня изоляции Snapshot изменит поведение курсоров?


Мне против тормозов журнала на 2005 помогло банальное обновление статистики. Правда база небольшая...
25 ноя 09, 15:09    [7977072]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL 2005  [new]
olegves
Member

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

а мне помогло следующее лекарство:
автор
Процедура ПриНачалеРаботыСистемы()
Док1 = СоздатьОбъект("Документ");
Док1.ВыбратьДокументы();
Док1.ПолучитьДокумент();
Если Док1.Выбран()=1 Тогда
ДОк2 = СоздатьОбъект("Документ");
Док2.ВыбратьПодчиненныеДокументы(,,Док1.ТекущийДокумент());
КонецЕсли;


люди называют это разогревом кэша. Я, признаться, не понимаю, каким образом скуль минует ступора при выборке первого документа из журнала документов и (если есть у него) подчиненного ему документа.

Может кто из зубров сможет объяснить?
25 ноя 09, 15:55    [7977509]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL 2005  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33358
Блог
Вряд ли кто-то поможет, т.к. неизвестен sql-код, который генерируют эти ваши инструкции
25 ноя 09, 16:08    [7977648]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL 2005  [new]
olegves
Member

Откуда:
Сообщений: 189
Критик,

на скуль отправляются следующие запросы (взято из профайлера):

автор
declare @p1 int
set @p1=1073741828
declare @p2 int
set @p2=180150021
declare @p5 int
set @p5=2
declare @p6 int
set @p6=1
declare @p7 int
set @p7=-1
exec sp_cursorprepexec @p1 output,@p2 output,N'@P1 varchar(23),@P2 varchar(23)',N'Select * from _1SJOURN(NOLOCK INDEX=ACDATETIME) where DATE_TIME_IDDOC>=@P1 and DATE_TIME_IDDOC<=@P2 order by DATE_TIME_IDDOC',@p5 output,@p6 output,@p7 output,'17530101 0 0 ','99991230FHML6O 0 '
select @p1, @p2, @p5, @p6, @p7

exec sp_cursorfetch 180150021,1,0,1

declare @p1 int
set @p1=1073741829
declare @p2 int
set @p2=180150023
declare @p5 int
set @p5=2
declare @p6 int
set @p6=1
declare @p7 int
set @p7=-1
exec sp_cursorprepexec @p1 output,@p2 output,N'@P1 int,@P2 char(23),@P3 char(23),@P4 char(23)',N'Select JOURN.* from _1SJOURN JOURN(NOLOCK INDEX=ACDATETIME), _1SCRDOC CRDOC(NOLOCK INDEX=PARENT) where JOURN.DATE_TIME_IDDOC=CRDOC.CHILD_DATE_TIME_IDDOC and CRDOC.MDID=@P1 and CRDOC.PARENTVAL=@P2 and CRDOC.CHILD_DATE_TIME_IDDOC>=@P3 and CRDOC.CHILD_DATE_TIME_IDDOC<=@P4 order by CRDOC.MDID, CRDOC.PARENTVAL, CRDOC.CHILD_DATE_TIME_IDDOC',@p5 output,@p6 output,@p7 output,0,'O1 6GV F30A ','17530101 0 0 ','99991230FHML6O 0 '
select @p1, @p2, @p5, @p6, @p7

exec sp_cursorfetch 180150023,1,0,1
25 ноя 09, 16:25    [7977834]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL 2005  [new]
Glory
Member

Откуда:
Сообщений: 104760
olegves
Критик,

на скуль отправляются следующие запросы (взято из профайлера):

Разумеется кэш разогреется, если выполнить
Select * from _1SJOURN(NOLOCK INDEX=ACDATETIME) where
DATE_TIME_IDDOC>=@P1
and
DATE_TIME_IDDOC<=@P2
где @P1 - '17530101', а @P2 - '99991230'

Потому что 1753-01-01 это наменьшая дата в MSSQL, а 9999-12-30 почти наибольшая (кстати это баг 1С получается :) )

С таким фильтром конечно вся таблица в кэш попадет
25 ноя 09, 16:33    [7977915]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL 2005  [new]
olegves
Member

Откуда:
Сообщений: 189
Glory
(кстати это баг 1С получается :) )

С таким фильтром конечно вся таблица в кэш попадет


а почему баг 1С? Этот запрос как-раз спасает от тормозов, а в чем же баг? И почему таких тормозов в 2000м скуле не наблюдается (без всяких разогревов кэшей)?
25 ноя 09, 16:41    [7977996]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL 2005  [new]
Glory
Member

Откуда:
Сообщений: 104760
olegves
Glory
(кстати это баг 1С получается :) )

С таким фильтром конечно вся таблица в кэш попадет


а почему баг 1С? Этот запрос как-раз спасает от тормозов, а в чем же баг? И почему таких тормозов в 2000м скуле не наблюдается (без всяких разогревов кэшей)?

Потому что наибольшая календарная дата 9999-12-31, а не 30
Вопросы о том, как работает 1С нужно задавать в форумах по 1С
Потому что не сервер определяет, какие запросы ему ваполнять при ваших манипуляциях в 1С
25 ноя 09, 16:44    [7978024]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL 2005  [new]
olegves
Member

Откуда:
Сообщений: 189
Glory
Потому что наибольшая календарная дата 9999-12-31, а не 30


ну, мы вряд ли доживем до наибольшей даты календаря. Только вот связи с тормозами скуля и багом дат 1С не прослеживается.

Glory
Вопросы о том, как работает 1С нужно задавать в форумах по 1С


простите, но я, вроде бы, про скуль вопросы задавал, а не про 1С.

Glory
Потому что не сервер определяет, какие запросы ему ваполнять при ваших манипуляциях в 1С


вы хотите сказать, что запросы, полученные из профайлера сервер не станет выполнять?
25 ноя 09, 16:51    [7978105]     Ответить | Цитировать Сообщить модератору
 Re: курсоры в SQL 2005  [new]
Glory
Member

Откуда:
Сообщений: 104760
olegves

Glory
Потому что не сервер определяет, какие запросы ему ваполнять при ваших манипуляциях в 1С


вы хотите сказать, что запросы, полученные из профайлера сервер не станет выполнять?

Я хочу сказать, что запросы нужно оптимальные писать. А просто любые
25 ноя 09, 16:58    [7978174]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить