powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как считаются логические чтения при доступе к табличному блоку по индексу?
15 сообщений из 15, страница 1 из 1
Как считаются логические чтения при доступе к табличному блоку по индексу?
    #39441720
хочу_знать
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите,
Допустим есть у меня таблица по полю которой построен индекс. И я выбираю данные с этой таблицы по индексу например по условию id > :n and id < :n1, т.е. в плане будет INDEX RANGE SCAN и TABLE ACCESS BY INDEX ROWID.
Так вот вопрос как считаются логические чтения?
Например находится блок индекса с нужными значениями (допустим весь наш диапазон помещается в одном листовом блоке) - это я так понимаю например 2 или 3 логических чтения (в зависимости от высоты дерева).
Далее в этом индексном блоке допустим 100 ROWID которые попадают в наш диапазон и по ним мы должны обратиться к блокам таблицы чтобы извлечь 100 записей. Но допустим все эти 100 ROWID находятся только в 20 блоках таблицы. То есть фактически нам нужно обратиться к блоку индекса и 20 блокам таблицы чтобы получить результат.
Как будет действовать Оракл - оптимизирует это дело (как??) и прочитает по разу эти 20 блоков - соответственно общее кол-во чтений будет 20 + 2 (индексных) или же он будет читать каждый блок по несколько раз и общее количество чтений будет 100 + 2 ?
...
Рейтинг: 0 / 0
Как считаются логические чтения при доступе к табличному блоку по индексу?
    #39441759
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хочу_знать,

Для начала надо определиться что ты понимаешь под LIO.
consistent gets (или еще db block gets? или в том числе consistent gets - examination? может какая-то еще статистика)
может вообще отдельная цифра session logical reads?
или
v$sql.buffer_gets
или что-то еще.

Если из одного блока читаются 20 строк, то он пойдет в статистику как один +1

Но есть моменты.
1. Во-первых для получения согласованной версии может быть необходимо прочитать более одного блока даже для одной строки
https://jonathanlewis.wordpress.com/2009/06/12/consistent-gets-2/
2. Во-вторых помимо собственно данных читаются разная служебная инфа. Для индекса, как минимум, путь от корня к данным. Для таблицы - заголовок сегмента и прочее (зависит от manual/automatic segment management).
3. В-третьих есть всякие оптимизации. Гугли consistent gets - examination richard foote.

Ну и напоследок - все можно трассировать.
Я демонстировал пару use case 10200 trace name context
...
Рейтинг: 0 / 0
Как считаются логические чтения при доступе к табличному блоку по индексу?
    #39441811
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopЕсли из одного блока читаются 20 строк, то он пойдет в статистику как один +1


Смотря в какую. Для consistent gets Зависит от fetch_array_size (Том Кайт) Если он будет =1 то будет ~ 20 + 1 consistent gets :)

хочу_знатьТо есть фактически нам нужно обратиться к блоку индекса и 20 блокам таблицы чтобы получить результат.
Как будет действовать Оракл - оптимизирует это дело (как??)


Будет 20 + 3 ( если высота 2) без оптимизаций. Другое дело в том что он может прочитать их за одно обращение, тем самым уменьшив LIO если блоки таблицы повторяються (INDEX ROWID BATCHED ACCESS)
...
Рейтинг: 0 / 0
Как считаются логические чтения при доступе к табличному блоку по индексу?
    #39441827
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ora601Смотря в какую. Для consistent gets Зависит от fetch_array_size (Том Кайт) Если он будет =1 то будет ~ 20 + 1 consistent gets :)Ну да, если речь про настройку плюса arraysize и фетч всего результата на клиент без использования агрегатов и тп. :))
...
Рейтинг: 0 / 0
Как считаются логические чтения при доступе к табличному блоку по индексу?
    #39441830
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при возможности оптимизирует
https://www.pythian.com/blog/batched-table-access/
...
Рейтинг: 0 / 0
Как считаются логические чтения при доступе к табличному блоку по индексу?
    #39441864
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хочу_знать,

Кайт

Индекс хранится отсортированным по ключу. Индекс будет просматриваться в порядке
сортировки ключей. Блоки, на которые указывает индекс, хранятся в случайном поряд-
ке, в виде кучи. Поэтому при доступе к таблице по индексу придется выполнять мно-
жество разрозненных, случайных операций ввода/вывода. Разрозненность объясняется
тем, что по индексу придется читать блок 1, блок 1000, блок 205, блок 321, блок 1, блок
1032, блок 1 и т.д., а не последовательно блок 1, затем 2, 3 и т.д. Придется читать блоки
случайным образом. В этом случае ввод/вывод одного блока может выполняться край-
не медленно.

В качестве упрощенного примера возьмем несложную таблицу, читаемую по индексу,
при условии, что должно быть прочитано 20 процентов строк. Предположим, в таблице
100000 строк. Двадцать процентов от этого составляет 20000 строк. Если строки в сред-
нем имеют длину 80 байт, в базе данных с размером блока 8 Кбайт в нем будет поме-
щаться около 100 строк. Это означает, что в таблице — около 1000 блоков. Теперь рассчи-
тать все будет несложно. Мы собираемся прочитать по индексу 20000 строк, другими
словами, выполнить 20000 операций TABLE ACCESS BY ROWID. Для выполнения этого
запроса придется обработать 20000 блоков таблицы. Хотя во всей таблице всего лишь
около 1000 блоков! В конечном итоге окажется, что мы прочитали и обработали каж-
дый блок в таблице в среднем 20 раз!
Даже если увеличить размер строки на порядок
(до 800 байт), что дает 10 строк в блоке, — такая таблица займет 10000 блоков. При
доступе по индексу к 20000 строк нам придется прочитать каждый блок в среднем дважды.
В данном случае полный просмотр таблицы будет намного эффективнее, чем доступ по
индексу, поскольку каждый блок будет просматриваться только один раз. Запрос, ис-
пользующий этот индекс для доступа к данным, не будет выполняться эффективно, если
в среднем обращается более чем к 5 процентам данных для столбца размером 800 байт
(в этом случае мы обратимся примерно к 5000 блоков) или к еще меньшей части (менее
0,5 процента) для столбца размером 80 байт.
...
Рейтинг: 0 / 0
Как считаются логические чтения при доступе к табличному блоку по индексу?
    #39442143
хочу_знать
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем, господа. Всё почитал, всё это интересно.
Но ещё раз, правильно я понимаю, что arraysize только для sqlplus. Повлиять на этот параметр внутри PLSQL пакета мы никак не можем?
Потому как с ним пару моих тестов, да собственно таких же как и у Кайта в главе упоминаемой stax... , всё выглядит логичным -
я так понимаю есть определённое количество записей (по умолчанию 15) - которые оракл считывает с блока индекса за раз и соответственно если блоки таблицы всех этих 15 записей совпадают, он один раз считает этот блок и извлечёт 15 записей (это одно логическое чтение блока таблицы). Дальше опять 15 с листового блока индекса и опять за одно логическое чтение читаем с этого же блока таблицы и т.д.
При изменении arraysize всё пропорционально изменяется.

Ещё раз спасибо.
...
Рейтинг: 0 / 0
Как считаются логические чтения при доступе к табличному блоку по индексу?
    #39442177
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хочу_знатьСпасибо всем, господа. Всё почитал, всё это интересно.
Но ещё раз, правильно я понимаю, что arraysize только для sqlplus. Повлиять на этот параметр внутри PLSQL пакета мы никак не можем?
Потому как с ним пару моих тестов, да собственно таких же как и у Кайта в главе упоминаемой stax... , всё выглядит логичным -
я так понимаю есть определённое количество записей (по умолчанию 15) - которые оракл считывает с блока индекса за раз и соответственно если блоки таблицы всех этих 15 записей совпадают, он один раз считает этот блок и извлечёт 15 записей (это одно логическое чтение блока таблицы). Дальше опять 15 с листового блока индекса и опять за одно логическое чтение читаем с этого же блока таблицы и т.д.
При изменении arraysize всё пропорционально изменяется.

Ещё раз спасибо.
...
Рейтинг: 0 / 0
Как считаются логические чтения при доступе к табличному блоку по индексу?
    #39442178
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хочу_знатьПовлиять на этот параметр внутри PLSQL пакета мы никак не можем?
Ну почему же. Если используешь явный курсор, то limit.
...
Рейтинг: 0 / 0
Как считаются логические чтения при доступе к табличному блоку по индексу?
    #39443001
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как считаются логические чтения при доступе к табличному блоку по индексу?
    #39443046
Фотография kinky cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DВАпри возможности оптимизирует
https://www.pythian.com/blog/batched-table-access/
Вячеслав Любомудров http://www.juliandyke.com/Presentations/LogicalIO.ppt
Всегда было интересно спросить у наших уважаемых старожил форума - коллеги, вы гуглите эти ссылки каждый раз чтобы ответить вопрошающим, все это помните или у вас какие-то адские каталогизаторы ? ;)
...
Рейтинг: 0 / 0
Как считаются логические чтения при доступе к табличному блоку по индексу?
    #39443440
kinky cat, я гуглю.
...
Рейтинг: 0 / 0
Как считаются логические чтения при доступе к табличному блоку по индексу?
    #39443447
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kinky cat,

Помним даже контент до запятой)
...
Рейтинг: 0 / 0
Как считаются логические чтения при доступе к табличному блоку по индексу?
    #39443749
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле, стОящих не так и много
...
Рейтинг: 0 / 0
Как считаются логические чтения при доступе к табличному блоку по индексу?
    #39443991
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kinky catВсегда было интересно спросить у наших уважаемых старожил форума - коллеги, вы гуглите эти ссылки каждый раз чтобы ответить вопрошающим, все это помните или у вас какие-то адские каталогизаторы ? ;)

когда знаешь что гуглить, проще нагуглить, чем объяснять своими словами )
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как считаются логические чтения при доступе к табличному блоку по индексу?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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