Имя: Пароль:
1C
1С v8
Прошу дать дельные ссылки на оптимизацию 1с8+SQL
,
0 Sintez123
 
24.07.13
11:38
Вот и мы приехали к тормозам на 1с. На решение задачи "Ускорить 1с в 10 раз" мне дали аж 30 минут ))) Бюджет разумеется 0 рублей.

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

Очень надеюсь получить ссылки на подробные статьи, который вам понравились. В первую очередь по поиску слабых мест.

Гилёва я читал уже - всё в кучу намешал, никакой структуры имхо. Стиль аля "Попробуйте увеличить память, если не помогло попробуйте..." стоп! Это "попробуйте" стоит денег и/или кучи времени. Так что перед тем как "побробовать" хотелось бы четко понимать может ли это помочь, и почему именно это может помочь. А для этого надо найти эти узкие места.

С удовольствием приму в дар платные обработочки по теме :) Типа "Центр управления производительностью"
[email protected]
179 Demiurg
 
26.07.13
20:59
да, и клиентскую часть лучше держать на сервере 1с, гонять по сети данные можно, но не очень хорошая идея
180 z01
 
31.07.13
10:09
утилиты... мониторинг...
посмотрите то... посмотрите сё...
а делать то что?
181 alex-ander-777
 
31.07.13
12:38
Дисковую систему модернизировать. Как правило, ставится сервер с сильными процессорами и достаточной памятью. И при этом один RAID5 из 4-х дисков. И все базы+tempdb начинают сражаться за доступ...
182 z01
 
31.07.13
14:38
(181) "RAID5 из 4-х дисков"
183 alex-ander-777
 
31.07.13
17:15
(182)Самое распространенное количество, на трех практически не делают.
184 Demiurg
 
01.08.13
00:52
(180) есть достаточная большая ветка на эту тему v8: Как найти проблемный запрос в Информационной системе 8.2
но если сил нет читать, соберите данные сервисом и задайте вопрос в наш форум http://www.gilev.ru/forum/ - мы поможем интерпретировать данные, хотя если бы вы один раз воспользуетесь, там и так будет понятно, куда "копать"
185 z01
 
02.08.13
12:59
(184)т.е. вы признаете что ваши утилиты демонстрируют ваши знания но не в коем случае не предоставляют пользователю без головы готового решения )))
186 alex-ander-777
 
02.08.13
13:14
Пользователю совсем уж безголовому ничего не поможет.
Другое дело, что есть стандартные узкие места, которые надо проверять в первую очередь. Например, если у вас на весь сервер вся дисковая подсистема состоит действительно всего из одного малодискового рейда, и  при этом несколько баз (торговля-бухгалтерия-ЗУП) и три-четыре десятка действительно работающих пользователя, то глубже пока можно и не вникать.
187 alex-ander-777
 
02.08.13
13:17
P/S/ Хотя, если контроллер рейда хороший (нет... не хороший, а ХОРОШИЙ), то дело может быть и не в этом. Другое дело, что по-настоящему производительные контроллеры стоят денег, и их редко ставят - надеются на авось.
188 z01
 
02.08.13
13:49
(187)ну вот нашел я долго и часто выполняющий запрос
и что дальше?
189 Fragster
 
модератор
02.08.13
13:57
(188) давай его сюда
190 Demiurg
 
02.08.13
14:05
(185) (188) после того как находите долгий запрос, смотрите его план, а также загруженность железа в этот момент - выясняете причины, которые заставили его долго выполняться
191 Demiurg
 
02.08.13
14:07
(185) приведите пример готового решения пользователю "без головы" как вы выражаетесь
192 z01
 
07.08.13
16:44
вот
--------------------------------------------------------------------------------------------

-- Создание недостающих индексов баз данных на SQL Server 2005, 2008

--

-- Скрипт анализирует статистику, собранную сервером баз данных об отсутствующих индексах в базах данных и

-- предлагает создать индексы, которые могут обеспечить значительное повышение производительности.

SET NOCOUNT ON

DECLARE @dbid int

IF (object_id('tempdb..##IndexAdvantage') IS NOT NULL) DROP TABLE ##IndexAdvantage

CREATE TABLE ##IndexAdvantage ([Преимущество индекса] float, [База данных] varchar(64), [Transact SQL код для создания индекса] varchar(1024),

[Число компиляций] int, [Количество операций поиска] int, [Количество операций просмотра] int,

[Средняя стоимость ] int, [Средний процент выигрыша] int );

DECLARE DBases CURSOR FOR

SELECT database_id FROM sys.master_files -- Получаем список ID баз данных

WHERE state = 0 AND -- ONLINE

has_dbaccess(db_name(database_id)) = 1 -- Only look at databases to which we have access

GROUP BY database_id

OPEN DBases

FETCH NEXT FROM DBases

INTO @dbid

WHILE @@FETCH_STATUS = 0

BEGIN -- Выполняем для каждой базы данных --------------------------------------------------

INSERT INTO ##IndexAdvantage

SELECT [Преимущество индекса] = user_seeks * avg_total_user_cost * (avg_user_impact * 0.01),

      [База данных] = DB_NAME(mid.database_id),

      [Transact SQL код для создания индекса] = 'CREATE INDEX [IX_' + OBJECT_NAME(mid.object_id,@dbid) + '_' +

      CAST(mid.index_handle AS nvarchar) + '] ON ' +

      mid.statement + ' (' + ISNULL(mid.equality_columns,'') +

      (CASE WHEN mid.equality_columns IS NOT NULL AND mid.inequality_columns IS NOT NULL THEN ', '

ELSE '' END) +

      (CASE WHEN mid.inequality_columns IS NOT NULL THEN + mid.inequality_columns ELSE '' END) + ')' +

      (CASE WHEN mid.included_columns IS NOT NULL THEN ' INCLUDE (' + mid.included_columns + ')'

ELSE '' END) +      ';',

      [Число компиляций] = migs.unique_compiles,

      [Количество операций поиска] = migs.user_seeks,

      [Количество операций просмотра] = migs.user_scans,

      [Средняя стоимость ] = CAST(migs.avg_total_user_cost AS int),

      [Средний процент выигрыша] = CAST(migs.avg_user_impact AS int)

FROM  sys.dm_db_missing_index_groups mig

JOIN  sys.dm_db_missing_index_group_stats migs

ON    migs.group_handle = mig.index_group_handle

JOIN  sys.dm_db_missing_index_details mid

ON    mig.index_handle = mid.index_handle

AND   mid.database_id = @dbid

    FETCH NEXT FROM DBases

    INTO @dbid

END ----------------------------------------------------------------------------------------

CLOSE DBases

DEALLOCATE DBases

GO

SELECT * FROM ##IndexAdvantage ORDER BY 1 DESC

-- Значение ''Преимущество индекса'' выше 5000 в промышленных системах означает, что следует рассмотреть возможность создания этих индексов.

-- Если же значение превышает 10000, это обычно означает, что индекс может обеспечить значительное повышение производительности для операций чтения.

----------------------------------------------------------------------------------------------

---- Отправляем email с предложением создать индекс

--IF (object_id('tempdb..##IndexAdvantage2') IS NOT NULL) DROP TABLE ##IndexAdvantage2

--SELECT * INTO ##IndexAdvantage2 FROM ##IndexAdvantage WHERE [Преимущество индекса] >= 5000 ORDER BY 1 DESC

--IF ((SELECT COUNT(*) FROM ##IndexAdvantage2) >= 1) BEGIN

--DECLARE @subject_str varchar(255),

--@message_str varchar(1024),

--@separator_str varchar(1),

--@email varchar(128)

--SET @separator_str=CHAR(9) -- Символ табуляции

--SET @email = '[email protected]'

---- Подготовим текст сообщения

--SET @subject_str = 'SQL Server '+@@SERVERNAME+': Предложение создать индексы в базе данных.'

--SET @message_str = 'Сервер '+@@SERVERNAME + '. Выявлена необходимость создать индексы в базе данных!

--Во вложении - таблица с кодом предлагаемых индексов.

--Значение "Преимущество индекса" выше 5000 в промышленных системах означает, что следует рассмотреть возможность создания этих индексов.

--Если же значение превышает 10000, это обычно означает, что индекс может обеспечить значительное повышение производительности для операций чтения.

--Динамические административные представления, которые помогли нам получить информацию об отсутствующих индексах, не являются заменой помощника по настройке ядра СУБД, который также рассматривает индексированные представления и секции и обеспечивает более всесторонний анализ индексов, но они могут быть очень эффективны на начальном уровне анализа.'

---- Отправляем email

--EXEC msdb.dbo.sp_send_dbmail

--@recipients = @email,

--@query = 'SELECT * FROM ##IndexAdvantage2',

--@subject = @subject_str,

--@body = @message_str,

--@attach_query_result_as_file = 1,

--@query_result_separator = @separator_str,

--@query_result_width = 7000

--END

---- Удаляем временную таблицу

IF (object_id('tempdb..##IndexAdvantage') IS NOT NULL) DROP TABLE ##IndexAdvantage

IF (object_id('tempdb..##IndexAdvantage2') IS NOT NULL) DROP TABLE ##IndexAdvantage2
193 Fragster
 
модератор
07.08.13
16:47
(192) может сначала лучше проанализировать запросы?
194 z01
 
07.08.13
17:09
(193)да конечно.
вот нашел я долгий и частый запрос и что дальше?
195 Fragster
 
модератор
07.08.13
18:58
(194) -> (189)
196 Fragster
 
модератор
07.08.13
19:00
вообще вариантов несколько -
запрос может быть не нужен
запрос может быть не таким частым
запрос может быть не таким долгим, если его переписать
запрос может быть не таким долгим если изменить структуру метаданных (в т.ч. индексы)
запрос может быть не таким долгим если создать необходимые индексы, которые средствами 1с не создать
197 Fragster
 
модератор
07.08.13
19:01
запрос может быть не таким долгим, если провести обслуживание базы (пересчет итогов, переиндексация)
198 Fragster
 
модератор
07.08.13
19:01
обновление статистики
199 Demiurg
 
07.08.13
22:57
(192) и как это решение поможет ускорить базу, где с индексами все и так нормально?
уверен, что многие запустят скрипт, но проблемы после него останутся с очень высокой вероятностью
200 Aleksey
 
07.08.13
23:28
(197) Ок. а что делать в моем случае когда
Имем базу БП 2.0 в которой по конкретной организации создано и проведено около 30 документов. Количество строк порядка от 700 до 1300.

Других документов по этой организации нет. Права админа

Нажимаю пометить на удаления. и .... жду чуть более 11 секунд. При этом по замеру времени в отладчике  98,5% времени занимает одна строка

Набор.Записать();

из процедуры УдалитьДвиженияРегистратора(), что находится в ГМ ОбщегоНазначения

Т.е. в документе строка ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ, РучнаяКорректировка, Ложь); занимает 98,6% времени

и это на документе без движения и без юзверей. Т.е. ни на скуле ни на сервере никто не работает и базу не напрягает



Кто подскажит куда копать? какие счётчики смотреть?
201 aka MIK
 
08.08.13
00:07
ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ, РучнаяКорректировка, Ложь)

это же процедура общего модуля, зайди в нее и посмотри!
202 Aleksey
 
08.08.13
00:08
(201) читай внимательно
203 Aleksey
 
08.08.13
00:10
эта процедура занимает 98,6% времени, а в этой процедуры самая долга операция это Набор.Записать(); которая из 98,6% выполняется 98,5% времени
204 Aleksey
 
08.08.13
00:10
причем перегрузил всё и клиента и сервер и скуль - один фиг на скорость пометки это не влияет
205 Demiurg
 
08.08.13
01:08
(204) что делать, уже писал в (168), получить план запроса для начала
206 Aleksey
 
08.08.13
01:09
(205) эээ план какого запроса простите?
207 Aleksey
 
08.08.13
01:11
причём тут запрос. что на запросе мир клином сошелся? У меня с запросом все хорошо и весь модуль со всемии проверками выполняется менее чем за секунду (грубо говоря 1-1,5% времени от всего), и 99% времени уходит на

Набор.Записать();


Объясните мне дураку какой запрос выполняет скуль когда 1С выполняет код

Набор.Записать();???
208 Aleksey
 
08.08.13
01:13
В это время происходит неуправляемый "апдейт" данных (движения и итоги), честно говоря я даже примерно не могу представить как я могу этим управлять
209 Aleksey
 
08.08.13
01:17
ну покажет мне что запрос на апдейт занимает 10 секунд, а все остальные запросы - 0,1 секунды. Это я и без сервиса знаю. Дальше то что? отказ от Набор.Записать(); в пользу прямых запросов? или что?

Или проблема вообще не в скуле а к примеру скажем в винтах
210 Aleksey
 
08.08.13
03:00
(205) поставил, и так и этак крутил и время 3 секунды выставлял. атолку всё маловато будет. Ну нет тут ни ни запросов длинных ни планов. что еще предложите?
211 Fragster
 
модератор
08.08.13
08:16
(200) про очистку наборов в типовых я уже писал не раз
212 Fragster
 
модератор
08.08.13
08:16
(200) кстати на документе без движений - там нет никакого Набор.Записать(), так как ранее стоит проверка на наличие движений
213 Fragster
 
модератор
08.08.13
08:18
по уму - надо вместо Набор.Записать в этой процедуре ставить Движения.Регистр.Очистить();
Движения.Регистр.Записывать = Истина;

Потом в самом документе сделать Движения.Записать() и проверку после этого. Вроде в новых типовых уже так сделали.
214 Fedot200
 
08.08.13
08:32
Подолью... мне вот этот скрипт http://infostart.ru/public/142324/ помог найти блокирующуюся таблицу, а потом уже легко вычислил запрос который ее блокирует.
215 Fragster
 
модератор
08.08.13
08:51
(214) в управляемом режиме не работает же
216 Fedot200
 
08.08.13
09:23
(215) Кто не работает? В каком еще управляемом режиме... ничего не понял.
217 Aleksey
 
08.08.13
12:08
Demiurg Так что дальше делать? Поставил http://www.gilev.ru/querytj/ ничего не нашел он. Дальше что?
218 Aleksey
 
08.08.13
21:46
Вот так всегда, все только могут с умным видом тыкать, типа там вот в инете всё написано, а как дело доходит до реальности все сливаются.

Ау есть кто?
219 Рэйв
 
08.08.13
21:58
220 Aleksey
 
08.08.13
22:04
(219) ну это всё настроено и периодически мониторятся выполнения
221 Рэйв
 
08.08.13
22:06
(220)Тогда может лучше перейти на оракл?:-)
222 Aleksey
 
08.08.13
22:08
(221) чем лучше? для 1С фиолетово, и даже более ИМХОется, что 1С с MS больше дружит

Или ты сейчас вообще про Оракл как ЕРП систему?
223 Рэйв
 
08.08.13
22:10
(222)Именно как про ЕРП. Оно с транзакциями бережней работает намного. не блочит таблицы полностью по пустякам.. я вот щас морально готовлюсь:-)
224 Aleksey
 
08.08.13
22:14
(223) ну во первых у меня нет проблем с блокировкой, у меня проблема в том что Набор.Записать(); делается 10 секунд, в то время как вся процедура пометки на удаления выполняется за 10,5 секунды

Во вторых для ЕРП у меня 7-ка на дбф и там нет такой проблемы со скоростью записи и проведения

Ну а втретих, речь идет о бух учете, а это, насколько я знаю, не сильная сторона оракла, и врядли получится "удачно" соскочить с 1С в пользу Оракла
225 Aleksey
 
08.08.13
22:15
и вот хотелось бы понимания за счёт чего можно ускорить пометку, и желательно не на 5% и не в 1,5 раза, а минимум раз в 5
226 Рэйв
 
08.08.13
22:15
(224)7-ка....
оо..  Сочувствую, бро:-)
Извини не знал, что все настолько плохо:-)
227 Demiurg
 
08.08.13
22:17
(217) ТОЛЬКО НА ВРЕМЯ СБОРА ДАННЫХ ПО ИСЛЛЕДУЕМОЙ СТРОКЕ поставьте 1й порог в 0, он соберет все запросы
на долго не оставляйте, иначе огого :) сколько нагребет

покажите скриншот с планом запроса сюда
228 Aleksey
 
08.08.13
22:17
(226) ну я же не виноват, что по скорости записи и работы 8-ка и рядом не стояла

P.S. для аналитике есть общаяя база на 8-ке, где в принципе не критично скорость записи ибо там документы никто не бъет, только робот заливает данные
229 Aleksey
 
08.08.13
22:19
(227) ставил 3 секунды ничего он не ловит
230 Рэйв
 
08.08.13
22:21
(228)Каждый инструмент предназначен для своего дела.
Микроскопом тоже какбэ не годится гвозди заколачивать.
7-ка может быстра на небольших объемах данных. Но если бы не появились ОЧЕНЬ большие объемы - 8 ка бы так  и не была придумана.
231 Aleksey
 
08.08.13
22:22
хотя при условии что вызывается 20 раз и общее время 10 секунд получается по 0,5 на запрос
232 Aleksey
 
08.08.13
22:23
(230) Согласен, поэтому аналитическая база в которой уже данные минимум за 8 лет по всему холдингу на 8-ке, ибо 7-ка не тянет эти объемы.

А шустрая быстрая база, которая периодически режется - идеально летает на 8-ке
233 Aleksey
 
08.08.13
22:23
* летает на 7-ке конечно же
234 Aleksey
 
08.08.13
22:33
(227) поставил 0, появилось куча файликов и папок в папке Query1с_3

вот только данных  в них нет
235 Aleksey
 
08.08.13
22:33
то что аботает это без сомнения потому в течении дня он каких то запросов нахватал.

Вопрос сервер надо перенружать после изменения настроек?
236 Aleksey
 
08.08.13
22:41
Почему когда я ставлю 0 у меня в файле logcfg.xml пропадает информация об этом пороге и в папке  Query1с_1 нет никаких данных??

Вот так выглядит файл logcfg.xml если все 3 порога установить в 0


<?xml version="1.0" encoding="UTF-8"?>
<query:config xmlns:query="http://v8.1c.ru/v8/tech-log"/>;
237 Aleksey
 
08.08.13
22:42
а вот содержимого этого же файла если 1 порог установлен в 1, а 2ой и 3 ий в 0


<?xml version="1.0" encoding="UTF-8"?>
-<query:config xmlns:query="http://v8.1c.ru/v8/tech-log">; -<query:log xmlns:query="http://v8.1c.ru/v8/tech-log"; history="2" location="C:\LogTJ\Query1с_1"> -<query:event> <query:eq value="SDBL" property="Name"/> <query:ge value="10000" property="Duration"/> </query:event> -<query:event> <query:eq value="DBMSSQL" property="Name"/> <query:ge value="10000" property="Duration"/> </query:event> <query:property name="p:processName"/> <query:property name="t:computerName"/> <query:property name="t:connectID"/> <query:property name="dbpid"/> <query:property name="Context"/> <query:property name="Sql"/> <query:property name="Usr"/> <query:property name="planSQLText"/> </query:log> <query:plansql xmlns:query="http://v8.1c.ru/v8/tech-log"; location="C:\LogTJ\Query1с_1"/> </query:config>
238 Aleksey
 
08.08.13
22:47
поставил порог 0,1 секунды. Всё равно не ловит блох
239 Aleksey
 
08.08.13
22:52
отключил вообще регламентное задание которое формирует файл, выставил вручную порог 1 мс. пометил на удаления

запускаю обработать ....
Обработанно 3 769,323 КБайт
Отправлено запросов 0

Т.е. он работает данные собирает, но только хз что
240 Aleksey
 
08.08.13
22:58
прияем в файликах я вижу эти записи

ОбщийМодуль.ОбщегоНазначения.Модуль : 3645 : Набор.Записать();'
47:02.1669-1,DBMSSQL,6,p:processName=RAP_AC20_LTS,t:computerName=DBSRV,t:connectID=2053,Usr=,dbpid=58,Sql='SELECT TOP 1
1.0
FROM (SELECT
T2._Fld7853RRef AS Q_001_F_000RRef,
MIN(T2._Period) AS Q_001_F_001_
FROM _AccumRg7852 T2
WHERE (T2._RecorderTRef = ? AND T2._RecorderRRef = ?)
GROUP BY T2._Fld7853RRef) T1
LEFT OUTER JOIN (SELECT
? AS Q_002_F_000RRef,
? AS Q_002_F_001_
UNION SELECT
?,
?
UNION SELECT
?,
?
UNION SELECT
?,
?) T3
ON (T1.Q_001_F_000RRef = T3.Q_002_F_000RRef)
WHERE ((T1.Q_001_F_001_ <= T3.Q_002_F_001_) OR T3.Q_002_F_001_ IS NULL)
p_0: 0x000000C0
p_1: 0x9D90003048F00D8811E2E5552A9C7AC0
p_2: 0x00000000000000000000000000000000
p_3: 20010101000000
p_4: 0x9413001FC6D6A11511E121860C1C071A
p_5: 20010101235959
p_6: 0x8B17766177901B164EEDE95131F6DAC6
p_7: 20010101235959
p_8: 0x93F600248C9EB52811E001F82EABBBF9
p_9: 40130630235959
',planSQLText='
0, 0, 1, 0, 1E-007, 12, 0.0203, 1,   |--Compute Scalar(DEFINE:([Expr1005]=(1.0)))
0, 1, 1, 0, 1E-007, 9, 0.0203, 1,        |--Top(TOP EXPRESSION:((1)))
0, 1, 1, 0, 1.14E-006, 9, 0.0203, 1,             |--Filter(WHERE:([Expr1002]<=[Union1004] OR [Union1004] IS NULL))
0, 1, 1.05, 0, 1.18E-005, 23, 0.0203, 1,                  |--Nested Loops(Left Outer Join, OUTER REFERENCES:([T2].[_Fld7853RRef]))
0, 1, 1, 0, 1.1E-006, 31, 0.0146, 1,                       |--Stream Aggregate(GROUP BY:([T2].[_Fld7853RRef]) DEFINE:([Expr1002]=MIN([RAP_AC20_LTS].[dbo].[_AccumRg7852].[_Period] as [T2].[_Period])))
0, 1, 1, 0.0113, 0.0001, 31, 0.0146, 1,                       |    |--Sort(ORDER BY:([T2].[_Fld7853RRef] ASC))
0, 1, 1, 0.00313, 0.000158, 51, 0.00328, 1,                       |         |--Clustered Index Scan(OBJECT:([RAP_AC20_LTS].[dbo].[_AccumRg7852].[_AccumR7852_ByPeriod_TRN] AS [T2]), WHERE:([RAP_AC20_LTS].[dbo].[_AccumRg7852].[_RecorderTRef] as [T2].[_RecorderTRef]=[@P1] AND [RAP_AC20_LTS].[dbo].[_AccumRg7852].[_RecorderRRef] as [T2].[_RecorderRRef]=[@P2]))
0, 0, 2.28, 0, 0.0056, 15, 0.00561, 1,                       |--Merge Join(Union)
0, 0, 2.28, 0, 0.0056, 15, 0.00561, 1,                            |--Merge Join(Union)
0, 0, 2.28, 0, 0.0056, 15, 0.00561, 1,                            |    |--Merge Join(Union)
0, 0, 1, 0, 4.8E-007, 9, 1.64E-006, 1,                            |    |    |--Filter(WHERE:(STARTUP EXPR([RAP_AC20_LTS].[dbo].[_AccumRg7852].[_Fld7853RRef] as [T2].[_Fld7853RRef]=[@P3])))
0, 0, 1, 0, 1.16E-006, 9, 1.16E-006, 1,                            |    |    |    |--Constant Scan
0, 0, 1, 0, 4.8E-007, 9, 1.64E-006, 1,                            |    |    |--Filter(WHERE:(STARTUP EXPR([RAP_AC20_LTS].[dbo].[_AccumRg7852].[_Fld7853RRef] as [T2].[_Fld7853RRef]=[@P5])))
0, 0, 1, 0, 1.16E-006, 9, 1.16E-006, 1,                            |    |         |--Constant Scan
0, 0, 1, 0, 4.8E-007, 9, 1.64E-006, 1,                            |    |--Filter(WHERE:(STARTUP EXPR([RAP_AC20_LTS].[dbo].[_AccumRg7852].[_Fld7853RRef] as [T2].[_Fld7853RRef]=[@P7])))
0, 0, 1, 0, 1.16E-006, 9, 1.16E-006, 1,                            |         |--Constant Scan
0, 0, 1, 0, 4.8E-007, 9, 1.64E-006, 1,                            |--Filter(WHERE:(STARTUP EXPR([RAP_AC20_LTS].[dbo].[_AccumRg7852].[_Fld7853RRef] as [T2].[_Fld7853RRef]=[@P9])))
0, 0, 1, 0, 1.16E-006, 9, 1.16E-006, 1,                                 |--Constant Scan
'
47:02.1670-3,SDBL,5,p:processName=RAP_AC20_LTS,t:computerName=DBSRV,t:connectID=2053,Usr=
241 Aleksey
 
08.08.13
23:01
о а вот и сама обработка увидела ... отправлено 17 380
242 Aleksey
 
08.08.13
23:06
243 Aleksey
 
08.08.13
23:11
Правда не совсем понятно что нужно.... вот общая картина

https://dl.dropboxusercontent.com/u/4773325/План.jpg
244 КонецЦикла
 
09.08.13
01:41
Переходить на семерку предлагали?
245 Demiurg
 
09.08.13
02:07
выполните в менеджмент студио выбрав вашу базу данных следующие скрипт

USE RAP_AC20_LTS
GO
UPDATE STATISTICS dbo._AccumRg7852 WITH FULLSCAN
GO
UPDATE STATISTICS dbo._AccRg459 WITH FULLSCAN
GO
DBCC FREESYSTEMCACHE ('all')
GO
DBCC FREEPROCCACHE
GO

(243) измениться ли после этого время исполнения запроса?
после выполнения скрипта "поймайте" снова план запроса для проблемной операции пожалуйста
246 Aleksey
 
09.08.13
07:30
(245) за исключение DBCC FREESYSTEMCACHE ('all') все остальные строки выполняется регламентом ночью

И нет, после выполнения скрипта время исполнения запроса не изменилась?
247 Fragster
 
модератор
09.08.13
08:21
(224) это на отмене проведения? и режим удаления движений "не удалять автоматически"?

случайно не в очень-очень далеком периоде это все происходит?
случайно не выключено разделение итогов? случайно не удалена проверка на наличие записей при записи пустого набора?
248 Aleksey
 
09.08.13
08:38
(247)
"это на отмене проведения? " - частично да, проведенный документ помечаю на удаления

"и режим удаления движений "не удалять автоматически"? " * Типовая БП 2.0, т.е. стоит "Не удалять автоматически"

"случайно не в очень-очень далеком периоде это все происходит?" - Нет. В базе 2 организации. по одной очень много документов, но все действия происходит по другой организации, по которой нет ни движений ни документов. Итоги рассчитаны по 30.06, тестовые документ проведён в июне, так что нет

"случайно не выключено разделение итогов?" - Нет ,по всем регистрам включен режим разделения итогов.

"случайно не удалена проверка на наличие записей при записи пустого набора?" - это уж я не знаю, самостоятельно ничего не добавлял и не убавлял, а уж что писатели типовой наворотили, могу поискать, если скажешь что искать.
249 Aleksey
 
09.08.13
08:41
на самом деле в тестовой базе порядка 30 документов реализации все они сформированы в июне-июле, но все они помечены на удаления, т.е. проведенных реализаций по этой организации нет
250 z01
 
09.08.13
09:05
(0)тии со всеми птичками?
251 z01
 
09.08.13
09:12
252 z01
 
09.08.13
09:16
(250) в (249)
и кстати что видно в профайлере?
253 Fynjy
 
09.08.13
09:29
(244) Кстати да ))
254 Aleksey
 
09.08.13
10:39
(252) Ты не умничай, ты пальцем покажи

В какой момент, что и как смотреть то?
255 Aleksey
 
09.08.13
10:40
(252) И да ТиИ со всеми галочками плюс ТиИ средствами Скуля
256 z01
 
09.08.13
12:48
(254)смотреть прежде всего нужно в монитор активности скульного сервера, делает ли он что-нибудь вообще в момент когда у тебя 1С подвисает, если он сильно занят рыть в него, но скорее всего нужно добавить процессов в сервер 1С и смотреть что делает винда под которой крутится этот агент
257 Demiurg
 
09.08.13
13:38
(246) приложите скриншот с планом запроса выполненого  после скрипта пожалуйста
258 Aleksey
 
09.08.13
13:41
(256) я в базе один (тестирую вечером когда никого нет). никаких "сложных" задач не выполняется, т.е. занятость его близка к нулю. (на скуле проц 16-ти ядерный (4-х головый AMD Opertron), 32 гига ОЗУ). Плюс тесты проводились несколько раз (раз 10 минимум пробовал серваки по очереди перегружать) и всегда время было +/- в пределах погрешности

Количество процессов в сервере сейчас 4 (сервер предприятия отдельная машина 12 ядер (2 - 6ти ядерных AMD Opertron) ОЗУ 16 Гигов)
259 Aleksey
 
09.08.13
13:47
(257) какой из? если тот который 'DELETE FROM T2, из  Набор.Записать(); так он до последней буквы и цифры совпадает с (242)
260 Aleksey
 
09.08.13
13:49
Собственно имя пользователя на https://skynet.gilev.ru/QueryTJ/ru_RU/ совпадает с ником я думаю доступ туда есть у вас
261 z01
 
09.08.13
16:43
(258)ну и как такое возможно чтобы на таком железе с такими настройками документы по полчаса проводились? конфа точно не старая и не самописная? винду скуль обновления и платформу ставили с дистрибутива или через танцы с бубном подменой файлов? можно кстати сделать удаление конфиденциальной информации типовой обработкой с итс и выложить - я бы посмотрел да и много кто ещё наверное тоже
262 z01
 
09.08.13
16:45
.net должен последний стоять
263 Demiurg
 
09.08.13
19:39
(259) https://lh3.googleusercontent.com/-672p8vY88KQ/UgUMIQHqcKI/AAAAAAAAEes/dkle2oOTyfQ/w1278-h605-no/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA1656.png

1) во сколько по времени вы выполнили наш скрипт?
2) выполняете запрос параллельно с рабой других пользователей или вы в базе монопольно?

по плану запроса "ожидаемое" количество строк не совпадает на два порядка с фактическим, обычно такое бывает при неактуальной статистике, поэтому хотелось бы увидеть план запроса сразу после обновления статистики нашим скриптом

3) какое количество строк в таблице всего?
можно посмотреть скриптом
USE RAP_AC20_LTS
GO
SELECT count(*) from dbo._AccRg459
264 Demiurg
 
09.08.13
19:47
есть некоторая несостыковка в том что говорите:

1. Нажимаю пометить на удаления. и .... жду чуть более 11 секунд
2. вы утверждаете что больше 90% приходиться на записать
3. согласно замерам запрос длится меньше секунды

можете проверить скорость в монопольном режиме?
давайте локализуем, куда именно при записи деваются еще 10 секунд
265 Demiurg
 
09.08.13
19:52
если в монопольном режиме будет работать существенно быстрее, то надо собрать данные через http://www.gilev.ru/latch/ и проанализировать ожидания на блокировках
266 Aleksey
 
09.08.13
20:18
(261) БП КОРП 2.0.50.3 платформа 8.2.18.109. почти типовая (мзменен нумератор в пределах дня + RLS для бухгалтера, остальное типовое. Ну т.е можно сказать типовая)

винда на сервере предприятия и на скуле 2008 R2 с SP1 (автообновление включено). MS SQL 2008, все с дистрибутиво вроде бы ставилось (я не админю ОС, 1С сам с дистрибутива ставил)

По поводу копиии.. там DT файл на 600 метров напряжно выкладывать и качать, но готов по тим вьюеру доступ потыкать дать, при условии что не поломаете ничего :)
267 Aleksey
 
09.08.13
20:22
(263)
1. выполнил скпит настроил логи, пометил - ничего не поймал. почистил логи пометил вот это он и показал. т.е. после выполнения только один этот документ проводился и помечался на удаления, больше ничего

2.  Один, не монопольно (ну т.е. не писал установитьМонопольныйРежим(истина)) в обычном режиме

3. 5084950
268 Aleksey
 
09.08.13
20:26
(264) это меня тоже удивило. я делал замер средствами 1С
https://dl.dropboxusercontent.com/u/4773325/Замер.pff

Он показывает

Модуль ОбщийМодуль.ОбщегоНазначения.Модуль
Строка Набор.Записать();
Кол. 20
Время (чистое)    10,802638
%Времени 96,94


Перегружал скуль серваки в принципе всегда получал примерно эти цифры (более 10,5 сек, 96-97% времени)


Это до скриптов и всего прочего
269 Aleksey
 
09.08.13
20:48
Запустил скрипт, установил монопольный режим, отключил ЖР (а вдруг?). Запустил замер средствами 1С и запустил пометку ... чудо не произошло


Время чистое - 10,155058 (96,79%)
270 Demiurg
 
09.08.13
21:34
(269)
появился спортивный интерес:

1) потенциально "большой обьем данных"

пока как я понял мы имеем запись в 10 секунд документа, который вставляет чуть больше 2 тысяч строк в таблицу с 5 миллионами строк

если дело в объеме данных, тогда если вы будете писать в пустую таблицу, то время будет другое, но тогда замер запроса "врет"

если замер запроса все таки правильный, а это можно дополнительно проверить, если программно получить время перед методом записать и еще раз программно получить время сразу после метода записать и посчитать разницу, то
кроме этого запроса в секунду должны быть:
а) другие запросы, пускай даже быстрые, но если их 10 штук будет, то может и правда 10 секунд набежит
- проверить можно профайлером
б) если только один запрос, то надо получить время начало записи метода и сравнить с временем начала метода запроса, т.е. нам надо оценить нет ли там несколько секундных интервалов, это может быть при передаче данных по сети с участием антивируса, я такое уже видел

Наверное все таки нужен будет тимвьювер, давайте попробую посмотреть в понедельник, наберите меня в скайп gilev_slava :)
271 Aleksey
 
09.08.13
21:39
(270) лучше в нерабочее время, чтобы никто не мешал
272 Demiurg
 
09.08.13
21:41
(271) хорошо, воскресенье вечер или понедельник вечер
я сейчас -> на дачу :)
273 z01
 
12.08.13
11:33
и?
274 Aleksey
 
14.08.13
16:15
(273) У провайдера были проблемы с инетом, сейчас вроде бы починили, так что в ближайшее время будет продолжения
275 z01
 
14.08.13
17:11
ждем-с )))
276 Odavid
 
15.08.13
10:56
(14)>>даже tempDB лежит на рамдрайве
Если оптимизируешь по Гилеву - то и спрашивай его, почему он только анальгин знает и назначает его от всех болезней.
277 Odavid
 
15.08.13
11:01
(169)>>А он поможет
Поможет для случая "доктор, ну, если не знаете - так лечите хотьь от чего-нибудь, я ж деньги за это плачу!!"
Для всех остальных случаев - там набор накопированных советов со словом "SQL".
278 Odavid
 
15.08.13
11:10
(217)>>ничего не нашел он
А там ничего и не ищется особо.
Считаются какие-то попугаи, и анализируется очевидное: когда клиент запускает проведение документа и ждет 20 минут, сервис сообщает: "у вас проблема с проведением этого документа".
Это все расчитано на тех, чей пример сообщения внесен в статью:
"...запускаем обработку (т.н. Робот).. лажа с этим MS SQL (мать их)...."
Вот для них и придуманы все эти сервисы и тестилки от 1С.