Re[41]: EntityFramework - тормоз
От: Evgeny.Panasyuk Россия  
Дата: 19.04.15 22:33
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

EP>>>>В buffer pool ведь сидят страницы, в которых находятся целые строки таблиц, так? Тогда:

EP>>>>1. Закэшированный результат запроса скорей всего будет занимать меньше памяти чем "эквивалентный" набор страниц для повторного запроса, так как в нём будет меньше столбцов и строк — только самое необходимое. А следовательно будет больше свободной памяти, которую можно использовать под другие страницы, или другие кэши запросов.
G>>>Интересно как ты это посчитал.
EP>>Вариант 1. Запрос с агрегированием и группировкой, да ещё и не по всем столбцам — результат очевидно меньше чем исходные данные.
G>Да, только в случае агрегации актуально, но это если таблица не используется в других запросах.

Как видишь, "не всё так однозначно" (c) — используя кэш всё-таки можно увеличить "свободную память"

EP>>Вариант 2. Запрос с фильтрацией, с выводом всех столбцов. Без кэша результата, даже если загружены в память только минимально необходимые страницы, то они всё равно будут содержать неиспользуемые строки, помимо этого в памяти будут сидеть страницы соответствующего индекса.

EP>>Вариант 3. Запрос выводит все строки*столбцы, но в определённом порядке. В этом случае память также будет расходоваться под индекс, а в случае готового результата — нет, не говоря уже о том что линейный обход памяти на порядок (а бывает и на порядки) эффективней случайного.
G>Ты точно знаешь как базы работают? Про покрывающие индексы не слышал?

И чем они помогут в случае динамических фильтров и динамических предикатов?

EP>>Хотя можно представить случаи где и автоматический кэш будет эффективен

G>Представить вообще можно что угодно, а вот на практике встретить не всегда.

Кто-то встретит, кто-то нет — для этого есть настройки.

EP>>>>2. Даже если все необходимые страницы в памяти, то "эквивалетная" закэшированному запросу операция может занять намного больше времени — так как требуется обработать больше данных из random'ных участков памяти.

G>>>Тытоже не понимаешь как базы работают?
EP>>А ты перестал пить коньяк по утрам?
G>Ответить нечего?

Я уже писал ранее что с СУБД вообще не приходится работать. Это, тем не менее, не освобождает оппонента от необходимости аргументировать свою позицию

G>>>Когда данные уж в ОП, то там различия минимальные, доли миллисекунд.

EP>>Элементарный пример — есть таблица в 30 гигабайт, для неё нужно сделать агрегирование с результатом в одну строчку. Угадай что будет быстрее — закэшированный результат или полное вычисление?
G>Индексированное представление, а кэш не нужен.

Для динамических запросов, с динамическими формулами?

EP>>Пример конечно экстремальный, но поинт простой — готовый результат может быть в разы, а то и на порядки быстрее чем сырые данные. Причём не теряет актуальность даже в если до DB существенное latency — например в том случае если запросов много.

G>Походу ты действительно не знаешь как работают базы данных.

Аргументов как всегда не будет?

G>Не продолжай пожалуйста.


Давай, удачи, слив засчитан
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.