|
Прошу дать дельные ссылки на оптимизацию 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С. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |