|
Временные таблицы | ☑ | ||
---|---|---|---|---|
0
Широкий
28.05.12
✎
15:18
|
Кешируются ли они?
|
|||
1
H A D G E H O G s
модератор
28.05.12
✎
15:20
|
Закрываю ветку?
|
|||
2
GROOVY
28.05.12
✎
15:21
|
А что без голосовалки:
Да Нет Незнаю КГ/АМ |
|||
3
Maxus43
28.05.12
✎
15:24
|
Да
|
|||
4
DrShad
28.05.12
✎
15:24
|
что есть в твоем понимании "кеширование"?
|
|||
5
Широкий
28.05.12
✎
16:21
|
Я вот к чему:
Процедура Тест1() ВремяНачала = мЯваСкрипт.Eval("(new Date()).valueOf()"); Запрос=СтруктураПараметров.Запрос; Для сч=1 По 1 Цикл Запрос.Текст="ВЫБРАТЬ РАЗРЕШЕННЫЕ | ПолнаяТаблица.Единица, | ПолнаяТаблица.Серия, | ПолнаяТаблица.Ячейка, | СкладскиеИД.Ссылка КАК СкладскойИД |ИЗ | Документ.ПеремещениеПоЯчейкам.ПолнаяТаблица КАК ПолнаяТаблица | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СкладскиеИД КАК СкладскиеИД | ПО ПолнаяТаблица.Единица = СкладскиеИД.Единица | И ПолнаяТаблица.Серия = СкладскиеИД.Серия | И ПолнаяТаблица.Ячейка = СкладскиеИД.МестоХранения |ГДЕ | ПолнаяТаблица.Ссылка = &Ссылка | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ПолнаяТаблица.Единица, | ПолнаяТаблица.Серия, | ПолнаяТаблица.ЯчейкаКуда, | СкладскиеИД.Ссылка |ИЗ | Документ.ПеремещениеПоЯчейкам.ПолнаяТаблица КАК ПолнаяТаблица | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СкладскиеИД КАК СкладскиеИД | ПО ПолнаяТаблица.Единица = СкладскиеИД.Единица | И ПолнаяТаблица.Серия = СкладскиеИД.Серия | И ПолнаяТаблица.ЯчейкаКуда = СкладскиеИД.МестоХранения |ГДЕ | ПолнаяТаблица.Ссылка = &Ссылка | И ПолнаяТаблица.ЯчейкаКуда <> ЗНАЧЕНИЕ(Справочник.МестаХранения.ПустаяСсылка)"; Запрос.Выполнить(); КонецЦикла; ВремяКонцаВыполнения = мЯваСкрипт.Eval("(new Date()).valueOf()"); ФорматСтрока = Формат((ВремяКонцаВыполнения - ВремяНачала) / 1000, "ЧДЦ=3; ЧРД=.; ЧН=0; ЧГ="); Сообщить("Тест по ссылке "+ФорматСтрока,СтатусСообщения.БезСтатуса); КонецПроцедуры Процедура Тест2() ВремяНачала = мЯваСкрипт.Eval("(new Date()).valueOf()"); Запрос=СтруктураПараметров.Запрос; Для сч=1 По 1 Цикл Запрос.Текст="ВЫБРАТЬ РАЗРЕШЕННЫЕ | ПолнаяТаблица.Единица, | ПолнаяТаблица.Серия, | ПолнаяТаблица.Ячейка, | СкладскиеИД.Ссылка КАК СкладскойИД |ИЗ | ПолнаяТаблица КАК ПолнаяТаблица | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СкладскиеИД КАК СкладскиеИД | ПО ПолнаяТаблица.Единица = СкладскиеИД.Единица | И ПолнаяТаблица.Серия = СкладскиеИД.Серия | И ПолнаяТаблица.Ячейка = СкладскиеИД.МестоХранения | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ПолнаяТаблица.Единица, | ПолнаяТаблица.Серия, | ПолнаяТаблица.ЯчейкаКуда, | СкладскиеИД.Ссылка |ИЗ | ПолнаяТаблица КАК ПолнаяТаблица | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СкладскиеИД КАК СкладскиеИД | ПО ПолнаяТаблица.Единица = СкладскиеИД.Единица | И ПолнаяТаблица.Серия = СкладскиеИД.Серия | И ПолнаяТаблица.ЯчейкаКуда = СкладскиеИД.МестоХранения |ГДЕ | ПолнаяТаблица.ЯчейкаКуда <> ЗНАЧЕНИЕ(Справочник.МестаХранения.ПустаяСсылка)"; Запрос.Выполнить(); КонецЦикла; ВремяКонцаВыполнения = мЯваСкрипт.Eval("(new Date()).valueOf()"); ФорматСтрока = Формат((ВремяКонцаВыполнения - ВремяНачала) / 1000, "ЧДЦ=3; ЧРД=.; ЧН=0; ЧГ="); Сообщить("Тест временная таблица "+ФорматСтрока,СтатусСообщения.БезСтатуса); КонецПроцедуры |
|||
6
Широкий
28.05.12
✎
16:21
|
Тест по ссылке 0.012
Тест временная таблица 0.036 Тест по ссылке 0.012 Тест временная таблица 0.035 Тест по ссылке 0.012 Тест временная таблица 0.036 Тест по ссылке 0.013 Тест временная таблица 0.036 Тест по ссылке 0.013 Тест временная таблица 0.037 Тест по ссылке 0.013 Тест временная таблица 0.037 Тест по ссылке 0.015 Тест временная таблица 0.038 Тест по ссылке 0.012 Тест временная таблица 0.038 Тест по ссылке 0.012 Тест временная таблица 0.037 Тест по ссылке 0.013 Тест временная таблица 0.035 Тест по ссылке 0.013 Тест временная таблица 0.036 Тест по ссылке 0.013 Тест временная таблица 0.041 |
|||
7
Широкий
28.05.12
✎
16:44
|
Забавно .. в цикле по 10 штук результаты такие:
Тест по ссылке 0.113 Тест временная таблица 0.132 Тест по ссылке 0.116 Тест временная таблица 0.144 Тест по ссылке 0.115 Тест временная таблица 0.131 Тест по ссылке 0.110 Тест временная таблица 0.133 Тест по ссылке 0.117 Тест временная таблица 0.129 Тест по ссылке 0.110 Тест временная таблица 0.133 Тест по ссылке 0.114 Тест временная таблица 0.130 Тест по ссылке 0.116 Тест временная таблица 0.140 Ощущение, будто кеш отрабатывает только на время вызова процедуры |
|||
8
Широкий
28.05.12
✎
16:50
|
Трололо хватило только на первый пост?
|
|||
9
aristar
28.05.12
✎
16:52
|
Вы лучше словами опишите вопрос, а то приходится гадать что вас удивляет
|
|||
10
DrShad
28.05.12
✎
16:53
|
(8) а где у тебя вообще временные таблицы?
|
|||
11
Fragster
гуру
28.05.12
✎
16:53
|
tempdb на медленном диске?*
|
|||
12
Широкий
28.05.12
✎
16:55
|
(11) Нет. Сервак полноценный со всеми вытекающими
|
|||
13
Широкий
28.05.12
✎
16:57
|
Вот вызов, если не понятно
Процедура КнопкаВыполнитьНажатие(Кнопка) Ссылка=Документы.ПеремещениеПоЯчейкам.НайтиПоНомеру(2,ТекущаяДата()); МенеджерВременныхТаблиц=Новый МенеджерВременныхТаблиц; Запрос=Новый Запрос; Запрос.МенеджерВременныхТаблиц=МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("Ссылка",Ссылка); Запрос.Текст="ВЫБРАТЬ | ПолнаяТаблица.Номенклатура, | ПолнаяТаблица.Единица, | ПолнаяТаблица.Серия, | ПолнаяТаблица.Количество, | ПолнаяТаблица.Ячейка, | ПолнаяТаблица.ЯчейкаКуда |ПОМЕСТИТЬ ПолнаяТаблица |ИЗ | Документ.ПеремещениеПоЯчейкам.ПолнаяТаблица КАК ПолнаяТаблица |ГДЕ | ПолнаяТаблица.Ссылка = &Ссылка"; Запрос.Выполнить(); СтруктураПараметров=Новый Структура; СтруктураПараметров.Вставить("Запрос",Запрос); СтруктураПараметров.Вставить("МенеджерВременныхТаблиц",МенеджерВременныхТаблиц); КоличествоЦиклов=2; Тест1(); Тест2(); КонецПроцедуры |
|||
14
Fragster
гуру
28.05.12
✎
16:58
|
(12) это не ответ на вопрос, лежит ли tempdb на медленном диске
|
|||
15
DrShad
28.05.12
✎
16:59
|
(13) и как замеры в тестах относятся к ВТ?
|
|||
16
Широкий
28.05.12
✎
16:59
|
(14) Рабочая база лежит на быстрых дисках, моя копия на медленном.
Результат одинаковый |
|||
17
GROOVY
28.05.12
✎
17:03
|
Соберу вопросы к автору ветки, а то не продуктивно получается...
1. что есть в твоем понимании "кеширование"? 2. и как замеры в тестах относятся к ВТ? 3. лежит ли tempdb на медленном диске? От себя добавлю: 4. Зачем в этом примере использовать ВТ? 5. Проиндексировать поля ВТ пробовал? |
|||
18
DrShad
28.05.12
✎
17:06
|
(17) Паш, ты теперь тут как третийский судья
|
|||
19
H A D G E H O G s
28.05.12
✎
17:06
|
(17) Прежде чем задать вопрос 5 - надо спросить - ТЧ ПолнаяТаблица документа ПеремещениеПоЯчейкам за номером 2 содержит более 600 строк, или нет.
|
|||
20
H A D G E H O G s
28.05.12
✎
17:08
|
(4). Использовать ВТ тут имеет смысл в том случае, если тут дофига этих документов. Если их много - это принесет добро, иначе - зло. Но в любом случае ВТ увеличит масштабируемость.
|
|||
21
H A D G E H O G s
28.05.12
✎
17:09
|
(20) -> (17)
|
|||
22
H A D G E H O G s
28.05.12
✎
17:10
|
(17) Он закэшировал отбор ТЧ по документу во временную таблицу
|
|||
23
Широкий
28.05.12
✎
17:11
|
(17) ептель..
1. Это буфер из которого можно довольно таки быстро получить информацию 2. И в ВТ и в выборке по ссылке одинаковые данные. Логично ожидать одинаковую скорость получения данных 3. Нет, диски серверный - довольно быстрые 4. Это кусок из проведения документа. ВТ нужна - т.к. документ на момент вызова запроса не записан. 5. Не пробовал, там всего 15 строк. Сейчас попробовал - результат тот же |
|||
24
GROOVY
28.05.12
✎
17:11
|
19 - 22 Я как бэ в курсе...
|
|||
25
H A D G E H O G s
28.05.12
✎
17:11
|
(17) Хотя, возможно, это сделает сам SQL, без всяких ВТ. Не знаю.
|
|||
26
Широкий
28.05.12
✎
17:13
|
(23) Поправка по 5 пункту. Строк в документе 14
|
|||
27
GROOVY
28.05.12
✎
17:13
|
(23) Временная таблица - это таблица которая _реально_ создается в базе. Это просто таблица. При обращении к ней система тратит столько же ресурсов как и при обращении с любой другой таблице. Но в случае с ВТ еще тратится время на ее создание и уничтожение.
|
|||
28
DrShad
28.05.12
✎
17:14
|
(27) ну и где здесь кеширование?
|
|||
29
Широкий
28.05.12
✎
17:15
|
(27) Да ну блин.. ты серьезно?
Если посмотришь код - время замеряется у меня чисто по выборке из ВТ и до окончания процедуры |
|||
30
GROOVY
28.05.12
✎
17:15
|
(28) Понятия не имею... Кэширование в понимании ТС и временные таблицы не имеют ничего общего.
|
|||
31
H A D G E H O G s
28.05.12
✎
17:16
|
(30) Посмотри его тексты кода и (22)
|
|||
32
DrShad
28.05.12
✎
17:17
|
(30) вот и я о чем
|
|||
33
H A D G E H O G s
28.05.12
✎
17:17
|
p.s. Гуру оптимизаций, сколько раз SQL сервер выполнит поиск?
ВЫБРАТЬ ПеремещениеТоваровТовары.Номенклатура, ПеремещениеТоваровТовары.Количество ИЗ Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары ГДЕ ПеремещениеТоваровТовары.Ссылка = &Ссылка ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПеремещениеТоваровТовары.Номенклатура, ПеремещениеТоваровТовары.Количество ИЗ Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары ГДЕ ПеремещениеТоваровТовары.Ссылка = &Ссылка |
|||
34
GROOVY
28.05.12
✎
17:20
|
(29) И что?
|
|||
35
ILM
гуру
28.05.12
✎
17:28
|
(33)
Адын |
|||
36
H A D G E H O G s
28.05.12
✎
17:29
|
У кого еще будут мнения?
|
|||
37
ssh2006
28.05.12
✎
17:34
|
я бы при написании такого запроса исходил из того, что будет два раза выполнен
|
|||
38
Fragster
гуру
28.05.12
✎
17:34
|
(36) замени ОБЪЕДИНИТЬ ВСЕ на ОБЪЕДИНИТЬ
|
|||
39
H A D G E H O G s
28.05.12
✎
17:36
|
(38) Зачем?
|
|||
40
Fragster
гуру
28.05.12
✎
17:39
|
(39) просто так
|
|||
41
H A D G E H O G s
28.05.12
✎
17:41
|
Почти уверен, что план запроса покажет мне 2 indexseek(tablescan) по табличной части. Проверить?
|
|||
42
Fragster
гуру
28.05.12
✎
17:41
|
(41) давай
|
|||
43
H A D G E H O G s
28.05.12
✎
17:42
|
(42) Ты чего, караулишь штоле?
|
|||
44
H A D G E H O G s
28.05.12
✎
17:42
|
(42) Тоесть, я не прав?
|
|||
45
acsent
28.05.12
✎
17:43
|
(44) ты знаешь как работает оптимизатор мсскл?
|
|||
46
H A D G E H O G s
28.05.12
✎
17:44
|
(45) Нет.
|
|||
47
H A D G E H O G s
28.05.12
✎
17:45
|
Но к сожалению, я пока услышал только 1 конкретный ответ.
|
|||
48
acsent
28.05.12
✎
17:46
|
конкретного ответа пока не дал никто, только догадки
|
|||
49
Fragster
гуру
28.05.12
✎
17:48
|
(43) ??
(44) да не, мне самому интересно, но сейчас до скуля далеко |
|||
50
H A D G E H O G s
28.05.12
✎
17:48
|
В (35) конкретный ответ, вопрос в том - правильный или нет.
|
|||
51
Rebelx
28.05.12
✎
17:59
|
(33) Два. Адназначна
|
|||
52
H A D G E H O G s
28.05.12
✎
17:59
|
2 clustered index seek по плану запроса.
Только вот физически он 2 раза ищет, или 1??? |
|||
53
H A D G E H O G s
28.05.12
✎
18:02
|
2 варианта -
а) читать книги б) нагрузить сервак и выполнить объединение - запрос не 2 раза, а дофигища раз и посмотреть времена выполнения каждого поиска. Если одинаковые - значит искал 1 раз и тупо время выполнения разделил на число раз. |
|||
54
Rebelx
28.05.12
✎
18:05
|
(52) тут сложнее. эти два поиска выполнятся практически за то же время, что и один - данные будут закэшированы, статистика обновлена. но поиск выполнится два раза.
для точного ответа необходимо читать фактический план запроса - т.е. то, что в текстовом виде после выполнения запроса, а не то что до выполнения и в красивых картинках :) |
|||
55
Широкий
29.05.12
✎
09:00
|
Че то вас не туда понесло
(33) Два поиска по индексу будет. Кешируется ИМХО полный запрос, а не его части. |
|||
56
hhhh
29.05.12
✎
09:19
|
ну а что там в test() ?
|
|||
57
Широкий
29.05.12
✎
09:30
|
(56) Не понял
|
|||
58
Широкий
29.05.12
✎
09:57
|
Очень интересная вещь.
В скуле воспроизвел эти два запроса - время выполнения идентично (смотрел по профайлеру). План запроса тоже совпадает. Когда идет выполнение из 1с - время отличается в разы. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |