powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
18 сообщений из 18, страница 1 из 1
Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
    #38523291
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

В некоторой базейке есть вот такая небольшая табличка:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
TDETL (137)
    Primary pointer page: 236, Index root page: 240
    Total formats: 1, used formats: 1
    Average record length: 93.86, total records: 200000000
    Average version length: 0.00, total versions: 0, max versions: 0
    Average fragment length: 0.00, total fragments: 0, max fragments: 0
    Average unpacked length: 100.00, compression ratio: 1.07
    Pointer pages: 8252, data page slots: 6666568
    Data pages: 6666568, average fill: 82%
    Primary pages: 6666568, secondary pages: 0, swept pages: 0

full-scan по этой табличке потребует 413'341'388 фетчей, что в точности равно (число строк + data_page_slots) * 2 + Pointer_pages =
(200000000+6666568)*2 + 8252.
Не понимаю, зачем ему надо лазить по два раза для каждой записи как на обычную DP, так и data_page_slots.
И еще: если на одной DP размещается N>=2 записей, то почему нельзя считать их за 1 фетч ?
...
Рейтинг: 0 / 0
Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
    #38523345
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидfull-scan по этой табличке потребует 413'341'388 фетчей, что в точности равно (число строк + data_page_slots) * 2 + Pointer_pages =
(200000000+6666568)*2 + 8252.
Не понимаю, зачем ему надо лазить по два раза для каждой записи как на обычную DP, так и data_page_slots.
И еще: если на одной DP размещается N>=2 записей, то почему нельзя считать их за 1 фетч ?Вспомнил.
hvlad, 24.04.2010, http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=753376&msg=8683003 0 записей
Читаем PP. На ней нет DP. Итого 1 фетч.

1 запись.
Читаем PP. Читаем DP. Возвращаем запись №1. 2 фетча.
Читаем PP. Читаем DP. Нет записи №2. 2 фетча.
Читаем PP. Нет другой DP. Возвращаемся. 1 фетч.
Итого 5 фетчей.

2 записи.
Читаем PP. Читаем DP. Возвращаем запись №1. 2 фетча.
Читаем PP. Читаем DP. Возвращаем запись №2. 2 фетча.
Читаем PP. Читаем DP. Нет записи №3. 2 фетча.
Читаем PP. Нет другой DP. Возвращаемся. 1 фетч.
Итого 7 фетчей.
...
Рейтинг: 0 / 0
Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
    #38523348
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос к Источникам Света.
Запросы, в которых к таблицам применяется full scan и нет доп. условия отбора по индексу, не так уж редки: всякие там like / containing или similar to на справочных таблицах типа контрагентов, изделий и проч.
То есть, движок должен по-любому прочесть эту таблицу полностью. Да, эти справочники не по 200 млн записей, но и не по 10 тыс. И главное - "в них постоянно кто-то лезет" (сужу по своему продуктиву).

Если бы движок однократно прошелся по всем PP и составил по ним уникальный список всех DP этой таблицы, то затраты уменьшились бы вдвое.

Есть ли этот или подобный "ход конём" в громадье планов ФБ-3.х ?
...
Рейтинг: 0 / 0
Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
    #38523352
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

во-первых, я тебе уже предлагал забыть про "громадье планов", ибо через два-три месяца feature freeze. Во-вторых, число PP много меньше числа DP, откуда тут "затраты уменьшились бы вдвое"? В третьих, если "в них постоянно кто-то лезет", то PP будут в кеше и прочитать их будет дешево. В четвертых, ты как всегда игнорируешь конкуренцию и правила надежного обхода страниц.
...
Рейтинг: 0 / 0
Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
    #38523385
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrво-первых, я тебе уже предлагал забыть про "громадье планов", ибо через два-три месяца feature freeze.0xFF, конечно, но: есть ли шанс увидеть закоммиченным в 3.0 release патч Влада на онлайн-валидацию ?
dimitrВо-вторых, число PP много меньше числа DP, откуда тут "затраты уменьшились бы вдвое"?1) прочитали сразу все PP таблицы, составив список DP этой таблицы.
2) прочитали только один раз каждую DP (по составленному списку).
Разумеется, это годится только для full scan'ов, когда ясно, что молотить придётся всю таблицу.
dimitrВ третьих, если "в них постоянно кто-то лезет", то PP будут в кеше и прочитать их будет дешево.А разве они не будут постоянно вытесняться из кеша ввиду того, что был фулл-скан ?
dimitrВ четвертых, ты как всегда игнорируешь конкуренцию и правила надежного обхода страниц.Ну так чем меньше читаем, тем лучше будет "погода" при конкуренции, нет разве ? И что такое "правила надежного обхода" при селекте ?
...
Рейтинг: 0 / 0
Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
    #38523392
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидесть ли шанс увидеть закоммиченным в 3.0 release патч Влада на онлайн-валидацию ?
есть

Таблоид1) прочитали сразу все PP таблицы, составив список DP этой таблицы.
это уже неправильно, см. ниже

Таблоид2) прочитали только один раз каждую DP
это планируется, хотя и не всегда возможно

ТаблоидА разве они не будут постоянно вытесняться из кеша ввиду того, что был фулл-скан ?
ты же вроде тестировал, что фуллскан никого не вытесняет

ТаблоидНу так чем меньше читаем, тем лучше
это ты про себя, наверное :-)

ТаблоидИ что такое "правила надежного обхода" при селекте ?
по указателю от PP к DP. Иначе твой список стухнет при первом же конкурентном изменении и прочитаешь ты хрен пойми что.
...
Рейтинг: 0 / 0
Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
    #38523492
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrТаблоидА разве они не будут постоянно вытесняться из кеша ввиду того, что был фулл-скан ?
ты же вроде тестировал, что фуллскан никого не вытесняетне, я про обратную ситуацию: dp, прочтённые фулл-сканом, будут первыми на вылет из кеша - именно по той причине, что они читались ТАК, фулл-сканом. В писании же говорится русским по белому об этом: http://www.ibase.ru/devinfo/dataaccesspaths.htm#chapter111 1.1.1. Полное сканирование
Как только на странице нет больше данных и надо фетчить следующую, то текущая страница освобождается с признаком LRU (least recently used), уходя в "хвост" очереди и будучи таким образом первым кандидатом на удаление из кеша.
dimitrТаблоидИ что такое "правила надежного обхода" при селекте ?по указателю от PP к DP. Иначе твой список стухнет при первом же конкурентном изменении и прочитаешь ты хрен пойми что.А что сейчас ? Вот развёртка во времени запроса select count(*) from t при общем числе записей = 2:
Код: plaintext
1.
2.
3.
4.
5.
6.
t10. Читаем PP. 
t15. Читаем DP. Возвращаем запись №1. 
t20. Читаем PP. 
t25. Читаем DP. Возвращаем запись №2. 
t30. Читаем PP. 
t35. Читаем DP. Нет записи №3. 
t40. Читаем PP. Нет другой DP. Возвращаемся.
Что будет, когда PP прочитали в момент t20, полезли в следующий момент (t25) за DP, а она уже "протухла" ввиду конкуренции ?
...
Рейтинг: 0 / 0
Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
    #38523517
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидне, я про обратную ситуацию: dp, прочтённые фулл-сканом, будут первыми на вылет из кеша
DP - будут, PP - нет

ТаблоидЧто будет, когда PP прочитали в момент t20, полезли в следующий момент (t25) за DP, а она уже "протухла" ввиду конкуренции ?
это гарантируется порядком блокировок при переходе по указателю. DP не может "протухнуть" пока мы держим PP.
...
Рейтинг: 0 / 0
Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
    #38523537
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrэто гарантируется порядком блокировок при переходе по указателю. DP не может "протухнуть" пока мы держим PP.вооот! это оч-чень хорошо :-)
Значит, при фулл-скане можно:
1) залочить, затем прочитать PP-1 и составить список всех DP, которые там сидят;
2) обрабатывать список: перейти на каждую DP из него и выдёргивать оттуда данные;
3) высвободить PP-1;
4) залочить, затем прочитать PP-2 и составить список всех DP, которые там сидят
и т.п. для всех прочих PP этой таблицы.

Итого получается, что сканируем только 1 раз все PP и все DP этой таблицы.
Недостаток вижу только один: время удержания блокировки РР больше, чем сейчас.
Но зато сейчас на одну и ту же РР лезем по многу раз с этой же блокировкой.

Ы ?
...
Рейтинг: 0 / 0
Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
    #38523547
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А остальные должны нервно курить в сторонке пока ты маешься этой фигнёй, да...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
    #38523551
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА остальные должны нервно курить в сторонке пока ты маешься этой фигнёй, да...А это еще вопрос, сколько они будут покуривать, пока я 10 раз буду лочить одну и ту же РР, пусть и в разное время. "Эксперимент - критерий истины" ((С) Галилей ?).
...
Рейтинг: 0 / 0
Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
    #38523555
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Основное правило избегания дедлоков: держать блокировку только на одной странице
одновременно. Его можно было бы местами нарушать, но не в этом случае.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
    #38523571
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovОсновное правило избегания дедлоков: держать блокировку только на одной странице
одновременно. Его можно было бы местами нарушать, но не в этом случае.Мну кажется, что ты ошибся. Основное правило избежать именно deadlock'ов - это запрашивать блокировки всеми аттачами в строго определённом порядке, обязательном для каждого аттача. Какие предпосылки для дедлока будут в случае, когда всегда сначала лочится РР, а затем DP ?
...
Рейтинг: 0 / 0
Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
    #38523626
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидКакие предпосылки для дедлока будут в случае, когда всегда сначала лочится
РР, а затем DP ?
Хотя бы такие, что иногда они лочатся как раз наоборот: сначала DP, а потом PP. Например,
если на странице кончилось место.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
    #38523646
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

давай каждый из нас будет заниматься своим делом. Ы?
...
Рейтинг: 0 / 0
Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
    #38523649
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovХотя бы такие, что иногда они лочатся как раз наоборот: сначала DP, а потом PP. Например,
если на странице кончилось место.
очередные безумные фантазии?
...
Рейтинг: 0 / 0
Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
    #38523655
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrочередные безумные фантазии?
Алгоритм работы mark_full() поменяли?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
    #38523657
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovАлгоритм работы mark_full() поменяли?..
нет, просто ты его криво читал
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Извлечение записей при full-scan'e: зачем обращаться два раза в DP и в DATA_PAGE_SLOTS ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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