powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / set explain on (FB-3): record length: N, key length: M. Вопрос по N & M.
10 сообщений из 10, страница 1 из 1
set explain on (FB-3): record length: N, key length: M. Вопрос по N & M.
    #38571032
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

Ввожу в LI-T3.0.0.30889:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SQL> set explain on;
SQL> select r from (select cast(1 as smallint) r from rdb$fields rows 1) order by r;;

Select Expression
    -> Sort (record length: 36, key length: 8)
        -> First N Records
            -> Table "RDB$FIELDS" Full Scan

      R
=======
      1
- и диву даюсь: как может быть длина ключа у smallint-столба, подаваемого из derived-таблицы наружу, равна 8 байтам ? И откудова тут длина записи = 36 ?
Если это rdb$db_key (char(8) ?) влияет, то... всё равно не понимаю, откуда такие цифры вылезли ?
Число 8 - это минимальный размер для паддинга, что ле ?
еще парочка примеров
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SQL> select r from (select null r from rdb$fields rows 1) order by r;;

Select Expression
    -> Sort (record length: 36, key length: 8)
        -> First N Records
            -> Table "RDB$FIELDS" Full Scan

R
======
<null>

SQL> select r from (select rdb$db_key r from rdb$fields rows 1) order by r;

Select Expression
    -> Sort (record length: 36, key length: 12)
        -> First N Records
            -> Table "RDB$FIELDS" Full Scan

R
================
0200000001000000
...
Рейтинг: 0 / 0
set explain on (FB-3): record length: N, key length: M. Вопрос по N & M.
    #38571036
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидЧисло 8 - это минимальный размер для паддинга, что ле ?
Нет, это размер ключа в который преобразуется любое число. В целую запись входят
нулл-флаги и таки да, выравнивание.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
set explain on (FB-3): record length: N, key length: M. Вопрос по N & M.
    #38571038
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ok, а 36 откудова ? чем там, "внутри", выглядит rdb$db_key, какой у него размер ?
...
Рейтинг: 0 / 0
set explain on (FB-3): record length: N, key length: M. Вопрос по N & M.
    #38571048
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

я думаю, ты забыл про заголовок записи/версии - номер транзакции, версия метаданных, null-поля, и т.д.
...
Рейтинг: 0 / 0
set explain on (FB-3): record length: N, key length: M. Вопрос по N & M.
    #38571049
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
set explain on (FB-3): record length: N, key length: M. Вопрос по N & M.
    #38571154
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
там как минимум одна ошибка в коде есть. Сейчас у меня 32 байта на запись выходит, но в идеале должно быть чуть больше 20 байт. Разберусь - отпишу.
...
Рейтинг: 0 / 0
set explain on (FB-3): record length: N, key length: M. Вопрос по N & M.
    #38571190
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvdoc_384kdv, спасибо за тынц. Видел когда-то давно на сайте Вальдерамы статью про это, но она "какая-то другая" была, кажись.
...
Рейтинг: 0 / 0
set explain on (FB-3): record length: N, key length: M. Вопрос по N & M.
    #38571437
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем, длина должна быть 24 байта для первого запроса. Ключ = 4 байта значение + 1 байт под NULL + выравнивание до 4 байт = 8 байт. Запись = ключ 8 байт + информация по таблице 13 байт (dbkey и txnid) + выравнивание до 4 байт = 24 байта. Сейчас закоммичу фикс. Понятно, что в реальных запросах таких 50%-ных потерь никогда не будет и эффект от фикса будет небольшим.
...
Рейтинг: 0 / 0
set explain on (FB-3): record length: N, key length: M. Вопрос по N & M.
    #38571458
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr,

если номер транзакции + dbkey всё равно подвержен выравниваю и 8 + 13 = 21 -> 24, то почему не увеличили счётчик транзакций до 6 байт, ведь оверхэду в этом случае взяться не откуда?
...
Рейтинг: 0 / 0
set explain on (FB-3): record length: N, key length: M. Вопрос по N & M.
    #38571483
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

во-первых, не вижу связи между сортировкой и счетчиком транзакций. Счетчик ограничен 4 байтами на уровне ОДС и еще сотней мест.

во-вторых, финальное выравнивание - оно для всей записи сортировки, а не для 13 байт. Выравниваются dbkey и txnid отдельно, каждый под свой размер, просто в данном случае выравнивание им не требуется (ключ и так равен 8 байт).
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / set explain on (FB-3): record length: N, key length: M. Вопрос по N & M.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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