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