Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Почему logical reads зло?  [new]
Raskolnikov
Member

Откуда:
Сообщений: 52
Привет!

Объясните, пожалуйста, почему много кто говорит, что большой показатель logical reads при выполнении запроса часто свидетельствует о проблемах? Logical reads - это ведь не физическое чтение с диска, а чтение из кэша. Что в этом плохого?
12 янв 14, 14:14    [15404476]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
дядя йося
Guest
Raskolnikov,

процессорное время
12 янв 14, 14:21    [15404494]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
aleks2
Guest
Патаму, что
1. "Большое количество" чего-либо ваще зло.
2. Кэш ограничен и с ростом базы logical reads имеют все фансы стать материализоваться.
12 янв 14, 14:22    [15404496]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
Raskolnikov,

Все познается в сравнении чего то с себе подобным: логические чтения предпочтительнее физических, малое кол-во логических чтений предпочтительнее большого. Преференции исходя из последнего: меньше время налагаемых блокировок. Возможно уменьшится общее время выполнения.
12 янв 14, 14:49    [15404545]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
aleks2
1. "Большое количество" чего-либо ваще зло.
Единственно уместное, остальное уговаривание не по сути.
Система должна работать оптимально.
Если она "за глаза" делает лишние 100500 чтений (пофегу каких) - это зло.

"Что в этом плохого?" - просто поражает. Что либо бывает бесплатно и закон сохранения - это байки для батанов?!
aleks2
2. Кэш ограничен и с ростом базы logical reads имеют все фансы стать материализоваться.
Так же согласен. Нельзя с уверенностью сказать что оно не выходит боком. И поэтому не даёт права полностью игнорировать этот показатель.

NickAlex66, могу придумат отмазку - не всегда локи снимаются, или ставятся построчно, поэтому строка может спокойно 100500 раз считываться без этого вида оверхеда.
Хотя я не сколько не против этого аргумента, ибо может приносить наиболее существенные последствия.
12 янв 14, 19:56    [15405285]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34619
Raskolnikov
Привет!

Объясните, пожалуйста, почему много кто говорит, что большой показатель logical reads при выполнении запроса часто свидетельствует о проблемах? Logical reads - это ведь не физическое чтение с диска, а чтение из кэша. Что в этом плохого?


Страшно вообще большое кол-во чтений запроса. Т.е. это основной критерий оптимизации запроса -- минимизировать число чтений.

logical reads -- это просто кол-во выполняемых запросом чтений. Если бы не было кэша страниц данных (и индексов), то logical reads равнялось бы physical reads. Если кэш есть, то physical reads обычно много меньше logical reads и в общем это -- величина непредсказуемая (сейчас кэш наполнен так, через минуту--ровно по-другому), на её основе нельзя строить оптимизацию запроса.
А logical reads не зависят от наличия данных в кэше и зависят только от алгоритма выполнения запроса.

Поэтому, оценивая запрос, анализируют именно logical reads, имея в виду под ним вообще общее кол-во чтений (записей) данного запроса. Оно logical, но потенциально оно может превратиться в physical.

Соответственно, большое кол-во logical reads свидетельствует о том, что план запроса достаточно плох (может быть и потому, что сам запрос плох), а если при этом physical reads мало, то это говорит о том, что данный запрос если и выполняется быстро, то только потому, что данные в кэше (памяти).
13 янв 14, 12:38    [15407279]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
Raskolnikov
Member

Откуда:
Сообщений: 52
Всем большое спасибо за ответы!

Отдельное спасибо MasterZiv, ваш ответ был наиболее полон и понятен (конкретно для меня)!

Можно ещё уточнить такой момент: логические чтения (как и физические) возникают в результате не оптимального запроса, когда серверу приходится перебирать данные в таблицах (индексах)? Т.е. если бы запрос был оптимален и сервер определил бы местоположения конкретных записей, то он бы выполнил только их чтение, а в противном случае (table scan, например) он читает все данные?
15 янв 14, 01:17    [15416107]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
aleks2, вот поэтому такие базовые и очевидные казалось бы вещи не воспринимаются ими вообще, игнорируются, полностью отсеиваются мозгом.

Видимо поэтому в японском часто в ответ говорят: はい - Hai - Да.
Что означает не "Я вас понял", а "Я вас услышал".
15 янв 14, 03:12    [15416296]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
Александр Гладченко
Member

Откуда:
Сообщений: 10729
Блог
Raskolnikov
Привет!

Объясните, пожалуйста, почему много кто говорит, что большой показатель logical reads при выполнении запроса часто свидетельствует о проблемах? Logical reads - это ведь не физическое чтение с диска, а чтение из кэша. Что в этом плохого?


Не слушайте таких "болтунов" :) Если запрос так построен, что ему необходимо большое число логических чтений, никуда от этого не деться. Разговоры, что большое число логических чтений может превратиться в физические - лукавство. Пока же они не превратились ;) Были несколько багов, которые в симптомах показывали значительное увеличение числа логических чтений (где их не ожидалось), но их давно закрыли, и, если вы регулярно накатываете кумулятивные апдейты, вас это тоже не должно вроде бы заботить.
Лично я радуюсь, видя, что чтения логические, значит вложения в 4 терабайта мозгов окупились :)
Впрочем, всегда есть частные случаи. Если хотите получить действительно полезные знания, приводите тут пример с планами запроса и параметрами множеств, тогда можно будет рассчитывать на ответ, много в вашем случае логических чтений или слишком много.
15 янв 14, 13:23    [15418225]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34619
Raskolnikov
Можно ещё уточнить такой момент: логические чтения (как и физические) возникают в результате не оптимального запроса, когда серверу приходится перебирать данные в таблицах (индексах)?


В общем, да, но бывают запросы, которые по-другому вообще никак нельзя выполнить.
Т.е. у некоторых запросов существует только один единственный план и он -- с высоким logical reads, и у тебя одна дилемма -- либо его выполнять в таком виде, либо не выполнять вообще.

Пример:

select * from THETABLE;


например, для выгрузки всех данных таблицы во внешний файл.


select count(distinct some_field) from THETABLE; -- some_field -- поле без индекса.



Т.е. (как тут уже говорили, например, Александр Гладченко) сам факт высокого логического чтения ещё не означает сам по себе обязательно, что план запроса неоптимален. Может быть два случая : либо план действительно неоптимален, либо лучше уже некуда, и просто по сути запрос "жрёт" много IO (логического или физического, если ему не хватит кэша).
15 янв 14, 13:44    [15418427]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
aleks2
Guest
MasterZiv
Пример:
select * from THETABLE;



Пример:
select 1;

более содержателен.
15 янв 14, 14:14    [15418622]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Александр Гладченко
Не слушайте таких "болтунов" :)
Александр, то что не надо искать запросы с количеством чтений больше заведомых Х, и что всё относительно - это само собой разумеещееся.
Проблема решается всегда сверху, есть тормоза/проблемы смотрим. Нет - не смотрим.

Если вы посчитаете что это подразумевалось, то все всеми было сказано верно.
Если ТС это не понимает - то сам себе буратино.

Человек так поставил вопрос - "о рассмотрении показателя как такового". Мол неважно будет ли у SELECT 1 делать сто-тыщ-миллионов чтений или 1 нет - совершенно неважно и запрещено тотально на это обращать внимания.
Доказываю:
Raskolnikov
почему много кто говорит, что большой показатель logical reads при выполнении запроса часто свидетельствует о проблемах?
Если небыло бы этой маленькой приписки - был бы другой смысл.

Притом тут вожно кому лично это было сказано.
Если гуру-разрабу - то это чушь, для его систем это не работает.
Если всем остальным говнокодерам - то скорее так и есть.
А аффтар не позиционирует себя гением в SQL.

А выпендриваться что попадаешь в белый список гуру магов SQL - толку-то?

MasterZiv, вы туда же.

И также согласен что пример вы привели сбивающий с толку. Банально если в системе есть такой запрос - то скорее разработчик бизнес задачи - дурак.

Пример который вы имеете ввиду привести очень тяжело. Да и ракурс странный. Надо именно контролировать правильность плана, или что число ридов соответствует заведомо рассчитанному числу или сопоставим с количеством результата.

И тут смотрится, какие запросы имеют такое несоответствие? Те что имею 100 ридов или 100500?
Конечно же что вы будете брать из топа, с максимальными ридами.
И что, вы сможете уменьшить риды меньше чем требует задача? Нет - это глупость, и поэтому ваши аргумент бессмысленен.

Вам всё равно придётся взять и рассмотреть этот запрос, оптимальный план там или нет, ибо это заведомо не может быть известно. Если всё пучком, то ставите запрос в белый список и берёте следующий, пока не добьётесь приемлемого результата.

Но если всё равно сильно грузит, то да, именно стоит рассмотреть смену бизнес логики, вплоть до заведомого "не выполнять вообще", помимо расширять железо до бесконечности.
15 янв 14, 19:22    [15421034]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Я согласен что стоит выписать на что обращать внимание в первую очередь и как высчитывать эти показатели.

К примеру. если запрос имеет 100500 ридов но выполняется раз - то это может быть ерунда (если не требуется от него быстрой работы), но если запрос делает 100 ридов но 100500 раз в минуту, то это важно посмотреть, как улучшить и почему вообще так много надо это собирать (может стоит закешировать).

Поэтому смотрят накопительные риды за период для каждого запроса. И есть соответствующие системные представления. Только надо шедуллер и ещё что-то сверху навесить (ибо там вымывается).

Рассмотрение этой агрегированной инфы я считаю неотъемлемая часть поддержки системы. Она контролирует адекватность восприятия процессов в системе.
16 янв 14, 03:03    [15422399]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34619
И также согласен что пример вы привели сбивающий с толку. Банально если в системе есть такой запрос - то скорее разработчик бизнес задачи - дурак.


Да какой же дурак ? Такой запрос любой bcp генерирует для выгрузки данных из таблицы, даже совершенно без участия этого самого разработчика.
16 янв 14, 14:24    [15424852]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
MasterZiv,

Ок. Согласен, спутал. Пример более не менее.
Distinct пойдёт. Заодно добавит к нему немного негатива.
16 янв 14, 14:40    [15424942]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
Raskolnikov
Member

Откуда:
Сообщений: 52
Александр Гладченко, спасибо за ответ!
Александр Гладченко
Если хотите получить действительно полезные знания, приводите тут пример с планами запроса и параметрами множеств, тогда можно будет рассчитывать на ответ, много в вашем случае логических чтений или слишком много.

На данный момент у меня нету каких-то конкретных проблем, с этим связанных. Тему создал для того, чтобы для себя определиться: это действительно проблема, это потенциальная проблема или же это вообще не проблема (имеется ввиду logical reads). Благодаря вашему ответу и ответам MasterZiv я для себя определился, что этот вопрос нужно себе задавать в контексте конкретного запроса и тогда уже можно понять проблема ли это.

MasterZiv, вам ещё раз спасибо за ответ! Благодаря вам и Александру, для меня ситуация прояснилась.

Mnior
Человек так поставил вопрос - "о рассмотрении показателя как такового". Мол неважно будет ли у SELECT 1 делать сто-тыщ-миллионов чтений или 1 нет - совершенно неважно и запрещено тотально на это обращать внимания.

Человек поставил вопрос, как смог, ввиду того, что, как вы правильно заметили:
Mnior
аффтар не позиционирует себя гением в SQL

Причем, замечу, что грамотные люди без завышеного ЧСВ поняли вопрос как следует (без "неважно будет ли у SELECT 1 делать сто-тыщ-миллионов чтений или 1 нет") и дали на него развернутые ответы. Ваши же ответы имеют небольшую ценность (для меня, по крайней мере) и из них понятно только то, что вам очень хочется выделиться и самоутвердиться, типа "посмотрите какой я умный, а ТС дурак". Получилось? Подздравляю. Возьмите с полки пирожок.
19 янв 14, 20:37    [15437363]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Почему logical reads зло?  [new]
inevity
Member

Откуда:
Сообщений: 14
По-хорошему, запрос нужно писать сразу "правильно", тогда проблемы - минимальны(лучше, если это будет делать "специально обученный" человек).

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

Поэтому чаще всего эффективно использовать этот показатель для отлова плохо написанных запросов, но все же лучше вообще не пускать в серьезную рабочую базу тех, кто не понимает как более менее грамотно строить запросы.
30 янв 17, 07:09    [20159884]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
МуМу
Member

Откуда:
Сообщений: 1134
(Если мы говорим о больших системах)Бывает и ЦПУ - небольшой, не в этом дело. Page life expcantacy - вроде падает, но потом растет, в чем проблема? Много каких параметров в норме. Но учтите - если количество логических чтений у вас выше нормы - это потенциальная проблема! Есть такое понятие "виртуально_реальное" как шина данных. Опытом многих специалистов была найдена зависимость - Много логических чтений при не большом отъедании ЦПУ - все равно проблема. Найдите эти запросы(reads) и оптимизируйте их - да будет вам счастье!
2 фев 17, 03:54    [20171759]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
странная тема...
автор
если количество логических чтений у вас выше нормы

а сколько в вашей больнице средняя температура?

автор
Много логических чтений при не большом отъедании ЦПУ - все равно проблема

читает много - плохо, читает много и не думает - плохо... а что у вас вообще sql делает? реализовывает калькулятор?
2 фев 17, 08:11    [20171843]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
автор
программистов относятся к sql-запросам как к обычному коду


а как ещё относиться к коду людям, никогда не сталкивающихся с декларативными языками?
2 фев 17, 18:20    [20174787]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
МуМу
Member

Откуда:
Сообщений: 1134
То TaPaK. Я так понял что сарказм обращен ко мне?
http://www.perfexpert.ru/
Ну типа я изначально делал, партнеры года(2016) Microsoft
Я думаю что я в теме. Есть клиенты с 160 ядрами серваки(максимальные на текущий момент). Много читает или мало сервер логических данных - все относительно, но есть методики позволяющие решить проблемы. Если вы не в курсе того что законы Мура уже не действуют в расчете на один процессор, что такое NUMA архитектура(какую роль привнесла архитектура SSD дисков) и что такое шина данных - наверное спорить с вами сложно.
3 фев 17, 01:51    [20175717]     Ответить | Цитировать Сообщить модератору
 Re: Почему logical reads зло?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Владислав Колосов
автор
программистов относятся к sql-запросам как к обычному коду


а как ещё относиться к коду людям, никогда не сталкивающихся с декларативными языками?
Да какой SQL, какие декларативные языки, вы о чем? ORM framework-и же, и SQL знать вообще не надо! Программист SQL, такого понятия вообще уже нет. ДБА еще да, или там отчеты писать, там обычно понимают что какой то SQL надо знать, но не для поточной разработки апликух.

inevity
(лучше, если это будет делать "специально обученный" человек).

Ему же платить придется много!
3 фев 17, 03:49    [20175761]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить