|
Сложности отладки временных таблиц. :-) | ☑ | ||
---|---|---|---|---|
0
H A D G E H O G s
18.11.12
✎
23:12
|
Ночи доброй.
Циничная мордочка как бы говорит нам, что все не так просто. Как хотя бы выполнить такой запрос: exec sp_executesql N'INSERT INTO #tt2 (_Q_003_F_000_TYPE, _Q_003_F_000_RTRef, _Q_003_F_000_RRRef, _Q_003_F_001) SELECT T1.Q_002_F_000_TYPE, T1.Q_002_F_000_RTRef, T1.Q_002_F_000_RRRef, T1._Q_000_F_000 FROM #tt1 T1 WITH(NOLOCK) при условии, что #tt1 создана в сеансе сервера 1С и недоступна мне, простому смертному, запускающему EM под другим сеансом? |
|||
1
H A D G E H O G s
18.11.12
✎
23:12
|
Можно как то EM-ом подключиться к существующему сеансу?
|
|||
2
H A D G E H O G s
18.11.12
✎
23:13
|
И напоследок, как построить годный план запроса для конструкции вида
exec sp_executesql не переписывая запрос и его параметры. |
|||
3
H A D G E H O G s
18.11.12
✎
23:15
|
Я не вижу ваших ников под заголовком. Это меня демотивирует...
Запрос валит 42 гиговый сервер клиента влет, поэтому тренируюсь на кошках (на нашем серваке, пока выходные). |
|||
4
H A D G E H O G s
18.11.12
✎
23:18
|
ладно, хрен с ней, с #tt1
|
|||
5
H A D G E H O G s
18.11.12
✎
23:18
|
Как построить годный план запроса? Чтобы он не был одним куском со 100% времени выполнения.
|
|||
6
H A D G E H O G s
18.11.12
✎
23:19
|
А то там порядка 50 параметров, я заколебусь их константировать.
|
|||
7
H A D G E H O G s
18.11.12
✎
23:21
|
||||
8
Александр_
Тверь 18.11.12
✎
23:36
|
приятно поговорить с умным собеседником?
|
|||
9
Asmody
18.11.12
✎
23:37
|
(0) в EI вроде были средства для перехвата профайлера в сеансе сервера если я не путаю
|
|||
10
H A D G E H O G s
18.11.12
✎
23:38
|
(8) Ты про что?
|
|||
11
TormozIT
гуру
19.11.12
✎
00:07
|
1. Сначала рекомендую техножурналом отловить строку кода (контекст), где вызывается проблемный запрос MSSQL.
2. Станет понятно какой пользователь его вызывает и какая строка кода. 3. Правильнее всего подключиться к сеансу этого пользователя и попросить его повторить те предполагаемые действия, которые связаны с вызовом найденной строки кода. 4. Уже в большинстве случаев станет понятно как воспроизводить проблему |
|||
12
TormozIT
гуру
19.11.12
✎
00:11
|
Если (11) невозможно сделать, то можно попробовать половить запросы SDBL. Если они SELECTовые и самодостаточны, то можно попробовать сконвертировать их в обычные запросы и выполнить в консоли запросов для воспроизведения.
|
|||
13
МихаилМ
19.11.12
✎
00:13
|
(1)
можно если sql2000 путем превращения локальной временной таблицы в глобальную. в более новых нельзя. |
|||
14
H A D G E H O G s
19.11.12
✎
00:20
|
(11) Все уже давно отловлено.
|
|||
15
H A D G E H O G s
19.11.12
✎
00:20
|
Мне нужен план запроса.
|
|||
16
TormozIT
гуру
19.11.12
✎
00:27
|
(14) Так если ты можешь ВОСПРОИЗВЕСТИ проблемный запрос, то значит и можешь увидеть план запроса.
|
|||
17
H A D G E H O G s
19.11.12
✎
00:37
|
(16) построй план запроса вот для такой мелочи
exec sp_executesql N'SELECT TOP 1000 [_IDRRef] ,[_Version] ,[_Marked] ,[_IsMetadata] ,[_Code] ,[_Description] FROM [empty].[dbo].[_Reference14] Where _Marked=@p1',N'@P1 varbinary(1)',0x00 |
|||
18
H A D G E H O G s
19.11.12
✎
01:11
|
ППЦ, дополз
|
|||
19
H A D G E H O G s
19.11.12
✎
01:11
|
Или я дятел, или этого не может быть
|
|||
20
H A D G E H O G s
19.11.12
✎
01:11
|
Потому что этого не можут быть
|
|||
21
H A D G E H O G s
19.11.12
✎
01:13
|
Запрос вида
ЛЕВОЕ СОЕДИНЕНИЕ СчетФактуры КАК СчетФактуры ПО ВзаиморасчетыОстаткиИОбороты.Регистратор = СчетФактуры.Регистратор преобразуется в INNER JOIN #tt4 T17 WITH(NOLOCK) ON 1=1 что бред. Имеем Cross join и полный пизнес... |
|||
22
H A D G E H O G s
19.11.12
✎
01:13
|
Из за чего такое может быть?
|
|||
23
H A D G E H O G s
19.11.12
✎
01:15
|
Воот, еще подтверждуха, что я не гоню. Когда в запрос
ВЫБРАТЬ Регистраторы.Регистратор КАК Регистратор, СчетФактураВыданныйДокументыОснования.Ссылка КАК СчетФактура ПОМЕСТИТЬ СчетФактуры ИЗ Регистраторы КАК Регистраторы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетФактураВыданный.ДокументыОснования КАК СчетФактураВыданныйДокументыОснования ПО Регистраторы.Регистратор = СчетФактураВыданныйДокументыОснования.ДокументОснование ИНДЕКСИРОВАТЬ ПО Регистратор ; добавляю ПЕРВЫЕ 1 - ничего в аут не уходит. |
|||
24
alexhtn
19.11.12
✎
06:40
|
(2)
SELECT usecounts, cacheobjtype, objtype, text, query_plan, value as set_options FROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(plan_handle) CROSS APPLY sys.dm_exec_query_plan(plan_handle) cross APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa where text like '%#tt1%'and attribute='set_options' Выдает список запросов, в нем ищешь свой запрос, открываешь план запроса в хмл виде, сохраняешь, изменяешь расширение на sqlplan, два раза щелкаешь и он открывается в management studio в нормальном виде. |
|||
25
ДенисЧ
19.11.12
✎
07:23
|
Перед вами, господа соучастники, поток нетрезвого сознания, как наглядный пример вреда алкоголя (ромикс, приди!)
|
|||
26
Sammo
19.11.12
✎
07:31
|
(23) Хм. А если сначала во временную Ссылка, документОснование и потом ее сjoin-нить?
Меня несколько смущает данное внутреннее... + как получаются Регистраторы? |
|||
27
GStiv
19.11.12
✎
08:10
|
(25) Главное не мешать человеку думать, а там и решение найдется
|
|||
28
H A D G E H O G s
19.11.12
✎
11:29
|
(24) Спасибо тебе, добрый человек
|
|||
29
H A D G E H O G s
19.11.12
✎
12:33
|
Так. Проблема в том, что SQL не кэширует этот план запроса. Как быть?
|
|||
30
H A D G E H O G s
19.11.12
✎
12:38
|
(26) Та же херь.
Вообще я ошибся, вчера уже мозг скорее всего не работал... Все нормально соединяет LEFT OUTER JOIN #tt4 T13 WITH(NOLOCK) ON (T1.Recorder_TYPE = T13._Q_001_F_000_TYPE AND T1.Recorder_RTRef = T13._Q_001_F_000_RTRef AND T1.Recorder_RRRef = T13._Q_001_F_000_RRRef) |
|||
31
H A D G E H O G s
20.11.12
✎
00:57
|
ms sql profiler рулит и педалит....
О сколько нам открытий чудных несет метод тыка. |
|||
32
H A D G E H O G s
20.11.12
✎
01:12
|
Так... Ничего не понимаю. Добавил еще одну таблицу временную, в нее все кидаю из ОстаткиИОбороты регистра и затем уже выполняю соединение со счет фактурами.
Все окей, только.... сервер 1С также виснет, а запросы в SQL останавливаются на выполнении закидки ОстаткиИОбороты во временную. Все нормально запрос отрабатывает, за 4 секунды, а потом все умирает... сервер 1С сжирает 8 гигов и крутиться возле границы памяти... Когда снимаю клиента в консоли сервера 1С, SQL профайлер дает бредовый выполненный запрос вида SELECT T1._Q_001_F_000RRef, T1._Q_001_F_001RRef, T1._Q_001_F_002RRef, T1._Q_001_F_003_TYPE, T1._Q_001_F_003_RTRef, T1._Q_001_F_003_RRRef, T1._Q_001_F_008, T1._Q_001_F_010, T2._Document516_IDRRef, T1._Q_001_F_004, T1._Q_001_F_006, T1._Q_001_F_005, T1._Q_001_F_007, T1._Q_001_F_009, T1._Q_001_F_011, T1._Q_001_F_012, T1._Q_001_F_013, T1._Q_001_F_014 FROM #tt6 T1 WITH(NOLOCK) INNER JOIN _Document516_VT14379 T2 WITH(NOLOCK) ON 1=1 со временем 230 секунд и в конце kill 59 Что за херня творицца? Счаст тестирую конфу, но вряд ли, вряд ли. |
|||
33
H A D G E H O G s
20.11.12
✎
01:13
|
_Document516_VT14379 -счаст гляну, чье это и почему он к нему cross join делает.
|
|||
34
H A D G E H O G s
20.11.12
✎
01:14
|
#tt6 - это нормальная ВТ с ОстаткиИОброты.
|
|||
35
H A D G E H O G s
20.11.12
✎
11:54
|
Никаких ошибок в конфигурации, и в данных - нет.
|
|||
36
mikecool
20.11.12
✎
11:55
|
(0) будь мужиком, используй exec sp_executesql N'INSERT INTO ##tt2
|
|||
37
H A D G E H O G s
20.11.12
✎
12:05
|
Счаст буду смотреть различные значения колонки типов
_RecorderTRef Вдруг че негодное затесалось. |
|||
38
H A D G E H O G s
20.11.12
✎
12:06
|
И получилось как у софтпоинтовского МуМу
|
|||
39
TormozIT
гуру
20.11.12
✎
12:20
|
Какое у тебя значение попало в тип регистратора?
|
|||
40
H A D G E H O G s
20.11.12
✎
12:22
|
(39) Пока не смотрел
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |