Имя: Пароль:
1C
1С v8
Спецам SQL. Тормоза в списке документов (обычные формы, 8.2, SQL)
0 ptiz
 
30.10.17
10:38
Вводные данные:
Платформа 8.2.18.109, SQL 2008 standard
SQL-ю выделено 320 Гб ОЗУ, база на SSD, с проведением документов проблем нет.

Простая форма списка документов (Реализация товаров) и журнала (Реализации и возвраты).
При листании списка иногда возникают тормоза по 1.5-2 секунды на страницу (PgUp/PgDown).

Размеры таблиц:
_Document240 (шапка реализаций) - 40Гб (8 млн. документов, всё лишнее удалено)
_DocumentJournal7838 - смешные 8Гб.


Профайлер показывает большой Duration на запросе:

SELECT TOP 51
_Document240_R._Date_Time AS _A1,
_Document240_R._Number AS _A2,
_Document240_R._Fld6451 AS _A3,
_Document240_R._IDRRef AS _A4RRef,
_Document240_R._Marked AS _A5,
_Document240_R._Posted AS _A6,
_Document240_R._Fld6439RRef AS _A7RRef
FROM
_Document240 _Document240_R WITH(NOLOCK)
WHERE
_Document240_R._IDRRef > P1 AND _Document240_R._Date_Time = @P2 AND _Document240_R._Date_Time >= @P3 AND _Document240_R._Date_Time <= @P4 OR
_Document240_R._Date_Time > @P5 AND _Document240_R._Date_Time >= @P6 AND _Document240_R._Date_Time <= @P7
ORDER BY
_Document240_R._Date_Time,
_Document240_R._IDRRef

план запроса
https://yadi.sk/i/dR_S9q0z3PDPuL




Аналогичная картина с журналом документов (реализации и возвраты вместе):

SELECT TOP 48
_DocumentJournal7838_R._Date_Time AS _A1,
_DocumentJournal7838_R._Number AS _A2,
_DocumentJournal7838_R._Fld7841 AS _A3,
_DocumentJournal7838_R._DocumentTRef AS _A4TRef,
_DocumentJournal7838_R._DocumentRRef AS _A4RRef,
_DocumentJournal7838_R._Marked AS _A5,
_DocumentJournal7838_R._Posted AS _A6
FROM
_DocumentJournal7838 _DocumentJournal7838_R WITH(NOLOCK)
WHERE
_DocumentJournal7838_R._DocumentRRef > P1 AND _DocumentJournal7838_R._Date_Time = @P2 AND _DocumentJournal7838_R._DocumentTRef = @P3 AND _DocumentJournal7838_R._Date_Time >= @P4 AND _DocumentJournal7838_R._Date_Time <= @P5 OR
_DocumentJournal7838_R._DocumentTRef > @P6 AND _DocumentJournal7838_R._Date_Time = @P7 AND _DocumentJournal7838_R._Date_Time >= @P8 AND _DocumentJournal7838_R._Date_Time <= @P9 OR
_DocumentJournal7838_R._Date_Time > P10 AND _DocumentJournal7838_R._Date_Time >= P11 AND _DocumentJournal7838_R._Date_Time <= P12
ORDER BY
_DocumentJournal7838_R._Date_Time,
_DocumentJournal7838_R._DocumentTRef,
_DocumentJournal7838_R._DocumentRRef

план запроса
https://yadi.sk/i/hvoQh2RU3PDPrH



Что можно подкрутить в SQL, чтоб он листал быстрее?
1 АНДР
 
30.10.17
10:51
Иногда запрос может выполняться по разным планам...
Лови момент притормаживания.
2 Сти
 
30.10.17
11:04
(0) Точно этот запрос тормозит? У нас 80% времени занимал вывод картинки "Ручная корректировка" в списке. Заменил тот бред, который был в типовой (УТП для Казахстана), на свой бред - список стал летать
3 ИмяФамилия
 
30.10.17
11:16
(0) попробуй установить фильтр с начала года.
у нас тоже были подобные "жалобы" -"копирование ПП тупиииит" (с) пользователь
на самом деле после копирования пользователь вываливался в список ПП с 2010 года на последнее.
фильтр по дате с начала года. использовать по умолчанию - просто взбодрило процесс до 1-2сек)
4 ptiz
 
30.10.17
11:20
(2) Да, смотрю duration в профайлере.
(3) Если листать "с конца" - все летает. Если поставить интервал 2017 год и листать с начала года - тормоза.
При реальной работе ситуации разные - может в разные моменты тормозить.
Я так понимаю, что в случае с журналом - чистый "индекс скан" работает, и очень долго, хотя размер таблицы относительно небольшой. Вот что странно.
5 vde69
 
30.10.17
11:27
ночью сделай перестройку индексов,

ps
ну и про обновление статистики даже не спрашиваю
6 ptiz
 
30.10.17
11:44
(5) Делал - и перестройку индексов, и статистику обновлял.
7 xXeNoNx
 
30.10.17
11:49
(0) А если избавиться от OR в запросе?
8 ptiz
 
30.10.17
11:51
(7) Хорошо пошутил :)
Это журнал - запрос платформа генерит
9 vde69
 
30.10.17
11:51
покажи поля и их индексы в структуре таблице

_Document240_R._IDRRef
_DocumentJournal7838_R._Date_Time
10 xXeNoNx
 
30.10.17
11:52
(8) Ага, а запрос дин. списка можешь скинуть?
И его же настройки
11 Cyberhawk
 
30.10.17
11:52
Очередь к диску смотри, а не длительность запросов
12 vde69
 
30.10.17
11:55
вообще такое будет например если кто-то игрался с пермишекей
13 vde69
 
30.10.17
12:04
ну и кстати

заходишь в базу, находишь таблицу в ней есть вкладка "статистика" (правда на старых скулях не помню, может и нет ее), там должна быть статистика которая попадает в индекс (внутри поля строго по порядку как в запросе), чем больше совпало - тем выше вероятность попадания в индекс

поля такие

1. _IDRRef
2. _Date_Time

а на сколько я понимаю реальные индесы идут наоборот

1. _Date_Time
2. _IDRRef

то есть у тебя не хватает индекса _Date_Time + _IDRRef хотя наверно есть индекс _IDRRef + _Date_Time но он не работает
14 nicxxx
 
30.10.17
12:10
(12) "пермишекей" - что это за х..ня?
15 ИмяФамилия
 
30.10.17
12:10
(12) ну тут в запросе только даты фигурируют. ограничений по фирмам нет.

(13) вроде MS SQL не требует порядка полей в запросе и порядка в индексе. оптимизатор по сообразительней. сам перестраивает запрос.
если же нет - значит формочка уже руками потроганная) и привет MS SQLю
руками индекс создавать.
сейчас глянул в УПП реализация - индекс
_Document..._ByDocDate
_Date_Time, _IDRRef, _Marked

(14) rls
16 breezee
 
30.10.17
12:12
А что менялось до и после торомзов в базе? Может у вас план обсулживания по обновлению статиски полетел. Динамический список не запросный? Выводится таблица? кто что менял ищите
17 ptiz
 
30.10.17
12:16
(16) Формы - обычные, в заголовке указал. Обычный "ЖурналДокументовСписок".
18 ptiz
 
30.10.17
12:25
(9) Индексы
_Documen240_ByDocDate_TR:
_Date_Time, _IDRRef


_Docume7838_ByDocDate_TR
_Date_Time, _DocumentTRef,_DocumentRRef    


Закладки "статистика" нет.

(16) Да хз когда тормоза появились, просто раньше внимания не обращал.

RLS - нет, смотрю под полными правами.
19 ИмяФамилия
 
30.10.17
12:33
(18)
индекса содержащего _IDRRef, _Date_Time нет в наличии на табличке?


фигня какаято. первый запрос сваливается в перебор.
либо статистика отпала нафиг.
либо индекса нет и тии надо делать. либо и не было его никогда)

а что за конфигурация такая интересная?
20 ptiz
 
30.10.17
12:43
(19) По "_IDRRef" - только кластеризованный.
Отдельного "_IDRRef, _Date_Time " - нет.

"либо статистика отпала нафиг." - и как её вернуть?
update statistics делал.

Как конфигурация может повлиять на индексы? Только на дополнительные разве что. БП 1.6 старенькая дописанная.
21 Elatiell
 
30.10.17
12:58
(0)

В первом случае в индексе документа _Document240_R нет поля _Fld6439RRef AS _A7RRef, и из-за этого СУБД ищет его в кластерном индексе. В вашем случае, чтобы устранить замедление в первом запросе, нужно либо убрать это поле из запроса, либо каким-то образом переписать запрос/изменить структуру (как пример сходу, хранить это поле в регистре сведений).

Во-втором запросе из-за того, что слишком много полей, которые наверняка не нужны пользователям, СУБД не остается других вариантов, кроме как сканить всю таблицу. Уберите лишнее.
22 ptiz
 
30.10.17
13:05
(21) А и так из форм списка для выложенных запросов убрал всё что можно и что нельзя, на самом деле нужных полей намного больше.
Т.е. на "индекс скан" мы обречены?
23 vde69
 
30.10.17
13:11
24 rphosts
 
30.10.17
13:28
(23) если строго - это нарушение лицензионного соглашения.
25 vde69
 
30.10.17
13:46
(24) нет, не нарушение....
26 alkorolev
 
30.10.17
15:06
(25) нет, нарушение
27 alkorolev
 
30.10.17
15:07
(0) на событии "ПриВыводеСтроки" запросы не формируются?
28 rphosts
 
30.10.17
15:18
(26) профиль поправь
29 rphosts
 
30.10.17
15:24
(25)Лицензиат обязуется не допускать нарушений исключительных прав Правообладателя на ПРОГРАММНЫЙ ПРОДУКТ, в частности, не совершать и не допускать совершения третьими лицами следующих действий без специального письменного разрешения Правообладателя:
......................................................
вносить какие-либо изменения в код ПРОГРАММНОГО ПРОДУКТА, содержимое баз данных и других наборов данных, в которых система хранит информацию, за исключением тех изменений, которые вносятся штатными средствами, входящими в состав ПРОГРАММНОГО ПРОДУКТА и описанными в сопроводительной документации;

v8: Лицензионное соглашение

Я понимаю что это несколько напрягает, но... договор есть договор
30 alkorolev
 
30.10.17
15:28
(28) а с текущим что не так?
31 AlfaDog
 
30.10.17
15:32
(0) Покажи оригинальный запрос 1с
32 rphosts
 
30.10.17
15:32
(30) ты не  Кмр
33 AlfaDog
 
30.10.17
15:34
Меня лично смущают эти странные условия
_DocumentJournal7838_R._DocumentRRef > P1 AND _DocumentJournal7838_R._Date_Time = @P2 AND _DocumentJournal7838_R._DocumentTRef = @P3 AND _DocumentJournal7838_R._Date_Time >= @P4 AND _DocumentJournal7838_R._Date_Time <= @P5
34 Timon1405
 
30.10.17
15:38
(25),(26)метод определения нарушается соглашение или нет такой:
если после выгрузки-загрузки через *.DT в базе ничего не изменится - это не нарушение, иначе нарушение.
пример флаг max degree parallelism - не слетит при такой операции - НЕ нарушение,
индексы слетят - нарушение
35 ptiz
 
30.10.17
15:40
(31) Листаю журнал или список документов. Всё. Никакого объекта "Запрос" - не создается.
36 ptiz
 
30.10.17
15:42
Если кто-нибудь в обычных формах 8.2 сможет показать свой план запроса при листании списка документов - буду благодарен.
37 MM
 
30.10.17
15:51
(34) А если эти индексы будет восстанавливать ALL SERVER триггер, то это перестанет быть нарушением?
38 nicxxx
 
30.10.17
15:56
(29),(34) Ответственность не предусмотрена.
39 Alex_MA
 
30.10.17
16:11
(0)нет покрывающего индекса.
Т.е. ты выбираешь поля из документа (но отбор по дате), которых нет в составе индекса по дате.

Для ускорения можно, как вариант сделать проведение документа по дополнительному регистру, например сведений, и туда прописывать все необходимые реквизиты при проведении (естественно нужно будет указать признак индексировать у измерений).

Затем выбирать запросом из этого регистра.
Вариант_2: Добавить в индекс по дате - все необходимые поля выборки в MS SQL Server. В этом есть минус - следующее обновление конфигурации твой индекс уберет.
40 vde69
 
30.10.17
16:21
(29) (26) читаем

Гражданский кодекс РФ от 18.12.2006 N 230-ФЗ - Часть 4 Статья 1280. Свободное воспроизведение программ для ЭВМ и баз данных.
41 arsik
 
гуру
30.10.17
16:22
(29) "которые вносятся штатными средствами, входящими в состав ПРОГРАММНОГО ПРОДУКТА и описанными в сопроводительной документации;"
Так то MS SQL server + SSMS - входят в состав программного продукта. Вы еще softpoint пож это подведите.
42 Alex_MA
 
30.10.17
16:22
(0)Решение проблемы в данном случае сводится к тому, чтобы создать хранение данных наподобие аля-кластерный индекс "по дате"
43 rphosts
 
30.10.17
16:40
(40) (41) спросите это у представителей 1С - узнаете много нового.
44 rphosts
 
30.10.17
16:41
(41) >Так то MS SQL server + SSMS

не являются ни штатным ни заштатным продуктом фирмы 1С

про софтпоинт опять-же уточняйте в фирме 1С - у них может быть спецсоглашение
45 Tateossian
 
30.10.17
16:43
(29) Тогда на ИТС зачем мануалы написаны
46 Tateossian
 
30.10.17
16:43
47 arsik
 
гуру
30.10.17
16:52
(45) Кстати да. (43) короче твое айяйяй только у тебя в голове.
48 ptiz
 
30.10.17
16:52
(39) Я оставил самый минимум: номер и дату. Сделал покрывающий индекс (через "помощника настройки ядра СУБД" - подсунул ему этот запрос). Один черт - индекс скан по этому индексу, скорость такая же.
https://yadi.sk/i/T-kBh5s73PENoR
49 ptiz
 
30.10.17
16:53
Видимо, sql не может переварить запрос с такой кучей условий на даты, который генерит список документов.
50 vde69
 
30.10.17
16:53
(48) так оптимизатор заработает по новому индексу только после сброса статистики
51 rphosts
 
30.10.17
16:56
(46) не приятгивайте за уши методологию обслуживания БД с вмешательством в структуру Б
52 rphosts
 
30.10.17
16:56
Б= ИБ
53 rphosts
 
30.10.17
16:58
(48) 1802 это Duration?
54 rphosts
 
30.10.17
16:59
(50) и чистки процедурного кэша... и да, дефрагментацию давно выполняли?
55 alkorolev
 
30.10.17
17:06
(45) мануалы написаны по сопровождению СУБД, а не об изменении физической сущности базы НЕ средствами эсочки. Грубо говоря, если вы покупаете УТ, вставляете триггер, где при инсёрте нового элемента номенклатуры реиндексируете всю базу, а потом жалуетесь в компанию 1С, что их программа тормозит и г*вно, то 1С в свою очередь может вас послать (и обязательно пошлёт).
56 Alex_MA
 
30.10.17
17:12
(48)Видимо из статистических данных MSSQL решил что так будет оптимальнее...(На выполнение запроса может повлиять и статистика)
57 alkorolev
 
30.10.17
17:13
(0) рлс исключил? под полными правами тож торомзит? создай обработку, сделай в ней форму списка журнала документов. Что за привычка сразу в профайлер лезть?
58 breezee
 
30.10.17
17:15
(17) Попробуйте перевести этот список на управляемые. Планы обслуживания на скуле смотрели?
59 alkorolev
 
30.10.17
17:15
SELECT TOP 51
60 alkorolev
 
30.10.17
17:15
это динамический запрос что ль? что вообще за программа?
61 rphosts
 
30.10.17
17:17
(57) в профайлере запрос с учетом рлс, тебе ли этого не знать
62 rphosts
 
30.10.17
17:17
(60) видимо запрос динамического списка
63 Ёпрст
 
30.10.17
17:18
а в результате окажется, что на форме есть какой либо текстовый реквизит, который получает значение из текущей строки списка, таща на клиента весь объект целиком
64 vde69
 
30.10.17
17:21
(62) (63) как я понял у автора ОБЫЧНЫЕ формы
65 vde69
 
30.10.17
17:22
(57) рельсы тут нет, это видно по запросу... рельса ВСЕГДА выполняется внутри ХП...
66 craxx
 
30.10.17
17:23
(0)RLS?
67 ptiz
 
30.10.17
17:34
(53) Да, он.
(63) Причем тут форма, если есть конкретный запрос SQL с duration 1800?
(66) С RLS запрос выглядел бы совсем по-другому.
68 vde69
 
30.10.17
17:39
(67) кстати вопрос:

SQL на виртуалке?
69 Ёпрст
 
30.10.17
17:39
(67) 1800- это же 1.8мс, долго ?
70 rphosts
 
30.10.17
17:43
(69) Duration в миллисекундах, это 1,8 сек
71 Ёпрст
 
30.10.17
17:44
(70) разве ? А не в микросекундах ?
72 Ёпрст
 
30.10.17
17:44
не помню ужо
73 ptiz
 
30.10.17
17:44
(68) Нет конечно.
74 rphosts
 
30.10.17
17:44
(67) можно текстовый план запроса?
75 mistеr
 
30.10.17
17:49
Не вижу плана почему-то (что-то с Яндексом). Так что там с индексом, поясните кто вкурил? Индекс по дате+ссылке должен быть стандартный у всех доков, предназначен именно для списков. Чтобы при запросе дин. списка скуль пошел не по этому индексу, это нужно очень постараться.

Может сортировка в списке не та? Может нужно сделать ТИИ с реиндексацией?
76 vde69
 
30.10.17
17:50
в свойствах базы смотри все параметры типа

"Автоматическое обновление статистики" и прочее связанные со статистикой...

зы
мне кажется, что дело именно в статистике
77 rphosts
 
30.10.17
17:54
(70) Сервер сообщает о длительности события в микросекундах (10^-6 с), а о количестве времени, затраченного ЦП на событие, в миллисекундах (10^-3 с). В Приложение SQL Server Profiler графический пользовательский интерфейс по умолчанию отображает столбец Продолжительность в миллисекундах, но, когда данные трассировки сохраняются в файле или таблице базы данных, значение столбца Продолжительность записывается в микросекундах.

https://docs.microsoft.com/ru-ru/sql/tools/sql-server-profiler/view-and-analyze-traces-with-sql-server-profiler
78 ptiz
 
03.11.17
15:27
(74) Наконец снова добрался до базы.
Вот план запроса из технологического журнала:
0, 1, 47, 0, 4.7E-006, 76, 0.00733, 1,   |--Top(TOP EXPRESSION:((47)))
0, 1, 47, 202, 6.31, 76, 0.0069, 1,        |--Clustered Index Scan(OBJECT:([test_copy].[dbo].[_DocumentJournal7838].[_Docume7838_ByDocDate_TR] AS [_DocumentJournal7838_R]),  WHERE:([test_copy].[dbo].[_DocumentJournal7838].[_DocumentRRef] as [_DocumentJournal7838_R].[_DocumentRRef]>[@P1] AND [test_copy].[dbo].[_DocumentJournal7838].[_Date_Time] as [_DocumentJournal7838_R].[_Date_Time]=[@P2] AND [test_copy].[dbo].[_DocumentJournal7838].[_DocumentTRef] as [_DocumentJournal7838_R].[_DocumentTRef]=[@P3] AND [test_copy].[dbo].[_DocumentJournal7838].[_Date_Time] as [_DocumentJournal7838_R].[_Date_Time]>=[@P4] AND [test_copy].[dbo].[_DocumentJournal7838].[_Date_Time] as [_DocumentJournal7838_R].[_Date_Time]<=[@P5] OR [test_copy].[dbo].[_DocumentJournal7838].[_DocumentTRef] as [_DocumentJournal7838_R].[_DocumentTRef]>[@P6] AND [test_copy].[dbo].[_DocumentJournal7838].[_Date_Time] as [_DocumentJournal7838_R].[_Date_Time]=[@P7] AND [test_copy].[dbo].[_DocumentJournal7838].[_Date_Time] as [_DocumentJournal7838_R].[_Date_Time]>=[@P8] AND [test_copy].[dbo].[_DocumentJournal7838].[_Date_Time] as [_DocumentJournal7838_R].[_Date_Time]<=[@P9] OR [test_copy].[dbo].[_DocumentJournal7838].[_Date_Time] as [_DocumentJournal7838_R].[_Date_Time]>[@P10] AND [test_copy].[dbo].[_DocumentJournal7838].[_Date_Time] as [_DocumentJournal7838_R].[_Date_Time]>=[@P11] AND [test_copy].[dbo].[_DocumentJournal7838].[_Date_Time] as [_DocumentJournal7838_R].[_Date_Time]<=[@P12]) ORDERED FORWARD)

Т.е. Clustered Index Scan - и всё. И это медленно.
79 rphosts
 
03.11.17
17:26
(78) время адекватное запросу... сделайте новый журнал без единой строчки кода, откройте под пользователем с полными правами
80 mistеr
 
03.11.17
18:03
(78) Clustered Index Scan и должен быть. План нормальный. Странно, что медленно. статистику по I/O бы глянуть...

Может все-таки переиндексировать? Кто в курсе, при ТИИ кластерные индексы пересоздаются?
81 ptiz
 
03.11.17
19:42
(80) Переиндексировал, и через 1С реструктуризировал журнал (когда графы меняешь).
Я бы согласился, что нормально, но когда снизу вверх листаешь - всё намного быстрее :(
82 ptiz
 
03.11.17
19:43
(79) А какая графа тут время отображает? И в каких единицах?
83 mistеr
 
03.11.17
19:46
(81) Со стороны 1С все норм, проблема в скуле имхо. Или в конкретной базе.
84 mistеr
 
03.11.17
19:47
(81) Раз уж тронул журнал, попробуй из состава доки убрать, чтоб он очистился. А потом вернуть.
85 Borteg
 
03.11.17
22:20
(0) в обеих списках в запросе нету поля description, при выводе на каждую строку идут обращения к sql?
86 Borteg
 
03.11.17
22:22
(78) при --Top(TOP EXPRESSION:((47)))  всегда будет скан это самое быстро что можно сделать
87 Borteg
 
03.11.17
22:46
(0) скорей всего проблема в ссылочных типах и их выводе на экран. надо выводить представление от ссылки, а ссылки скрывать видимость(если нужны отборы)
88 Cyberhawk
 
03.11.17
23:17
Думаю, после праздников проблема сама собою рассосется
89 youalex
 
03.11.17
23:18
(78) какое-то дикое условие
попробовал на своем журнале (отбор по периоду установлен, видимость ссылочных колонок отключена):

WHERE ((T1._Date_Time >= P1) AND (T1._Date_Time <= @P2)) AND T1._Date_Time = @P3 AND T1._DocumentTRef = @P4 AND T1._DocumentRRef > @P5

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

Пробуй, как уже сказали, ЖурналСписок в новой, пустой форме. Интересно, дин. список какой запрос сформирует.
На крайний, журнал всегда можно заэмулировать через РС.
90 Sasha_H
 
03.11.17
23:23
91 Sasha_H
 
03.11.17
23:25
(0)
Полагаю, что у автора все регламенты, статистика/индексы обновляются.

Попробую в настройках списка вообще установить полные стандартные настройки. Вообще снять сортировку любого рода.
92 Sasha_H
 
03.11.17
23:26
очень помагает еще использование последней платформы
93 Sasha_H
 
03.11.17
23:28
советую использовать 8.3
94 mistеr
 
03.11.17
23:29
(89) Там не один запрос идет, а несколько. Ты полистай туда-сюда.
95 Sasha_H
 
03.11.17
23:34
Я может где-то пропустил это же УФ или обычная форма?
96 youalex
 
03.11.17
23:35
(94) Ну да. Параметры меняются.
97 mistеr
 
03.11.17
23:36
(90) >проблемы в операторе ORDER BY,  который платформа сама старательно добавляет, и неважно, что сортировка вообще пользователем не указана
>Осталось только ждать и надеяться, что 1С все-таки согласится исправить такое поведение ДС

Вывод автор статьи сделал неверный. Без ORDER BY не будет никакого ДС. Важно, чтобы этот ORDER BY попадал в индекс и не требовал доп. сортировки. В остальном статья норм.
98 mistеr
 
03.11.17
23:38
(96) Не только параметры, но и сами запросы. Просто задумайся над условием "_Date_Time = @P3"
99 Sasha_H
 
03.11.17
23:38
(97) спорно. и можем много спорить. Ест-но что без сортировки не будет ДС. Но как ведомо сортировка отжирает весомый процент.
100 Sasha_H
 
03.11.17
23:40
(97) ну вот и тебе ответ обрати внимание на покрытия своих индексов, на что идет трудоемкость в плане запроса. Поиск ключа.
101 Sasha_H
 
03.11.17
23:44
а поиск ключа если я не ошибаюсь происходит в случае, когда выводятся колонки которые вне индекса.
102 Sasha_H
 
03.11.17
23:52
В этом запросе я непонял зачем дважды выводиться одна и таже ссылка?

_DocumentJournal7838_R._DocumentTRef AS _A4TRef,
_DocumentJournal7838_R._DocumentRRef AS _A4RRef,

И вот:
ORDER BY
_DocumentJournal7838_R._Date_Time,
_DocumentJournal7838_R._DocumentTRef,
_DocumentJournal7838_R._DocumentRRef
103 Sasha_H
 
03.11.17
23:53
у вас, что там соединения с ТЧ какие-то?
104 mistеr
 
03.11.17
23:56
(100) "Поиск ключа" это key lookup что ли? Некорректный перевод, это "поиск по ключу".

У автора статьи ситуация другая. У него запрос к таблице документа, там индекс по дате некластерный, а данные тянутся из кластерного, из-за этого большая трудоемкость. Тут же индекс на журнале кластерный, поэтому никаких key lookup, ничего лишнего, Index scan + top. Но почему-то медленно. Нужно смотреть статистику.
105 mistеr
 
03.11.17
23:57
(102) Это тип + ссылка (TRef + RRef)
106 Sasha_H
 
03.11.17
23:57
(78) Т.е. Clustered Index Scan - и всё. И это медленно.

Скан это плохо. Это значит, что он проходит таблицу сканируя. А вдолжен быть SEEK

Явно говорит о том, что нет покрытия полей в индексе
107 Sasha_H
 
04.11.17
00:02
108 Sasha_H
 
04.11.17
00:03
Ссылка - кластерный индекс всегда
109 Sasha_H
 
04.11.17
00:03
[ОРРХ | ОРНР1 +] Дата + Ссылка
110 Sasha_H
 
04.11.17
00:04
ДС и делает сортировку по дати и ссылке поскольку полагается, что это кластерный индекс
111 Borteg
 
04.11.17
00:06
(106) в выборе первых записей будет всегда скан, и он не сканирует всю таблицу он выбирает только первые 50 записей
112 Sasha_H
 
04.11.17
00:08
(111) в данном случае согласен поскольку испльзуется ключевое ТОР
113 youalex
 
04.11.17
00:08
(98) >>Просто задумайся над условием "_Date_Time = @P3"

Задумывался))
Сейчас вижу, что два запроса выполняется, один с "AND T3._Date_Time > @P3" (если листать вверх, то < @P3, что логично).
Второй уже, видимо, строится по результатам первого, с "_Date_Time = @P3 AND T2._DocumentTRef < @P4"

В обоих случаях - Index Seek,  ничего похожего на монструозное условие ТС нет.
114 Sasha_H
 
04.11.17
00:10
(113) ввобще-то ДС при первом открытии имеет один вид запроса. А поотм другой. Это сделано для того-чтобы поймать курсор.

Но автору я бы настоятельно рекомендовал обновить платформу.
115 Sasha_H
 
04.11.17
00:11
(0) Автор почитай что сделали в платформе 8.3.10 там большой уклон пошол на оптимизацию и ускорения работы и очень много работы на ДС припало.
116 Borteg
 
04.11.17
00:16
кстати это микросекунды же, у меня в профайлере в микросекундах указывается. 1400 это вообще мизер тогда и проблема не в запросах.
117 Borteg
 
04.11.17
00:17
ну и нету здесь decription как тогда ссылочной тип на форму попадает? в sql должно быть много доп запросов на вывод строк. этого не видно в том что дали.
118 Sasha_H
 
04.11.17
00:17
Забили - автора давно нет тут!
119 mistеr
 
04.11.17
00:30
(113) Показывай запросы и планы. Только текстом, пожалуйста. На pastebin очень удобно. И версии платформы и скуля.
120 youalex
 
04.11.17
00:37
(116) не факт, это настраиваемый параметр (милли или микро)
121 youalex
 
04.11.17
00:38
(119) Зачем? У меня все нормально))
122 mistеr
 
04.11.17
00:48
(121) Интересно сравнить с ТС
123 youalex
 
04.11.17
01:29
124 youalex
 
04.11.17
01:33
(123) +
8.2.19.106
Microsoft SQL Server 2016 (SP1) (KB3182545) - 13.0.4001.0 (X64)
125 mistеr
 
04.11.17
02:01
(123) Сейчас уточнил в BOL. INDEX SCAN это полный просмотр индекса, а INDEX SEEK - поиск по ключу. (Я привык к оракловой терминологии, где scan обозначает и то и другое.)

https://technet.microsoft.com/en-us/library/ms175184(v=sql.105).aspx
https://technet.microsoft.com/en-us/library/ms190400(v=sql.105).aspx

Так что почти все стало ясно у ТС. Скуль выбирает scan, скорее всего из-за двух OR в условии. Вместо того, чтобы сделать три раза seek и сортировку. Может, и кривая статистика вносит свой вклад.

Откуда там взялись эти OR, остается интересным.
126 mexanik_96
 
04.11.17
06:41
про покрывающий индекс уже было?
127 mexanik_96
 
04.11.17
06:41
вообще у автора ожидание page latch, поднятие страниц с диска есть?
128 mexanik_96
 
04.11.17
06:44
(125) ну да с чего бы? он скан делает потому что индекса покрывающего нет по предикату
129 rphosts
 
04.11.17
07:45
(78) всё-же сделайте как написано в (79) и ещё кроме того, попробуйте  кликнуть по колонке Дата что-бы отсортировались документы по дате и посмотрите что после этого будет со скоростью.
130 Borteg
 
04.11.17
09:40
(125) он не сканирует всю таблицы, у него есть TOP в запросе. Он просто отбирает 50 записей сканом  и все...
131 H A D G E H O G s
 
04.11.17
09:48
(130) Ага. Это так, если нет условия в запросе.
132 Borteg
 
04.11.17
09:53
(131) это всегда так. В первом запросе вложенные циклы выполнялись только 51 раз, а не скан с поиском ключа и  потом выбор 51 строки. В планах нету  sort. Значит он попал в индекс по сортировки.
133 ptiz
 
04.11.17
10:30
(93) Это не так просто. Пока 8.2 в режиме совместимости 8.1. Переходить на 8.3 (даже только смена платформы) - к тому времени или ишак, или эмир :)
(95) Всё обычное (см.заголовок).
Уточню: при листании последнего месяца - по 10 страниц в секунду пролетает.
При листании января - на каждый PgDown уходит больше секунды.

(129) После праздников попробую сортировать туда-сюда. А права и так полные.
134 Злопчинский
 
04.11.17
10:53
Наблюдаю.
Особенно тех кто заявляет "вы не умеете её готовить"
Посмотрим...
Интересно.
135 mistеr
 
04.11.17
11:06
(128) Все поля из предикатов есть в индексе. Индекс кластерный, так что все остальное там тоже есть, по определению.

(130) >Он просто отбирает 50 записей сканом  и все...
А какие именно 50 записей, из какого места? Ты физическую структуру индекса немного представляешь себе?
136 rphosts
 
04.11.17
13:15
(133)  главеое сделай пустую форму чтоб ни строчки кода
137 Sasha_H
 
04.11.17
14:27
(0) Какой период в списке? Попробуйте установить минимальный период например Текущий день.

Возможно у вас в спике используется такие понятия как ПриАктивизацииЯчейки, приПолученииДанных и т.д. Есть ли в списке вообще другие обработчики, этот список Чист без разных обработчиков?
138 Sasha_H
 
04.11.17
14:31
сделать ТиИ - одна из рекомендаций ИТС. Но мне не нравиться, что конфа вообще в совместимости 8.1
139 Sasha_H
 
04.11.17
14:34
(133) Я думаю многие оптимизаторы со мною согласятся - вот все работало прекрасно и замечательно и бах...

Это все проблемы так начинаются. И тут проблематика в данном случае если у Вас вообще "Чистый список" без лишнего кода при обработке данных например на лету. И Вы начинаете вот так висеть. Индексы перестроены, статистика не помогает, ТиИ тоже, диски крутые и все точка.

В данном контексте у вас 8.2 да еще на совместимости с 8.1 тоже не айс. Я уже молчу о взаимоблокировках.
140 ptiz
 
04.11.17
18:06
(136) В форме закомментирован весь код.
Вот видео, где листаю страницами: видно, что тормозит январь, а октябрь - летает.
https://youtu.be/iju8hUr95FY
(139) Про взаимоблокировки я бы поспорил. Правильные управляемые блокировки уже в 8.1 рулят и педалят в самописках.
"вот все работало прекрасно и замечательно и бах... " - такого не было. Просто количество документов перешло в качество.
141 youalex
 
04.11.17
19:58
(140) Попробуй, ради интереса, еще сделать обработку, в ней УФ, в УФ - дин. список с этим журналом. Какой там запрос будет генериться.
Вроде бы УФ открывается даже в режиме совместимости 81, если не внешняя.
142 Злопчинский
 
04.11.17
20:38
Продолжаю с интересом наблюдать. Где же все специалисты, которые умеют её готовить?
143 ptiz
 
07.11.17
12:17
Как и ожидалось, дело оказалось в платформе 1С.
Убрал режим совместимости 8.1 (платформу не менял, та же 8.2, обычные формы): сразу поменялся текст запроса к СУБД, и план запроса превратился в Clustered Index Seek.

Запрос стал такой:
SELECT TOP 43
T2._Date_Time,
T2._Fld7841,
T2._DocumentTRef,
T2._DocumentRRef,
T2._Marked,
T2._Posted
FROM _DocumentJournal7838 T2 WITH(NOLOCK)
WHERE ((T2._Date_Time >= P1) AND (T2._Date_Time <= @P2)) AND T2._Date_Time = @P3 AND T2._DocumentTRef > @P4
ORDER BY (T2._Date_Time) ASC, (T2._DocumentTRef) ASC, (T2._DocumentRRef) ASC
OPTION (FAST 1)
144 ptiz
 
07.11.17
12:30
Кстати, модный "динамический список" в управляемой форме - тормоз страшный. До "ЖурналДокументовСписок" - ему не дотянуться.
145 Sasha_H
 
14.11.17
21:10
(144) Кстати иметь овно конфигурацию в режиме совместимости 8.1 при этом платформа даже не 8.3 умозаключение МЕЛКОЕ!
146 H A D G E H O G s
 
14.11.17
21:12
(144) Модный динамический список иногда незаменим.
147 g00d
 
15.11.17
01:57
(144) идея дин.списка что вы возвращаете только то что вам нужно, начните с того что - уберите лищние колонки
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.