Имя: Пароль:
1C
1С v8
Бешеные тормоза после переноса на MS SQL
0 Альбатрос
 
11.05.15
10:36
После переноса переписанной файловой базы УТ 10.3 на MS SQL наблюдается лютые тормоза при работе с ней. Пользователей немного, штук 15 одновременной работы.При проведении ОРП с ТЧ в 226 строк система задумывается на 2(!) минуты, при чем 97% времени на строчку:
УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров(Ссылка, Движения.СписанныеТовары.Выгрузить()); Ну и формирование всяких отчетов стало занимать намного больше времени.
На этом же сервере крутится еще 4 базы, с ними таких проблем нет. Настройки БД у всех одинаковые. Вроде и гуглил, и статейки всякие читал - причину найти не могу. Спасайте!

Вводные:
8-ядерный Xeon CPU E5-2407
32Гб оперативной памяти
SCSI винт (на котором базы)
База УТ 10.3 размером в почти 9 Гб
Платформа 1С:Предприятие 8.2 (8.2.19.90)
Сервер 1с предприятия находится на другом компе
Если нужна еще какая-нибудь информация - скажите.

Насоветуйте чего-нибудь.
1 Альбатрос
 
11.05.15
10:37
+ Microsoft SQL Server 2008 R2
2 shuhard_серый
 
11.05.15
10:43
(0)[SCSI винт]
не верю (с)
3 Andrewww123
 
11.05.15
10:50
Я бы на индексы обратил внимание. Ну и регламентные процедуры обязательно настроить(проверить выполняются ли).
4 Альбатрос
 
11.05.15
10:50
(2) SCSI\DiskIBM_____ServeRAID_M5110_3.24
5 Альбатрос
 
11.05.15
10:52
(3) Можно поподробней? желательно статью, где эти проблемы описываются
6 shuhard_серый
 
11.05.15
10:56
(5) http://www.gilev.ru/mssqlserver/
в хвосте

(4) это не скази, это название драйвера рэйда
7 Andrewww123
 
11.05.15
10:56
(5)
Про индексы. Вот таким запросом можно смотреть статистику по отсутствующим индексам. В конце дня нужно выполнить и если есть в результате какие-то строки, то нужно разбираться и создавать индексы.
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(512),
[Число компиляций] 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, это обычно означает, что индекс может обеспечить значительное повышение производительности для операций чтения.
--------------------------------------------------------------------------------------------
IF (object_id('tempdb..##IndexAdvantage2') IS NOT NULL) DROP TABLE ##IndexAdvantage2
SELECT * FROM ##IndexAdvantage WHERE [Преимущество индекса] >= 5000 ORDER BY 1 DESC

Стырено с инфорстарта, кажется.

Про регламентные процедуры статей куча, в гугле "регламентные процедуры sql 1с".
8 Альбатрос
 
11.05.15
11:00
(6) ну я хз, это мне админ так говорил, а (4) это из ИД оборудования, единственное, на что у меня есть права посмотреть
9 shuhard_серый
 
11.05.15
11:02
(8) не парься,
подними регламенты
и начни с того, фулл у тебя в бэкапе или симпл, где темп сидит и далее по списку
10 Fragster
 
гуру
11.05.15
11:04
отладка на сервере включена? разбей строку из (0) на две - одна для получения ТЗ из движений, другая для выполнения процедуры общего модуля
11 Альбатрос
 
11.05.15
11:07
(10) Отладка на сервере отключена. Строки разбил, получение ТЗ из движения не занимает времени, что тормозит в общем модуле - посмотреть не могу.
12 Альбатрос
 
11.05.15
11:07
(9) в бэкапе симпл
13 Fragster
 
гуру
11.05.15
11:13
(11) так включи отладку на сервере, бро. наверняка тормозит один запрос, который банальным выносом виртуальных таблиц из соединения во временные, а потом уже соединение со временными таблицами ускорится раз в пять.
14 vde69
 
11.05.15
11:26
для начала - регламенты!!! обновление статистики и индексы...

дальше несколько дней ждать и если все будет плохо - писать сюда
15 Альбатрос
 
11.05.15
11:52
(14) регламенты есть только по индексам, обновление статистики добавил и сразу провел на проблемной базе - результат 0.
16 Альбатрос
 
11.05.15
11:53
(14) Эффект будет только через несколько дней? ))))
17 Альбатрос
 
11.05.15
11:56
(13) Это в реестр лезть надо?
18 dmrjan
 
11.05.15
13:56
Как вариант - поднять базу на PostgreSQL, которая в отличие от MSSQL не жрет всю память и при правильных запросах в 1с  почти не блокирует данные на чтение. И посмотреть - если оперативки не станет хватать, значит дело в некорректных запросах. Я в свое время на Linux с помощью Htop выявил некорректный запрос.
19 Альбатрос
 
11.05.15
13:58
(18) Да, такая мысль тоже была, спасибо.
Вечером подключим отладку на сервере, регламентные я поднял. осмотрим короче...
20 H A D G E H O G s
 
11.05.15
14:03
1. Регламенты.
2. Переписать партионное списание на годный код.
3. Реализовать управляемые блокировки.

Но так как nobody_cares, то все останется как есть.
21 floody
 
11.05.15
14:42
(20) +146%, соник дело говорит
22 ДенисЧ
 
11.05.15
14:43
(18) "поднять базу на PostgreSQL, которая в отличие от MSSQL не жрет всю память и при правильных запросах в 1с  почти не блокирует данные на чтение"

Точнее - всё наоборот )))
23 ILM
 
гуру
11.05.15
14:56
(20) Подробнее можно по п.2? Можно на почту.
24 ILM
 
гуру
11.05.15
14:58
+(23) да и по п.3 интересно. Так как пишут многие, а реализаций не видел.
25 Lamer1C
 
11.05.15
15:42
(0) попробуй статистику обновить. проверь. потом индексы перестроить, если 1 не поможет. а так причин может быть очень много...
26 Fragster
 
гуру
11.05.15
15:52
(25) например древний релиз УТ, в котором соединяются виртуальные таблицы
27 Drac0
 
11.05.15
16:15
(0) проверь в настройках скуля Max degree of parallelism (DOP). Скинь в 0 и проверь.
28 Lamer1C
 
11.05.15
16:21
(27) для MS SQL Server лучше наоборот 1 ставить.
29 Lamer1C
 
11.05.15
16:22
(27) точнее для баз 1С
30 Drac0
 
11.05.15
16:24
(28) Я точно не помню. Просто была непонятная фигня со сложным запросом: вплоть до вешанья сервака. Оказалось, что в DOP было дикое число, скуль паралеллил и сам потом развлекался с этими потоками, ни на что больше не реагируя :)
31 Lamer1C
 
11.05.15
16:27
(30) ну тогда  точно в 0 ставил :) это параметр отвечает за распараллеливание операций для многоядерных процессоров: 0 - это неограниченно
32 Lamer1C
 
11.05.15
16:28
(31) т.е. в 1 ))
33 orangekrs
 
11.05.15
17:43
Ну да, в остальными базами всё ок. Тем не менее, а что показывает тест гилева ? http://www.gilev.ru/tpc1cgilv/
34 orangekrs
 
11.05.15
17:44
А, шаг увеличения тмп файла у скл увеличен ? (по умолчанию он 1мб)
35 Kvant1C
 
11.05.15
17:56
(0) Посмотри какое приращение установлено для базы данных, если оно слишком маленькое, то возможно, что сервер только и занимается приращением бд при каждом добавлении записей, отсюда и тормоза могут быть
36 H A D G E H O G s
 
11.05.15
18:37
(23) Скинул на почту
37 vde69
 
11.05.15
19:00
38 Альбатрос
 
14.05.15
05:22
Max degree of parallelism (DOP) значение 1
У меня такая проблема, при добавлении строчки -debug у меня перестает запускаться агент на сервере.

Вот такая ошибка, это мне админ прислал:

Имя журнала:   System
Подача:        Microsoft-Windows-DistributedCOM
Дата:          14.05.2015 8:03:56
Код события:   10016
Категория задачи:Отсутствует
Уровень:       Ошибка
Ключевые слова:Классический
Пользователь:  1CSERVER\USR1CV82
Компьютер:     1CSERVER.kom-kastor.local
Описание:
Параметры разрешений для конкретного приложения не дают разрешения Локальный Активация для приложения COM-сервера с CLSID
{BA126AD1-2166-11D1-B1D0-00805FC1270E}
пользователю 1CSERVER\USR1CV82 с SID (S-1-5-21-4102014034-2086728852-1080897402-1002) и адресом LocalHost (с использованием LRPC). Это разрешение безопасности можно изменить с помощью служебной программы управления службами компонентов.
Xml события:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">;
  <System>
    <Provider Name="Microsoft-Windows-DistributedCOM" Guid="{1B562E86-B7AA-4131-BADC-B6F3A001407E}" EventSourceName="DCOM" />
    <EventID Qualifiers="49152">10016</EventID>
    <Version>0</Version>
    <Level>2</Level>
    <Task>0</Task>
    <Opcode>0</Opcode>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2015-05-14T01:03:56.000Z" />
    <EventRecordID>792819</EventRecordID>
    <Correlation />
    <Execution ProcessID="0" ThreadID="0" />
    <Channel>System</Channel>
    <Computer>1CSERVER.*******.local</Computer>
    <Security UserID="S-1-5-21-4102014034-2086728852-1080897402-1002" />
  </System>
  <EventData>
    <Data Name="param1">для конкретного приложения</Data>
    <Data Name="param2">Локальный</Data>
    <Data Name="param3">Активация</Data>
    <Data Name="param4">{BA126AD1-2166-11D1-B1D0-00805FC1270E}</Data>
    <Data Name="param5">1CSERVER</Data>
    <Data Name="param6">USR1CV82</Data>
    <Data Name="param7">S-1-5-21-4102014034-2086728852-1080897402-1002</Data>
    <Data Name="param8">LocalHost (с использованием LRPC)</Data>
  </EventData>
</Event>


Я так понимаю, там что-то с настройками безопасности. Админ комментариев не дает. Подскажите, что не так?
39 Альбатрос
 
14.05.15
05:40
для (38) вроде вот решение, вечером только проверим
http://forum.kaspersky.com/lofiversion/index.php/t161843.html
40 Альбатрос
 
14.05.15
06:36
(34) увеличил до 200 - по фигу...
для журнала тоже
41 vde69
 
14.05.15
09:48
(28)для 8 лучше ставить 0, это для 7.7 надо ставить 1
42 Альбатрос
 
14.05.15
10:07
(41) вернул обратно на ноль
43 Альбатрос
 
14.05.15
10:08
sql server 2008 r2 best practices analyzer ничего страшного не выяснил
44 leonidkorolev
 
14.05.15
10:38
(0) Я бы посмотре что внутри этой процедуры тормозит.

УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров(Ссылка, Движения.СписанныеТовары.Выгрузить())
45 Альбатрос
 
14.05.15
10:59
(44) для этого надо отладку на сервере включить, а это не получается пока
46 Гёдза
 
14.05.15
11:03
(45) без этого дальнейший разговор бессмысленный.
Может там блокировки идут
47 leonidkorolev
 
14.05.15
11:05
(45) Ну ок. Можно в профайлере посмотреть что происходит на скуле в момент выполнения этой процедуры. Поставь точку останова на процедуру, перед выполнение запусти профайле и смотри самые тяжелые запросы.
48 vde69
 
14.05.15
11:05
(45) сделай (37)...
49 Альбатрос
 
14.05.15
11:12
(48) Я несколько хз, где это запускать :))) И не понял, что конкретно этот скрипт делает. Буду рад пояснениям )))
50 vde69
 
14.05.15
11:14
(49) запускать в скуле, скрипт выводит статистику ожидания блокировок (показывает слабые места)
51 Альбатрос
 
14.05.15
11:21
(50) Этот скрипт будет 5 часов мониторить при первом значении в 300?
52 vde69
 
14.05.15
11:21
(51) да
53 Альбатрос
 
14.05.15
11:24
(52) Поставил на 5 минут и начал проведение проблемного документа, жду...
54 Klesk666
 
14.05.15
11:25
+(33) прогони тест Гилева
55 Kvant1C
 
14.05.15
11:27
(40) Проверь размер приращения БД, вот полезная статья на эту тему: http://www.sql.ru/blogs/dbasimple/1924

не поленись прочитать
56 Альбатрос
 
14.05.15
11:28
(52) Таааак, а результат в мс?
57 Klesk666
 
14.05.15
11:28
какая конфигурация дисковой системы?
58 vde69
 
14.05.15
11:29
(56) там в % куда нагляднее... нормально когда запись и чтение диска занимает 5-15%
59 Альбатрос
 
14.05.15
11:29
(54) (55) Ок, спасибо. Щас после оценки результата из (37) займусь
60 Klesk666
 
14.05.15
11:30
может админы все на один диск запихали
61 Альбатрос
 
14.05.15
11:30
(58) LAZYWRITER_SLEEP процент  = 25
62 slavikzzz
 
14.05.15
11:30
вот еще статья по оптимизации + делали пересчет итогов
http://1cgmix.ru/base/base1c/30-optimize1cupp
63 Альбатрос
 
14.05.15
11:31
(60) Рейд массив там вроде как. А так да, все на одном диске
64 vde69
 
14.05.15
11:31
(61) запускать на менее часа смысла нет...
65 Альбатрос
 
14.05.15
11:32
(64) Надо ведь и нагрузку тогда обеспечить на проблемную базу для хорошего результата, не?
66 Kvant1C
 
14.05.15
11:33
Кстати на счет дисков, был такой случай когда проблемы на новом сервере были связаны именно с дисками, был косяк с контроллером, после настройки проблема ушла.
В общем не лишне саму дисковую подсистему проверить на скорострельность.
67 Альбатрос
 
14.05.15
11:34
(66) Ну как бэ я не могу это сделать, а сисадмин по-любому скажет, что все норм и проверять не надо.
68 Kvant1C
 
14.05.15
11:34
(65) Попробуй бэкап свернуть/развернуть
69 Klesk666
 
14.05.15
11:34
а не проблемные базы типовые?
70 vde69
 
14.05.15
11:35
(65) запускать нужно на рабочем сервере во время обычной работы юзеров... никаких эмуляторов, перепроведений и т.д.

там анализируется например время отклика клиента и т.д. то есть ситема в целом а не сервер
71 Kvant1C
 
14.05.15
11:36
(67) >>сисадмин по-любому скажет, что все норм и проверять не надо

ну тогда скажи ему чтобы он со скулем тогда сам боролся...
72 Альбатрос
 
14.05.15
11:38
(69) да, и все обновленные до последнего релиза. А проблемная это "Управление торговлей", редакция 10.3 (10.3.18.3)

(71) Ну он заявит что проблема в самой базе. При этом его заявление будет выглядеть логичным, ведь остальные базы не тормозят.

(70) Запустил на час без нагрузки, кроме обычной
73 Kvant1C
 
14.05.15
11:42
(72) Ну тогда проблемы с диском можно отмести.
74 Альбатрос
 
14.05.15
11:43
(73) Размер прироста выставлен в 200 мб при базе в 9гб. Судя по статье - норм показатель.
75 Гёдза
 
14.05.15
11:45
(72) один работаешь или нет? Может регламент какой блокировки накладывает?
76 Гёдза
 
14.05.15
11:46
Если только с этой базой так на этом сервере, то очень вероятно что именно они
77 Klesk666
 
14.05.15
11:46
(73) это если база располагается также как остальные
78 Альбатрос
 
14.05.15
11:52
(75) Нет, не один. На протяжении рабочего дня регламентов нет.
79 dmrjan
 
14.05.15
11:52
Попробуй в MSSQL включить регулятор запросов, и поставь 2000-10000, документы будет проводится быстрее, а вот кто больше всего начнет кричать, у того и смотри. Обычно отчеты сами начинают ругаться на этот параметр.
80 dmrjan
 
14.05.15
11:53
Начни с 2000.
81 Альбатрос
 
14.05.15
11:54
(79) Это не скажется на работе других баз?
82 dmrjan
 
14.05.15
11:55
(81) Если скажется, значит не все в порядке с другими базами. Но это не смертельно, всегда можно отключить это значение. Или поменять.
83 dmrjan
 
14.05.15
11:57
Кстати - какой у тебя размер tempdb?
84 Kvant1C
 
14.05.15
12:00
(74) Модель восстановления какая устновлена, full или simple? Если full, то поменяй на simple.
85 Альбатрос
 
14.05.15
12:01
(84) Simple
86 Альбатрос
 
14.05.15
12:01
(83) Где посмотреть? ))))
87 dmrjan
 
14.05.15
12:04
В системных базах данных (86)
88 vde69
 
14.05.15
12:06
да не мечись... надо делать все по порядку, иначе на одни результаты будут наслаивается твои эксперименты...

оптимизация - она не быстрая... сделал проверил подумал, потом снова можно делать
89 Зеленый пень
 
14.05.15
12:12
(45) Тогда сделай копию базы, там у модуля поставь галку "клиент" и отлаживай.
90 dmrjan
 
14.05.15
12:14
Может проблема в том, что в файловой версии было прописано, что процедура выполняется локально, а нужно на сервере? Посмотри - при проведении - сколько у тебя грузится сеть.
91 Альбатрос
 
14.05.15
12:44
(89) Ошибки валятся про мутабельные значения
92 Альбатрос
 
14.05.15
12:46
(88) Тест ничего особо не показал, кроме LAZYWRITER_SLEEP, у нее 21 %, все остальные не превышают 12
Может все-таки нагрузить ее?
93 Альбатрос
 
14.05.15
12:47
(90) Но ведь тогда замер бы на нее сработал, нет?
94 Альбатрос
 
14.05.15
12:48
(87) Tempdb = 8мб, прирост 10%
95 Альбатрос
 
14.05.15
12:49
+(92) ghjcnj ,fpf ctqxfc vj;tn ,snm yt jcj,j yfuhe;tyf gjkmpjdfntkzvb
96 Альбатрос
 
14.05.15
12:49
+(92) просто база сейчас может быть вообще не нагружена пользователями
97 0wl
 
14.05.15
13:00
(94) Получается, сервер недавно перезагружал?

Для tempdb это очень маленький размер, поставь изначальный размер хотябы Мб 500, иначе постоянно будут блокировки на расширении файла данных.

И я пропустил, индексы уже перестраивал? Если нет, запусти на ночь, днем перестроение индексов помешает работе пользователей
98 Альбатрос
 
14.05.15
13:01
(97) Индексы регламентом перестраиваются в воскресенье - не помогло... Сервер перегружали сегодня ночью.
99 vde69
 
14.05.15
13:21
(92) так ты выложи табличку...
100 dmrjan
 
14.05.15
13:28
(94) (97) Получается база небольшая?
101 dmrjan
 
14.05.15
13:31
(93) Замер мог и не сработать, ведь если запрос большой, то как раз пару минут данные и перекачиваются на твой компьютер, где потом происходит выборка.
102 Альбатрос
 
14.05.15
13:56
(99) табличка результата
http://my-files.ru/jgf2g3
103 vde69
 
14.05.15
13:58
(102) сюда ТЕКСТ скопируй...

а то у многих помойки заблокированы
104 Альбатрос
 
14.05.15
14:05
***total***;                    30759327.0;      100.0
LAZYWRITER_SLEEP;               6494140.0;       21.1
XE_TIMER_EVENT;                 3571619.0;       11.6
LOGMGR_QUEUE;                   3536668.0;       11.5
REQUEST_FOR_DEADLOCK_SEARCH;    3545187.0;       11.5
SQLTRACE_INCREMENTAL_FLUSH_SLEEP;3535646.0;      11.5
FT_IFTS_SCHEDULER_IDLE_WAIT;    3480672.0;       11.3
CHECKPOINT_QUEUE;               2967207.0;       9.6
SLEEP_TASK;                     1774646.0;       5.8
BROKER_TO_FLUSH;                1771903.0;       5.8
SLEEP_BPOOL_FLUSH;              20295.0;         0.1
CHKPT;                          0.0;             0.0
105 Альбатрос
 
14.05.15
14:06
Остальные по процентам нули
106 vde69
 
14.05.15
14:11
у тебя статистика запросов не обновляется, поставь раз в час и проверь, что реально срабатывает... потом жди сутки двое, потом повтори
107 vde69
 
14.05.15
14:12
(106)+ план запросов кривой строится.
108 Альбатрос
 
14.05.15
16:36
(106) Попробую, спасибо
(107) можно поподробней про план запросов?
109 mr_K
 
14.05.15
16:51
Я в УТ не силен, но в УПП переписав думаю аналогичную процедуру УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров получил жутчайший прирост производительсти.
До этого были испробованы буквально все танцы с бубном вокруг SQL с практически нулевыми результатами.
110 Fragster
 
гуру
14.05.15
17:16
(109) я об этом еще в (13) написал - что неплохо бы замер производительности сделать
111 Альбатрос
 
15.05.15
05:24
(109) (110) Да, так и есть. Подключили мне наконец отладку на сервере и замер показал 92% времени выполнения на вот эту строчку - Возврат Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
112 Альбатрос
 
15.05.15
05:25
начинаю ковырять запрос )))
113 Альбатрос
 
15.05.15
05:28
Уважаемые, киньте пожалуйста информацией по оптимизации запросов для клиент-серверной работы базы.
114 Альбатрос
 
15.05.15
07:27
Прошу советов )))) Помогите, укажите где исправить:

    Запрос.Текст =
    "ВЫБРАТЬ
    |    СписанныеТовары.НомерСтрокиДокумента КАК НомерСтрокиДокумента,
    |    ПартииТоваровНаСкладах.Номенклатура,
    |    ПартииТоваровНаСкладах.ДокументОприходования КАК ДокументОприходования,
    |    ПартииТоваровНаСкладах.ДокументОприходования.Дата КАК ДокументОприходованияДата,
    |    ПартииТоваровНаСкладах.Склад,
    |    ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры,
    |    ПартииТоваровНаСкладах.СерияНоменклатуры,
    |    ПартииТоваровНаСкладах.Качество,
    |    ПартииТоваровНаСкладах.Заказ,
    |    ПартииТоваровНаСкладах.КоличествоОстаток КАК Количество,
    |    ПартииТоваровНаСкладах.СтоимостьОстаток КАК Стоимость,
    |    ПартииТоваровНаСкладах.СтатусПартии,
    |    ВЫБОР
    |        КОГДА СписанныеТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры
    |            ТОГДА 0
    |        ИНАЧЕ 1
    |    КОНЕЦ КАК ЧислоСерияНоменклатуры,
    |    ВЫБОР
    |        КОГДА СписанныеТовары.ДокументПартии = НЕОПРЕДЕЛЕНО
    |            ТОГДА 0
    |        ИНАЧЕ ВЫБОР
    |                КОГДА СписанныеТовары.ДокументПартии = ПартииТоваровНаСкладах.ДокументОприходования
    |                    ТОГДА 0
    |                ИНАЧЕ 1
    |            КОНЕЦ
    |    КОНЕЦ КАК ЧислоДокументОприходования,
    |    ВЫБОР
    |        КОГДА СписанныеТовары.ЗаказПартии = НЕОПРЕДЕЛЕНО
    |            ТОГДА 0
    |        ИНАЧЕ ВЫБОР
    |                КОГДА ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ
    |                    ТОГДА 1
    |                ИНАЧЕ 0
    |            КОНЕЦ
    |    КОНЕЦ КАК ЧислоЗаказ,
    |    ВЫБОР
    |        КОГДА ПартииТоваровНаСкладах.СтатусПартии = &НаКомиссию
    |            ТОГДА 1
    |        ИНАЧЕ 0
    |    КОНЕЦ КАК ЧислоСтатусПартии
    |ИЗ
    |    РегистрСведений.СписанныеТовары КАК СписанныеТовары
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
    |        &Дат,
    |        Номенклатура В
    |            (ВЫБРАТЬ
    |                РегистрСведений.СписанныеТовары.Номенклатура
    |            ИЗ
    |                РегистрСведений.СписанныеТовары
    |            ГДЕ
    |                РегистрСведений.СписанныеТовары.Регистратор = &Ссылка)" + ?(ВестиПартионныйУчетПоСкладам, "
    |        И (Склад В
    |            (ВЫБРАТЬ
    |                РегистрСведений.СписанныеТовары.Склад
    |            ИЗ
    |                РегистрСведений.СписанныеТовары
    |            ГДЕ
    |                РегистрСведений.СписанныеТовары.Регистратор = &Ссылка) ИЛИ Склад = &ПустойСклад)", "") + ") КАК ПартииТоваровНаСкладах
    |        ПО СписанныеТовары.Номенклатура = ПартииТоваровНаСкладах.Номенклатура
    |            И СписанныеТовары.ХарактеристикаНоменклатуры = ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры
    |            И (ВЫБОР
    |                КОГДА ПартииТоваровНаСкладах.Качество = &ПустоеКачество
    |                    ТОГДА ИСТИНА
    |                ИНАЧЕ ВЫБОР
    |                        КОГДА СписанныеТовары.Качество = &ПустоеКачество
    |                            ТОГДА ПартииТоваровНаСкладах.Качество = &КачествоНовый
    |                        ИНАЧЕ ПартииТоваровНаСкладах.Качество = СписанныеТовары.Качество
    |                    КОНЕЦ
    |            КОНЕЦ)
    |            " + ?(ВестиПартионныйУчетПоСкладам, "И (ПартииТоваровНаСкладах.Склад = СписанныеТовары.Склад ИЛИ ПартииТоваровНаСкладах.Склад = &ПустойСклад)", "") + "
    |            И (ВЫБОР
    |                КОГДА СписанныеТовары.ДопустимыйСтатус1 <> &ПустойСтатус
    |                        ИЛИ СписанныеТовары.ДопустимыйСтатус2 <> &ПустойСтатус
    |                        ИЛИ СписанныеТовары.ДопустимыйСтатус3 <> &ПустойСтатус
    |                        ИЛИ СписанныеТовары.ДопустимыйСтатус4 <> &ПустойСтатус
    |                    ТОГДА ПартииТоваровНаСкладах.СтатусПартии = &ПустойСтатус
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = &СтатусПартииПоОрдеру
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус1
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус2
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус3
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус4
    |                ИНАЧЕ ИСТИНА
    |            КОНЕЦ)
    |    
    |        И (ВЫБОР
    |            КОГДА СписанныеТовары.СписыватьТолькоПоЗаказу = ИСТИНА
    |                ТОГДА ВЫБОР
    |                        КОГДА ПартииТоваровНаСкладах.Заказ <> СписанныеТовары.ЗаказПартии
    |                            ТОГДА ВЫБОР
    |                                    КОГДА (НЕ СписанныеТовары.ЗаказПартии = НЕОПРЕДЕЛЕНО)
    |                                        ТОГДА ЛОЖЬ
    |                                    ИНАЧЕ ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ
    |                                КОНЕЦ
    |                        ИНАЧЕ ИСТИНА
    |                    КОНЕЦ
    |            ИНАЧЕ ВЫБОР
    |                    КОГДА ПартииТоваровНаСкладах.Заказ <> СписанныеТовары.ЗаказПартии
    |                        ТОГДА ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ
    |                    ИНАЧЕ ИСТИНА
    |                КОНЕЦ
    |        КОНЕЦ)
    |        И (СписанныеТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры
    |            ИЛИ ПартииТоваровНаСкладах.СерияНоменклатуры = &ПустаяСерияНоменклатуры)
    |ГДЕ
    |    СписанныеТовары.Регистратор = &ОсновнойДокумент
    |
    |УПОРЯДОЧИТЬ ПО
    |    ЧислоСерияНоменклатуры,
    |    ЧислоДокументОприходования,
    |    ЧислоЗаказ,
    |    ЧислоСтатусПартии" + ?(СтратегияСтатусПартии = Перечисления.СтретегииСписанияПартийТоваровПоСтатусам.СначалаПринятыеПотомСобственные, " Убыв", "") + ",
    |    ДокументОприходованияДата" + ?(СпособОценкиМПЗ = "ЛИФО", " Убыв","") + ",
    |    ДокументОприходования" + ?(СпособОценкиМПЗ = "ЛИФО", " Убыв","") + "
    |ИТОГИ ПО
    |    НомерСтрокиДокумента";
115 ЧеловекДуши
 
15.05.15
08:26
(114) Используй ВТ для отбора
116 ЧеловекДуши
 
15.05.15
08:29
+(114) >>> .Регистратор

Используй точный отбор:    .Регистратор Ссылка Документ.Такой-ТО

У тебя же известен Вид докмента, по которому ведется отбор, так накой ты все отбираешь.
По составному типу, 1С компилирует запрос так, что все документы, которые выступают регистратором, участвуют в отборе...
В общем этот момент уже на 50% ускорит зарос :)
117 ЧеловекДуши
 
15.05.15
08:32
Сдается мне, что у вас в БД все запросы нужно допиливать под SQL версию.
118 vde69
 
15.05.15
08:58
тормозит вот это РегистрСведений.СписанныеТовары.Регистратор = &Ссылка"

вынеси этот запрос во ВТ и проиндексируй поля по которым джойнишь


это для начала :)
119 vde69
 
15.05.15
08:59
(118) и не забудь привести тип регистратора в ВТ, там наверняка составной, а они во ВТ тупят прилично...
120 Альбатрос
 
15.05.15
09:14
(116) (118) (119) Спасибо, сейчас буду пробовать
121 Альбатрос
 
15.05.15
09:14
(117) К моей великой печали это скорей всего так
122 DayDreamer
 
15.05.15
09:17
возможно вопрос не к месту, но на серваке с SQL какой установлен план электропитания? максимальная производительность или нет?
123 Альбатрос
 
15.05.15
09:22
(122) Спрошу у админа как появится, у меня прав нет самому глянуть
124 DayDreamer
 
15.05.15
09:28
(123) и еще вопрос - сервер физический или виртуальный?
125 Альбатрос
 
15.05.15
10:22
(124) Физический
126 Альбатрос
 
15.05.15
10:24
Переделал пока вот так:

    
    "ВЫБРАТЬ
    |    СписанныеТовары.Номенклатура,
    |    СписанныеТовары.Склад
    |ПОМЕСТИТЬ ВТТоварыИСклады
    |ИЗ
    |    РегистрСведений.СписанныеТовары КАК СписанныеТовары
    |ГДЕ
    |    СписанныеТовары.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
    |    И СписанныеТовары.Регистратор = &Ссылка
    |;
    |
    |ВЫБРАТЬ
    |    СписанныеТовары.НомерСтрокиДокумента КАК НомерСтрокиДокумента,
    |    ПартииТоваровНаСкладах.Номенклатура,
    |    ПартииТоваровНаСкладах.ДокументОприходования КАК ДокументОприходования,
    |    ПартииТоваровНаСкладах.ДокументОприходования.Дата КАК ДокументОприходованияДата,
    |    ПартииТоваровНаСкладах.Склад,
    |    ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры,
    |    ПартииТоваровНаСкладах.СерияНоменклатуры,
    |    ПартииТоваровНаСкладах.Качество,
    |    ПартииТоваровНаСкладах.Заказ,
    |    ПартииТоваровНаСкладах.КоличествоОстаток КАК Количество,
    |    ПартииТоваровНаСкладах.СтоимостьОстаток КАК Стоимость,
    |    ПартииТоваровНаСкладах.СтатусПартии,
    |    ВЫБОР
    |        КОГДА СписанныеТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры
    |            ТОГДА 0
    |        ИНАЧЕ 1
    |    КОНЕЦ КАК ЧислоСерияНоменклатуры,
    |    ВЫБОР
    |        КОГДА СписанныеТовары.ДокументПартии = НЕОПРЕДЕЛЕНО
    |            ТОГДА 0
    |        ИНАЧЕ ВЫБОР
    |                КОГДА СписанныеТовары.ДокументПартии = ПартииТоваровНаСкладах.ДокументОприходования
    |                    ТОГДА 0
    |                ИНАЧЕ 1
    |            КОНЕЦ
    |    КОНЕЦ КАК ЧислоДокументОприходования,
    |    ВЫБОР
    |        КОГДА СписанныеТовары.ЗаказПартии = НЕОПРЕДЕЛЕНО
    |            ТОГДА 0
    |        ИНАЧЕ ВЫБОР
    |                КОГДА ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ
    |                    ТОГДА 1
    |                ИНАЧЕ 0
    |            КОНЕЦ
    |    КОНЕЦ КАК ЧислоЗаказ,
    |    ВЫБОР
    |        КОГДА ПартииТоваровНаСкладах.СтатусПартии = &НаКомиссию
    |            ТОГДА 1
    |        ИНАЧЕ 0
    |    КОНЕЦ КАК ЧислоСтатусПартии
    |ИЗ
    |    РегистрСведений.СписанныеТовары КАК СписанныеТовары
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
    |        &Дат,
    |        Номенклатура В
    |            (ВЫБРАТЬ
    |                ВТТоварыИСклады.Номенклатура
    |            ИЗ
    |                ВТТоварыИСклады)
    |        И (Склад В
    |            (ВЫБРАТЬ
    |                ВТТоварыИСклады.Склад
    |            ИЗ
    |                ВТТоварыИСклады) ИЛИ Склад = &ПустойСклад)) КАК ПартииТоваровНаСкладах
    |        ПО СписанныеТовары.Номенклатура = ПартииТоваровНаСкладах.Номенклатура
    |            И СписанныеТовары.ХарактеристикаНоменклатуры = ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры
    |            И (ВЫБОР
    |                КОГДА ПартииТоваровНаСкладах.Качество = &ПустоеКачество
    |                    ТОГДА ИСТИНА
    |                ИНАЧЕ ВЫБОР
    |                        КОГДА СписанныеТовары.Качество = &ПустоеКачество
    |                            ТОГДА ПартииТоваровНаСкладах.Качество = &КачествоНовый
    |                        ИНАЧЕ ПартииТоваровНаСкладах.Качество = СписанныеТовары.Качество
    |                    КОНЕЦ
    |            КОНЕЦ)
    |            И (ПартииТоваровНаСкладах.Склад = СписанныеТовары.Склад ИЛИ ПартииТоваровНаСкладах.Склад = &ПустойСклад)
    |            И (ВЫБОР
    |                КОГДА СписанныеТовары.ДопустимыйСтатус1 <> &ПустойСтатус
    |                        ИЛИ СписанныеТовары.ДопустимыйСтатус2 <> &ПустойСтатус
    |                        ИЛИ СписанныеТовары.ДопустимыйСтатус3 <> &ПустойСтатус
    |                        ИЛИ СписанныеТовары.ДопустимыйСтатус4 <> &ПустойСтатус
    |                    ТОГДА ПартииТоваровНаСкладах.СтатусПартии = &ПустойСтатус
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = &СтатусПартииПоОрдеру
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус1
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус2
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус3
    |                            ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус4
    |                ИНАЧЕ ИСТИНА
    |            КОНЕЦ)
    |    
    |        И (ВЫБОР
    |            КОГДА СписанныеТовары.СписыватьТолькоПоЗаказу = ИСТИНА
    |                ТОГДА ВЫБОР
    |                        КОГДА ПартииТоваровНаСкладах.Заказ <> СписанныеТовары.ЗаказПартии
    |                            ТОГДА ВЫБОР
    |                                    КОГДА (НЕ СписанныеТовары.ЗаказПартии = НЕОПРЕДЕЛЕНО)
    |                                        ТОГДА ЛОЖЬ
    |                                    ИНАЧЕ ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ
    |                                КОНЕЦ
    |                        ИНАЧЕ ИСТИНА
    |                    КОНЕЦ
    |            ИНАЧЕ ВЫБОР
    |                    КОГДА ПартииТоваровНаСкладах.Заказ <> СписанныеТовары.ЗаказПартии
    |                        ТОГДА ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ
    |                    ИНАЧЕ ИСТИНА
    |                КОНЕЦ
    |        КОНЕЦ)
    |        И (СписанныеТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры
    |            ИЛИ ПартииТоваровНаСкладах.СерияНоменклатуры = &ПустаяСерияНоменклатуры)
    |ГДЕ
    |    СписанныеТовары.Регистратор = &ОсновнойДокумент
    |
    |УПОРЯДОЧИТЬ ПО
    |    ЧислоСерияНоменклатуры,
    |    ЧислоДокументОприходования,
    |    ЧислоЗаказ,
    |    ЧислоСтатусПартии" + ?(СтратегияСтатусПартии = Перечисления.СтретегииСписанияПартийТоваровПоСтатусам.СначалаПринятыеПотомСобственные, " Убыв", "") + ",
    |    ДокументОприходованияДата" + ?(СпособОценкиМПЗ = "ЛИФО", " Убыв","") + ",
    |    ДокументОприходования" + ?(СпособОценкиМПЗ = "ЛИФО", " Убыв","") + "
    |ИТОГИ ПО
    |    НомерСтрокиДокумента";
127 Альбатрос
 
15.05.15
10:25
время выполнения упало с 2 минут до 6 секунд!
128 Альбатрос
 
15.05.15
10:25
Радуюся, млять, как пацан, которому водяной пистолет подарили
129 Альбатрос
 
15.05.15
10:26
Всем ОГРОМНОЕ спасибо, но , видимо, я эту ветку еще не раз подниму, ибо оптимизация только начинается (((
130 Гёдза
 
15.05.15
10:27
вот тут еще можно соптимизировать
ПартииТоваровНаСкладах.ДокументОприходования.Дата
131 Альбатрос
 
15.05.15
10:29
(130) Тоже вытащить в ВТ и соединить?
132 H A D G E H O G s
 
15.05.15
10:29
(131) Давай я те готовый модуль сброшу, а?
133 vde69
 
15.05.15
10:31
проиндексируй в ХП два поля

|    СписанныеТовары.Номенклатура,
|    СписанныеТовары.Склад


и еще у тебя в самом конце есть условие

ГДЕ
    |    СписанныеТовары.Регистратор = &ОсновнойДокумент


его или в джойн впихни или подними выше (сделай вложеный или ВТ)
134 Альбатрос
 
15.05.15
10:39
(132) Давай))) bearsin62@Gmail.com
и другие модули тоже было бы круто ))))
135 Альбатрос
 
15.05.15
10:41
(133) Ок, спасибо
136 serpentt
 
15.05.15
15:15
(134) извините за наглость а мне модуль не скините???
serpentariy@inbox.ru
137 adron
 
15.05.15
15:22
(0) а у тебя Microsoft SQL Server 2008 R2 случаем не  "Express" иль ещё какой урезанный ?. Админы любят такие ставить.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан