powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Процедура и кэши (ASE 12.5)
52 сообщений из 52, показаны все 3 страниц
Процедура и кэши (ASE 12.5)
    #35960319
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня!
Подскажите пожалуйста.
Есть процедура с параметрами.
Сколько раз ее ни запускаю (с одними и теми же параметрами) отрабатывает одинаково долго.
Почему данные не кэшируются?
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35960357
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
немного добавлю:
в процедуре выполняются запросы, которые сохраняются в курсоры "#tab1", "#tab2", "#tab3".
а затем с этих трех таблиц делается "union".
есть подозрение что именно в этом вся загвоздка, а точнее при insert'e в курсоры.
куда смотреть, что править??? help.
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35961861
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
set statistics io on
exec your_proc
set statistics io off

покажит вам что не кэшируеться, но думаю у вас что-то другое.
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35967661
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Imperous wrote:

> Сколько раз ее ни запускаю (с одними и теми же параметрами) отрабатывает
> одинаково долго.
> Почему данные не кэшируются?
А почему вы думаете, что они не кэшируются ?
Процедура может выполняться долго, даже если данные
все закэшированы.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35968908
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
я видел то, насколько быстро эта процедура умеет отрабатывать...
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35968945
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den
Код: plaintext
1.
2.
3.
set statistics io on
exec your_proc
set statistics io off

покажит вам что не кэшируеться, но думаю у вас что-то другое.
не показывает, процедура отрабатывает и больше никакой инфы нету...
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35969017
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Imperous,

в чем ваполняете? клиент какой?
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35969059
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_DenImperous,

в чем ваполняете? клиент какой?
из централи
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35969107
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Imperous,

незнаю что такое "централи"!

выполните в isql или SQL Advantage!
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35969178
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_DenImperous,

незнаю что такое "централи"!

выполните в isql или SQL Advantage!
можно сказать что это SQL Advantage который находится в централь (Sybase Central), но называется isql
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35969238
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Imperous,

вы должны увидеть что-то типа:
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35969240
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35969253
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
где,

logical reads: (regular=14 apf=0 total=14)
страницы из кэша, а

physical reads: (regular=0 apf=0 total=0)
страницы считаные с диска.
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35969313
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выполнил в isql, вижу результат, но не понимаю что с ним делать
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35969320
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аа понял, но к сожалению сейчас попробовать не могу, сейчас все летает :(
и чтение показывает только логическое...
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35969680
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den wrote:
> logical reads: (regular=14 apf=0 total=14)
> страницы из кэша, а
> physical reads: (regular=0 apf=0 total=0)
> страницы считаные с диска.

Я поясню. Если в

physical reads: (regular=R apf=P total=T)

хотя бы одна из R или P не равна нулю, то
физическое чтение есть. Если обе равны нулю, то его нет
(т.е. всё берётся из кэша).

Последнее значение T = R + P
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35969981
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
появилось два вопроса связанных с этим:
1) если все же чтение происходит с диска, как это вылечить, как эти данные закинуть в кэш (без создания именованного кэша и привязки к нему) ?
2) если данные кэша и данные таблицы различны (возможна ли вобще такая ситуация?), то как обновить кэш?
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35970028
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Imperous wrote:

> 1) если все же чтение происходит с диска, как это вылечить, как эти
> данные закинуть в кэш (без создания именованного кэша и привязки к нему) ?

Никак. Чтение с диска для БД -- это нормально. Все данные в кэш никогда не
положешь, на то он и кэш. Если нужно наполнить кэш, нужно просто прочитать
нужные данные и всё. Но это очень редко требуется делать специально.

> 2) если данные кэша и данные таблицы различны (возможна ли вобще такая
> ситуация?),

Нет, такая ситуация невозможна.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35971358
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня удалось застигнуть опять эту ситуацию (с тормозами) и немного проаналировать.
включил:
- set statistics io on
- set showplan on
запустил процедуру.

В плане я увидел то, что в одной (большой) таблице, в 3 из 6 раз, не используется индекс, и идет table scan.
В статистике я увидел то, что все данные, всех таблиц взялись из кэша.

Запускаю эту процедуру несколько раз с одними и теми же параметрами, но отрабатывает она очень долго, хотя еще вчера "летала".

Появились вопросы:
- почему не всегда используется индекс?
- почему в кэше не сохранился результат?
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35971380
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Imperous wrote:

> Появились вопросы:

Встречные вопросы:

> - почему не всегда используется индекс?

А почему ты думаешь, что он всегда должен использоваться ?

> - почему в кэше не сохранился результат?

В каком кэше и какой результат ?
Ты же вроде бы написал, что "В статистике я увидел то, что все данные, всех
таблиц взялись из кэша."
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35971512
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) я думаю логично когда индексы все же используются для выборки...
2) согласен, что-то я не то сморозил
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35971996
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Imperous wrote:
> 1) я думаю логично когда индексы все же используются для выборки...

Иногда -- логично, иногда -- нет.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35972365
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Желание, чтобы данные были по максимуму в кэше понятно, но не обосновано. Присутствие в кэше всех данных еще не говорит о том, что процедура будет "летать", и наоборот, чтобы процедура летала необязательно все иметь в кэше. Понимаете, на что я намекаю?

Нужно смотреть на планы выполняемых запросов и разбираться с производительностью их выполнения. Данные в кэше - это вторично и выкиньте временно это из головы.

P.S.: Кстати, присутствие всех данных в кэше может сыграть злую шутку именно тем, что сервер может выбирать перебор всей таблицы из памяти, а не чтение индекса с диска. Так что еще не известно, что хорошо, а что плохо.
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35972407
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iLLer что сервер может выбирать перебор всей таблицы из памяти, а не чтение индекса с диска.

это как? Оптимизатору обсолютно по барабану есть данные в кэше или их нет, на план это не влияет и он не проверияет сколько данных в кэше, а скоко на диске.(ИМХО) По моему он строит план, закладываясь на самый худший результат, когда данных в кэше нет(т.е. они все на диске)

Хотя могу и ошибаться!
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35972608
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer wrote:

> P.S.: Кстати, присутствие всех данных в кэше может сыграть злую шутку
> именно тем, что сервер может выбирать перебор всей таблицы из памяти, а
> не чтение индекса с диска.

Нет, не может. Наполненность кэша не учитывается при составлении плана.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35973690
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вывел построенный план запросов сейчас (когда все летает) - он совершенно отличается от того который был вчера, и индексы используюются везде....
Ничего не понимаю...
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35973910
up
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
iLLer wrote:

> P.S.: Кстати, присутствие всех данных в кэше может сыграть злую шутку
> именно тем, что сервер может выбирать перебор всей таблицы из памяти, а
> не чтение индекса с диска.

Нет, не может. Наполненность кэша не учитывается при составлении плана.



http://infocenter.sybase.com/help/topic/com.sybase.dc20023_1251/html/optimizer/X25495.htm
http://infocenter.sybase.com/help/topic/com.sybase.dc20023_1251/html/optimizer/X33106.htm
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35974840
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Нет, не может. Наполненность кэша не учитывается при составлении плана.

Значит я ошибся, и подходы АСА и АСЕ тут расходятся...
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35974868
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
up
http://infocenter.sybase.com/help/topic/com.sybase.dc20023_1251/html/optimizer/X25495.htm
http://infocenter.sybase.com/help/topic/com.sybase.dc20023_1251/html/optimizer/X33106.htm

Ну вот, собсно мои подозрения подтверждаются. Я мыслил логически, основываясь на том, что любая более-менее серьезная СУБД должна расчитывать стоимость выполнения запроса и выбирать план с наименьшей стоимостью. А стоимость, как известно, очень сильно зависит от I/O, и как следствие ее сложно подсчитать не зная и пренебрегая объемом нужных данных в кэше.
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35975077
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В любой момент времени в кэше будут разные данные. может 10% нужных данных в кэше, а через 5мин 50%, или вообще 0%. От сюда вопрос какой план должен закешироваться в процедурном кэше(основываясь на 10% или 50%, а может 0%)? если кэш данных не статичен и постоянно изменяем, а план зависит от наполненности кэша.
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35975169
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще больше не уверен, что оптимизатор сделает "тэйбл скан", а не пойдет по подходящему индексу, основываясь на том что все данные в кэше(случай с маленькими таблицами не берем).
Ему все равно будет выгодней идти по индексу, чем по всей таблице. Можно конечно допустить, что данные в кэше есть, страниц индекса нет, но все равно будет выгодней по индексу(ИМХО). И если такая ситуация все же встретилась, то это проблема организации кэша!
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35975420
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_DenЕму все равно будет выгодней идти по индексу, чем по всей таблице.
зависит от селективности индекса и размера таблицы
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35975452
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad,

Согласен! Но это не зависит от наполненности кэша!
Я считаю что кэш данных, это достаточно динамично изменяемая штука. Если бы была такая зависимость существовала, то тогда отпадает надобность в процедурном (или стэйтмент) кэше!

Скорее всего, оптимизатор учитывает какую-то среднестатистическую информацию о наполненности кэша!
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35975455
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Denслучай с маленькими таблицами не берем
Дело в том, что понятия "маленькой таблицы" для ЭВМ и СУБД не существует. Она оперирует сухими, безжизненными и оторванными от реальности цифрами. Любая мат.модель лишь приблизительно описывает поведение реальности. И именно основываясь на законах сравнения этих цифр оптимизатор и приходит к выводу, что выгоднее, а что нет. А вот в результате чего вдруг эти самые цифры стали плохо отражать реальность и модель расчета стоимости дает сбой, вот это и есть вопрос. Может переполнился счетчик какой-то внутренний и БОЛЬШАЯ таблица для оптимизатора превратилась в маленькую?! Вот он и решил перелопатить по-быстрому кэш. А может вдруг по какой-то причине стоимость I/O подскочила? И одна операция ввода-вывода стала стоить как футбольная комманда? Тут оптимизатор тоже совершенно честно выбрал путь наименьшего сопротивления. Либо статистика по данным испортилась, либо слишком неочевидный запрос для оптимизатора, либо... Гадать можно долго. Алгоритмы оптимизатора скрыты и для нас недоступны.
В таких случаях есть возможность:
1) Упростить/разбить/видоизменить запросы
2) Установить подсказки оптимизатору, если разработчик на 100% уверен в гарантированной работоспособности своих подсказок.
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35975459
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_DenЯ считаю что кэш данных, это достаточно динамично изменяемая штука. Если бы была такая зависимость существовала, то тогда отпадает надобность в процедурном (или стэйтмент) кэше!

Скорее всего, оптимизатор учитывает какую-то среднестатистическую информацию о наполненности кэша!
Если бы кэш был размером с ноготь мизинца, то неудивительно, что данные в нем не задерживаются и вымываются с завидным постоянством и скоростью. А если кэш немеряный?))
И поток запросов юзает одно и тоже массивное и теплое, лежащее сначала на диске, а потом и в кэше?
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35975473
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Могу ответственно заявить, что индексы не всегда быстрее и лучше. И с точки зрения оптимизатора, и с точки зрения практики.
При HASH перемножении двух больших множеств (больших - это значит соизмеримых с размером кэша), которые уже имеются в памяти конечный результат достигается быстрее, чем дерганье индекса (тут даже уже и не важно, есть индекс в кэше или нет). Проверено.
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35975490
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer wrote:

> Значит я ошибся, и подходы АСА и АСЕ тут расходятся...
Вряд ли. Вряд ли и ASA думает о наполненности кэша.
Это -- универсально разумный подход. Когда составляется
план, кэш может быть заполнен данной таблицей (кстати,
выяснение заполненности кэша таблицами -- задача достаточно
трудоёмкая, чтобы уже только из-за этого отказаться от её решения во время
оптимизации), а когда запрос выполняется, кэш уже может быть
от этой таблицы очищен.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35975496
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer wrote:

>
> Ну вот, собсно мои подозрения подтверждаются.

Какие и как подтверждаются ? Ещё раз:
я полагаю, что никакая СУБД не учитывает при сотавлении
плана запроса факт, находятся ли нужные для запроса
данные в кэше СУБД или нет.
Более того, я могу утверждать это определённо в отношении
очень многих СУБД. В частности, ASE, MSSQL, MySQL.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35975504
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den wrote:

> Я считаю что кэш данных, это достаточно динамично изменяемая штука.

Что значит "я считаю" ?
Это так и есть. Сейчас кэш наполнен, через минуту - пуст (относительно
этой таблицы). А план тот же остался.

> Скорее всего, оптимизатор учитывает какую-то среднестатистическую
> информацию о наполненности кэша!

Нет. Он вообще никакую информацию о наполненности кэша не
учитывает. В частности, ASE-шный оптимизатор уж точно (в смысле, я это
просто знаю) никак не зависит от текушей наполненности кэша. Он
вообще не думает о том, какой будет IO -- физический или логический.
Он может только оценивать общий объём доступного для данного объекта
кэша (дефолтный или именованый кэш), размеры пулов ввода-вывода, и
то, как этот кэш будет заполняться в ходе выполнения данного запроса
при применении выбранных для его выполнения стратегий работы с кэшем.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35975673
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

Полностью согласен с вами! Я это и пытался доказать!
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35975703
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iLLer,

Вот ,что я имел введу под "маленькими таблицами"
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35976073
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Нет. Он вообще никакую информацию о наполненности кэша не
учитывает. В частности, ASE-шный оптимизатор уж точно (в смысле, я это
просто знаю) никак не зависит от текушей наполненности кэша. Он
вообще не думает о том, какой будет IO -- физический или логический.
Он может только оценивать общий объём доступного для данного объекта
кэша (дефолтный или именованый кэш), размеры пулов ввода-вывода, и
то, как этот кэш будет заполняться в ходе выполнения данного запроса
при применении выбранных для его выполнения стратегий работы с кэшем.

Не спора ради, а из-за здорового любопытсва.

авторFactors examined during optimization
Query plans consist of retrieval tactics and an ordered set of execution steps to retrieve the data needed by the query. In developing query plans, the optimizer examines:

The size of each table in the query, both in rows and data pages, and the number of OAM and allocation pages that need to be read.

The indexes that exist on the tables and columns used in the query, the type of index, and the height, number of leaf pages, and cluster ratios for each index.

Whether the index covers the query, that is, whether the query can be satisfied by retrieving data from the index leaf pages without having to access the data pages. Adaptive Server can use indexes that cover queries, even if no where clauses are included in the query.

The density and distribution of keys in the indexes.

The size of the available data cache or caches, the size of I/O supported by the caches, and the cache strategy to be used.

The cost of physical and logical reads.

Join clauses and the best join order and join type, considering the costs and number of scans required for each join and the usefulness of indexes in limiting the I/O.

Whether building a worktable (an internal, temporary table) with an index on the join columns would be faster than repeated table scans if there are no useful indexes for the inner table in a join.

Whether the query contains a max or min aggregate that can use an index to find the value without scanning the table.

Whether the data or index pages will be needed repeatedly to satisfy a query such as a join or whether a fetch-and-discard strategy can be employed because the pages need to be scanned only once.

For each plan, the optimizer determines the total cost by computing the logical and physical I/Os. Adaptive Server then uses the cheapest plan.

Stored procedures and triggers are optimized when the object is first executed, and the query plan is stored in the procedure cache. If other users execute the same procedure while an unused copy of the plan resides in cache, the compiled query plan is copied in cache, rather than being recompiled.



авторBasic units of costing
When the optimizer estimates costs for the query, the two factors it considers are the cost of physical I/O, reading pages from disk, and the cost of logical I/O, finding pages in the data cache. The optimizer assigns 18 as the cost of a physical I/O and 2 as the cost of a logical I/O. These are relative units of cost and do not represent time units such as milliseconds or clock ticks. These units are used in the formulas in this chapter, with the physical I/O costs first, then the logical I/O costs. The total cost of accessing a table can be expressed as:

Cost = All physical IOs * 18 + All logical IOs * 2


Из выделенного можно понять, что сервер все-таки разделяет физические и логические IO. И более того, видно, что одно физическое по стоимости равно 9-ти логическим. Константно и не поддается пересчету.
Вопрос, а зачем он разделяет операции ввода-вывода? Если думать логически, то если он не учитывает информацию о наличии данных в кэше, считает подефолту все необходимые данные находящимися на диске и не использует никакую статистику по данным в памяти, то зачем ему логические операции ввода-вывода? Получается в каких-то случаях он ее использует. При построении временных и рабочих таблиц, таких же индексов? И прочих внутренних объектов для выполнения запроса? Возможно. Я код сервера не дизассемблировал, и потому утверждать однозначно не могу ни одно, ни другое. А без исходного алгоритма все превращается в теории разной степени достоверности. А может у меня в голове заблуждения, относительно толкования терминов physical/logical IO...

При построении плана по хранимым процедурам, АСЕ наверняка не использует статистику по памяти именно из-за того, что план ее выполнения он сохраняет и использует при дальнейших вызовах. В такой ситуации, конечно же, глупо учитывать наличие данных в кэше. Но если бы оптимизатор пересчитывал план каждый раз для каждого запроса, то идея учитывать положение требуемых страниц уже не кажется такой абсурдной. И по моему опыту могу сказать, что АСА занимается чем-то подобным, она ж всегда составляет план перед каждым запросом. Да и с точки зрения реализации это не так уж и сложно. При размере страницы в 8К и размере требуемого массива данных в 100М, кол-во страниц будет порядка 12 тысяч и размер таблицы с битовыми флажками по доступности этих страниц в кэше будет менее двух килобайт. Пробежаться циклом по двум килобайтам и проверить наличие - это не задача для современной техники. К тому же, подобные карты нахождения страниц, их грязности и необходимости скидывания на носитель и так существуют в СУБД.
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35976154
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer wrote:

> *The cost of physical and logical reads.*

> *For each plan, the optimizer determines the total cost by computing the
> logical and physical I/Os. Adaptive Server then uses the cheapest plan.*

> Из выделенного можно понять, что сервер все-таки разделяет физические и
> логические IO.

В анализе -- конечно выделяет. Но эти цифры у него не зависят от текущей
наполненности кэша. Только от размера кэша, размера таблицы/индексов,
размера пулов ввода-вывода.

> Вопрос, а зачем он разделяет операции ввода-вывода?

Ну, это базовые единицы стоимости выполнения запроса. Он и
выделяет их две. Как зачем ? ну ясно же что физическое и логическое
чтение будут разными по времени.

Если думать
> логически, то если он не учитывает информацию о наличии данных в кэше,
> считает подефолту все необходимые данные находящимися на диске и не
> использует никакую статистику по данным в памяти, то зачем ему
> логические операции ввода-вывода?

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

Точнее конечно не так, потому что всё IO считается логическим сначала,
а потом добавляется к нему физическое IO, которое оценивается
исходя из объемов кэшей.

Получается в каких-то случаях он ее
> использует.

ЧТО использует ?
Ты себе сам ответь на этот вопрос -- сразу понятнее будет.
И хотя бы представь сложность задачи оценки процента данных
таблицы, находяшихся в данный момент в кэше. Это надо между
прочим весь кэш перелопатить и все страницы таблицы подёргать.
Это O(N*log M) где N - кол-во страниц таблицы, а M - кол-во
страниц в кэше. К тому же сервер никогда не имеет в своём
распоряжении списка всех страниц таблицы или индекса.


> Я код сервера не дизассемблировал, и потому утверждать однозначно не
> могу ни одно, ни другое.

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

А без исходного алгоритма все превращается в
> теории разной степени достоверности. А может у меня в голове
> заблуждения, относительно толкования терминов physical/logical IO...

logical IO -- это любое одно обращение к кэшу за страницей данных (индекса или
таблицы). Не через кэш чтения данных не бывает.

physical IO -- это одно обращение к кэшу за страницей данных, вызвавшее
физическое чтение страницы (страниц) с диска. Это происходит, когда
страницы нет в кэше.

> При построении плана по хранимым процедурам, АСЕ наверняка не использует
> статистику по памяти именно из-за того, что план ее выполнения он
> сохраняет и использует при дальнейших вызовах.

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

В такой ситуации, конечно
> же, глупо учитывать наличие данных в кэше. Но если бы оптимизатор
> пересчитывал план каждый раз для каждого запроса, то идея учитывать
> положение требуемых страниц уже не кажется такой абсурдной.


Некоторые запросы могут выполняться часами. На сервере работает
много пользователей. Уже исходя из этого содержимое кэша может
сильно меняться.

И по моему
> опыту могу сказать, что АСА занимается чем-то подобным, она ж всегда
> составляет план перед каждым запросом.

ASE тоже иногда составляет план перед каждым запросом, но очень сомневаюсь,
что ASA использует данные о текущей наполненности кэша для составления
планов. Я, ещё раз, очень сомневаюсь, что вообще какая-то СУБД так делает.

Да и с точки зрения реализации
> это не так уж и сложно. При размере страницы в 8К и размере требуемого
> массива данных в 100М, кол-во страниц будет порядка 12 тысяч и размер
> таблицы с битовыми флажками по доступности этих страниц в кэше будет
> менее двух килобайт.

Ещё раз, прежде всего сервер никогда не располагает списком всех
страниц таблицы или индекса. Этот список выясняется только по мере
выполнения запроса.

Пробежаться циклом по двум килобайтам и проверить
> наличие - это не задача для современной техники. К тому же, подобные
> карты нахождения страниц, их грязности и необходимости скидывания на
> носитель и так существуют в СУБД.

Там другая карта. Какие страницы есть в данном кэше. Но списка
всех страниц таблицы нет.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35976387
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
ASE тоже иногда составляет план перед каждым запросом, но очень сомневаюсь,
что ASA использует данные о текущей наполненности кэша для составления
планов. Я, ещё раз, очень сомневаюсь, что вообще какая-то СУБД так делает.


Точно говорю, и даже этим свойством я пользовался. Припоминаю одну ситуацию, когда было необходимо выполнить сложный запрос, среди таблиц была одна объемом под 100млн, другая около 3, ну и мелочь всякая. Вообще запрос был очень плохой и тяжелый, но делался он исключительно ограниченное количество раз и смысла перекраивать что-то не было, проще было подождать выполнения. Так вот, с пустым кэшем он честно хватал индексы и все-такое. Если же перед этим делать хитрый холостой запрос, в котором тупо перемножались таблицы и считалось количесвто записей в перемножении (select count(*) from t1,t2,t3), то очевидно для этого он накачивал таблицы через кэш (они туда влезали целиком и не вытеснялись). Так вот, после такого запроса план первоначального запроса менялся в корне, никаких индексов, одни hash join и прочее подобные соединения массивов. Если после выполнения хитрого запроса с перемножением таблиц и искусственным затягиванием их в кэш сделать сброс кэша (sa_flush_cache), то все возвращалось на круги своя, использование индексов и все-такое. Я долго исследовал эту ситуацию, и статистику перестраивал и сервер в единоличное пользование брал для тестов вывод только один: либо это некая фича/баг у оптимизатора, либо он реально оценивал наличие нужных страниц в кэше. Эксперименты делал на АСА9.
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35976409
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer wrote:

> Точно говорю, и даже этим свойством я пользовался. Припоминаю одну
> ситуацию, когда было необходимо выполнить сложный запрос, среди таблиц

Не, не поверю. Пока сам не увижу, не поверю
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35976496
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Думаю пора привлекать спецов из тех.поддержки!

moris, ASCRUS рассудите нас!
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35988432
принцесса
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Imperous, я б Вам порекомендовала выполнить команду update ALL statistics ТАБЛИЦА (или обновить статистику по конкретным индексам), для тех таблиц, у которых иногда не берутся индексы при выполнении хранимой процедуры.
Должно помочь
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35988717
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_DenДумаю пора привлекать спецов из тех.поддержки!

moris, ASCRUS рассудите нас!
Официально в документации ничего про кеши в планах запросов не написано. Однако:
1. В детализации плана запроса на каждую таблицу показывается кол-во всех страниц таблицы и сколько из них лежит в кэше
2. Существует достаточно замороченный механизм сохранения в БД в отдельную область наиболее часто используемых страниц таблиц, висящих в кэше и соответствено не менее замороченный механизм поднятия записанных страниц кэша из БД в память как при старте сервера, так и в режиме его дальнейшей работы
3. Не менее заморочен механизм кэширования планов запросов (причем для каждой сессии ведется свой кэш плана запросов), с учетом параметров запроса, частоты его выполнения сессией, типа используемого курсора, проверок, что запрос в кэше не устарел и т.д.

Так что как минимум при оценке плана запроса учитывается, насколько много страниц таблицы уже лежит в кэше. А с учетом того, что ASA старается еще и кэш сохранять даже на момент перезапуска сервера, значит сервер вдумчиво относиться к кэшированию страниц и вполне возможно может использовать информацию по кэшу в плане запросов, хотя здесь уже конечно можно только предположить.
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35988927
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS wrote:

> Так что как минимум при оценке плана запроса учитывается, насколько
> много страниц таблицы уже лежит в кэше. А с учетом того, что ASA
> старается еще и кэш сохранять даже на момент перезапуска сервера, значит

Это всё про ASA ? Вроде бы про ASE речь...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35989244
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
принцессаImperous, я б Вам порекомендовала выполнить команду update ALL statistics ТАБЛИЦА (или обновить статистику по конкретным индексам), для тех таблиц, у которых иногда не берутся индексы при выполнении хранимой процедуры.
Должно помочь
update statistic я делал первым делом, и для талиц и для всех индексов отдельно...
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #35992399
moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДумаю пора привлекать спецов из тех.поддержки!

moris, ASCRUS рассудите нас

Ну вот и у меня наконец-то руки дошли до вашего вопроса.

Значит так - разумеется оптимизатор оценивает при генерации плана стоимости физического и логического IO, с теми коэффициентами, которые были представлены выше.. Однако при оценке логического / физического IO, оптимизатор полагается только на то, что он туда сам и положит на предыдущих шагах выполнения данного запроса..
Например, рассматривает разные стратегии выполнения запроса - то же самое реформатирование - (создание внутренней временной таблицы в tempdb, выполняя физическую запись).. Стоит ли ему его использовать??? Кол-во страниц умножается на соответствующие коеффициенты и получается общая стоимость плана..
Полученный план с реформатированием используя Physical IO, будет ли дешевле, чем энное кол-во раз запрашивать страницы из кеша Logical IO ???

При генерации плана оптимизатор не может оценить, сколько %% нужных страниц там находятся, (если он сам их туда не загонит.. см. выше)

Для того, что неверующих в этом убедить давайте выполним простой тест в ASE15..

dbcc traceon(3604)
go
set option show_pio_costing long -- оценка оптимизатора по физическому IO
go
set option show_lio_costing long -- оценка оптимизатора по логическому IO
go
set statistics io on -- реальный IO (почтитанный после выполнения запроса)
go


select * from PMATTR

FINAL PLAN ( total cost = 2289.5 ):
lio=57 pio=56 cpu=7755

Table: PMATTR scan count 1, logical reads: (regular=56 apf=0 total=56), physical reads: (regular=8 apf=48 total=56), apf IOs used=48


Еще раз выполняем.. Данные таблицы находятся точно в кеше.. Сможет ли оптимизатор при генерации плана увидеть это ??

FINAL PLAN ( total cost = 2289.5 ):
lio=57 pio=56 cpu=7755

Table: PMATTR scan count 1, logical reads: (regular=56 apf=0 total=56), physical reads: (regular=0 apf=0 total=0), apf IOs used=0

Ответ - нет, не видит..
...
Рейтинг: 0 / 0
Процедура и кэши (ASE 12.5)
    #36009550
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помните, я в самом первом топике этой темы спрашивал о том, как справиться с той ерундой которая у меня происходит?
Так вот ответ: sp_recompile "my_procedure" и после этого все летает :)
Но на всяк случай, до sp_recompile я еще сделал "Select * from my_tabel" по всем таблицам, которые используются в запросе.
...
Рейтинг: 0 / 0
52 сообщений из 52, показаны все 3 страниц
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Процедура и кэши (ASE 12.5)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]