powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
40 сообщений из 40, показаны все 2 страниц
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38533649
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

Дано: таблица ts(x int), 95 млн строк. FB в режиме SuperClassic'a.

var-1:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> set stat on;
SQL> select count(*) from ts;

                COUNT
=====================
             94879606

Current memory = 144729656
Delta memory = 0
Max memory = 144802088
Elapsed time=  52.29 sec 
Cpu = 0.00 sec
Buffers = 16384
 Reads = 582442
Writes = 0
Fetches = 190923738 

var-2.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SQL> set explain on; set stat on;
SQL> select max(c) from (select count(x)over() c from ts);

Select Expression
    -> Aggregate
        -> Window
            -> Record Buffer
                -> Table "TS" Full Scan

                  MAX
=====================
             94879606

Current memory = 144838072
Delta memory = 0
Max memory = 153228088
Elapsed time=  282.54 sec 
Cpu = 0.00 sec
Buffers = 16384
 Reads = 582442
Writes = 0
Fetches = 190923738 

Во втором варианте ФБ должен сформировать окно и затолкать во все его строки результат count(*)over() - т.е. выполнить сначала проход по таблице, а затем по "строкам" окна.
Статистику манипуляций с окном - её можно где-то увидеть ?
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38533736
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм.
У меня под Windows вот этой строчки в статистике нет

Код: plaintext
Cpu = 0.00 sec

Код: plaintext
1.
2.
3.
4.
5.
ISQL Version: WI-T3.0.0.30854 Firebird 3.0 Alpha 2
Server version:
Firebird/Windows/AMD/Intel/x64 (access method), version "WI-T3.0.0.30854 Firebird 3.0 Alpha 2"
Firebird/Windows/AMD/Intel/x64 (remote server), version "WI-T3.0.0.30854 Firebird 3.0 Alpha 2/tcp (Den-PC)/P13:C"
Firebird/Windows/AMD/Intel/x64 (remote interface), version "WI-T3.0.0.30854 Firebird 3.0 Alpha 2/tcp (Den-PC)/P13:C"
on disk structure version 12.0
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38533738
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидСтатистику манипуляций с окном - её можно где-то увидеть ?
нет, нельзя
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38533769
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисУ меня под Windows вот этой строчки в статистике нетДык переходи быстрее на линух, тут гораздо больше инфы выдается! :-)
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38533772
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrТаблоидСтатистику манипуляций с окном - её можно где-то увидеть ?нет, нельзяЛадно. Но почему такое различие во времени ? Окно не влезло в память (TempCacheLimit ?) и он его засвопил, или причина в другом ?
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38533805
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисУ меня под Windows вот этой строчки в статистике нет

Код: plaintext
Cpu = 0.00 sec
Это время, затраченное клиентом. В нём есть какая-либо ценность ?
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38533808
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

раз так то не особо
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38533904
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидНо почему такое различие во времени ? Окно не влезло в память (TempCacheLimit ?) и он его засвопил, или причина в другом ?
а как 800МБ могло влезть в TempCacheLimit? :-)
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38534163
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrТаблоидНо почему такое различие во времени ? Окно не влезло в память (TempCacheLimit ?) и он его засвопил, или причина в другом ?
а как 800МБ могло влезть в TempCacheLimit? :-)Что-то не взлетает каменный цветок.
Вот статистика при дефолтном TempCacheLimit (у мну Super Classic, так что это будет 8М):
294"
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
SQL> set stat on; out /dev/null; 
SQL> set explain on; select max(c) from (select count(x)over() c from ts); set explain off;

Select Expression
    -> Aggregate
        -> Window
            -> Record Buffer
                -> Table "TS" Full Scan

Current memory = 144725192
Delta memory = 508992
Max memory = 153115208
Elapsed time= 294.79 sec
Cpu = 0.00 sec
Buffers = 16384
Reads = 582815
Writes = 0
Fetches = 190924278

SQL> select max(c) from (select count(x)over() c from ts);
Current memory = 144725192
Delta memory = 0
Max memory = 153115208
Elapsed time= 293.61 sec
Cpu = 0.00 sec
Buffers = 16384
Reads = 582442
Writes = 0
Fetches = 190923738

SQL> select max(c) from (select count(x)over() c from ts);
Current memory = 144725192
Delta memory = 0
Max memory = 153115208
Elapsed time= 294.02 sec
Cpu = 0.00 sec
Buffers = 16384
Reads = 582442
Writes = 0
Fetches = 190923738

А вот что происходит при TempCacheLimit = 1024M:
446"
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
SQL> set stat on; out /dev/null; 
SQL> select max(c) from (select count(x)over() c from ts);
Current memory = 144744328
Delta memory = 204080
Max memory = 1218576968
Elapsed time= 456.31 sec
Cpu = 0.00 sec
Buffers = 16384
Reads = 582815
Writes = 0
Fetches = 190924278

SQL> select max(c) from (select count(x)over() c from ts);
Current memory = 144744328
Delta memory = 0
Max memory = 1218576968
Elapsed time= 446.74 sec
Cpu = 0.00 sec
Buffers = 16384
Reads = 582442
Writes = 0
Fetches = 190923738

SQL> select max(c) from (select count(x)over() c from ts);
Current memory = 144744328
Delta memory = 0
Max memory = 1218576968
Elapsed time= 446.18 sec
Cpu = 0.00 sec
Buffers = 16384
Reads = 582442
Writes = 0
Fetches = 190923738
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38534184
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нельзя ли в статистике добавить насколько заполнен этот TempCache? Тогда было бы понятно попадают ли сортировки, хэш таблицы или материализованные таблицы в ОП или идут на диск.
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38534220
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для tempCacheLimit = 768M результат тот же, что для 1024М.
Для 384М - около 380 сек.

Есть смутное сомнение, что временные данные для over()-функций храняется вообще не в TCL, а в какой-то области, размер которой уменьшается при увеличении TCL. Ибо увеличение TCL не просто бестолку, а приводит к ухудшению.
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38534349
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

да, это будет в статистике

Таблоид,

а если TempBlockSize увеличить раз в 10?
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38534448
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrа если TempBlockSize увеличить раз в 10?Время перестало увеличиваться при увеличении TempCacheLimit. Но и не уменьшилось, застряло на одном значении :-(
var-1.
Код: plaintext
1.
TempBlockSize = 10M
TempCacheLimit = <default>
result:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> set stat on; out /dev/null; select max(c) from (select count(x)over() c from ts); out;
Current memory = 144725200
Delta memory = 508992
Max memory = 153114864
Elapsed time=  282.06 sec 
Cpu = 0.00 sec
Buffers = 16384
Reads = 582815
Writes = 0
Fetches = 190924278

var-2.
Код: plaintext
1.
TempBlockSize = 10M
TempCacheLimit = 1024M
result:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SQL> set stat on; out /dev/null; select max(c) from (select count(x)over() c from ts); out;
Current memory = 144725192
Delta memory = 508992
Max memory = 1218512776
Elapsed time=  288.32 sec 
Cpu = 0.00 sec
Buffers = 16384
Reads = 582815
Writes = 0
Fetches = 190924278
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38534460
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидНо и не уменьшилось, застряло на одном значении
значит, так дорого обходится постоянное копирование записей в/из temp space
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38534465
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и конечно же не надо сравнивать с count(*), сам знаешь почему. count(x) будет честнее.
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38534526
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrТаблоидНо и не уменьшилось, застряло на одном значениизначит, так дорого обходится постоянное копирование записей в/из temp spaceмда, печалько :(
На SS тоже самое, около 285 сек (при TempCacheLimit=1024m, TempBlockSize=10m).
А ведь по сути, он должен делать вот это:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SQL> create table tmp(c int); commit;
SQL> set stat on; insert into tmp(c) select count(x) from ts; select max(c) from (select t.c from ts, tmp t);
Current memory = 144714952
Delta memory = 497712
Max memory = 144786408
Elapsed time= 59.62 sec
Cpu = 0.00 sec
Buffers = 16384
Reads = 582828
Writes = 0
Fetches = 190924342

         MAX
============
    94879606

Current memory = 144724192
Delta memory = 9240
Max memory = 144786408
Elapsed time= 57.42 sec
Cpu = 0.00 sec
Buffers = 16384
Reads = 582444
Writes = 3
Fetches = 190923746
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38534635
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я понял. ему надо более 2.3 Гб для окна, и еще для сортировки 120 Мб.

Вот этот скрипт-логгер:
Код: plaintext
1.
2.
3.
4.
5.
6.
log=fbtempspaceusage_$(date +'%Y%m%d_%H%M%S').log
while :
do
 supertee -tan $log lsof -a +L1 /
 sleep 1
done
- выдаст для запроса
Код: sql
1.
set stat on; select * from (select count(distinct x)over() c from ts) rows 1;

следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Wed Jan 22 16:43:00 2014: COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NLINK     NODE NAME
Wed Jan 22 16:43:00 2014: firebird 8842 firebird    4u   REG    8,4 14680064     0 12591707 /tmp/fb_recbuf_qGPdqs (deleted)
Wed Jan 22 16:43:01 2014: COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NLINK     NODE NAME
Wed Jan 22 16:43:01 2014: firebird 8842 firebird    4u   REG    8,4 29360128     0 12591707 /tmp/fb_recbuf_qGPdqs (deleted)
Wed Jan 22 16:43:02 2014: COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NLINK     NODE NAME
Wed Jan 22 16:43:02 2014: firebird 8842 firebird    4u   REG    8,4 41943040     0 12591707 /tmp/fb_recbuf_qGPdqs (deleted)
. . .
Wed Jan 22 16:47:40 2014: COMMAND   PID     USER   FD   TYPE DEVICE   SIZE/OFF NLINK     NODE NAME
Wed Jan 22 16:47:40 2014: firebird 8842 firebird    4u   REG    8,4 2306867200     0 12591707 /tmp/fb_recbuf_qGPdqs (deleted)
Wed Jan 22 16:47:40 2014: firebird 8842 firebird    5u   REG    8,4  119537664     0 12591719 /tmp/fb_sort_ruYAsF (deleted)
Wed Jan 22 16:47:41 2014: COMMAND   PID     USER   FD   TYPE DEVICE   SIZE/OFF NLINK     NODE NAME
Wed Jan 22 16:47:41 2014: firebird 8842 firebird    4u   REG    8,4 2306867200     0 12591707 /tmp/fb_recbuf_qGPdqs (deleted)
Wed Jan 22 16:47:41 2014: firebird 8842 firebird    5u   REG    8,4  119537664     0 12591719 /tmp/fb_sort_ruYAsF (deleted)


2 dimitr: какое макс. значение TempCacheLimit понимает ФБ на 64-разрядной арх-ре ?
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38534648
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставил TempCacheLimit = 2047M, логгер temp-свопа показал, ес-сно, уменьшение на почти 2 Гб:
Код: plaintext
1.
2.
3.
COMMAND    PID     USER   FD   TYPE DEVICE  SIZE/OFF NLINK     NODE NAME
firebird 17788 firebird    4u   REG    8,4 228589568     0 12591707 /tmp/fb_recbuf_O15uWa (deleted)
firebird 17788 firebird    5u   REG    8,4 125829120     0 12591719 /tmp/fb_sort_lXWVL1 (deleted)
- но статистика всё равно хреновая (в сравнении этим же запросом из предыдущего поста, там было 284.77 sec):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> set stat on; select * from (select count(distinct x)over() c from ts) rows 1;

                    C
=====================
                65535

Current memory = 144910592
Delta memory = 502968
Max memory = 2309274928
Elapsed time= 205.15 sec
Cpu = 0.00 sec
Buffers = 16384
Reads = 582815
Writes = 0
Fetches = 190924278
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38534886
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, макс. скорость получилась при:
1) установке TempCacheLimit = 4096M (да, он "понимает" это; fb_rec_buf & fb_sort-файлов не создаётся)
2) переназначению TempDirectories на виртуальный диск tmpfs = /dev/shm емкостью 16Гб

При этом получилось:
Код: plaintext
1.
2.
3.
* при TempBlockSize =  10M  Elapsed time= 176.28 sec.
* при TempBlockSize = 100M  Elapsed time= 128.49 sec.
* при TempBlockSize = 200M  Elapsed time= 115.20 sec.

ЗЫ.
Так и не понял:
1) зачем вообще в запросе count(distinct x), что с over() что без, применять сортировку, которая жрёт 120 мегов. Можно ведь просто накапливать разные значения в некоторой структуре типа hashset и выдать затем число её элементов.
2) почему увеличение TempCacheLimit с 2 до 4 Гб приводит к такому уменьшению времени, если времянки всё равно создаются в оперативной памяти, на tmpfs емкостью 16 Гб.
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38534904
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и вот еще (из серии "мотай на ус / хозяйке на заметку").
На этой таблице есть два индекса:
Код: plaintext
1.
2.
TS_X_ASC INDEX ON TS(X)
TS_X_DESC DESCENDING INDEX ON TS(X)

Решил сравнить count(distinct x)over() с эквивалентным ему dense_rank()over(order by x)+dense_rank()over(order by x desc)-1.
В логе скрипта, смотрящего на появление файлов в /dev/shm, появилось вот это:
Код: plaintext
1.
2.
3.
4.
5.
COMMAND    PID     USER   FD   TYPE DEVICE   SIZE/OFF NLINK    NODE NAME
firebird 31962 firebird    4u   REG   0,17 1207959552     0 1840289 /dev/shm/fb_sort_yG2vQa (deleted)
firebird 31962 firebird    5u   REG   0,17 2340421632     0 1840290 /dev/shm/fb_recbuf_15gPME (deleted)
firebird 31962 firebird    9u   REG   0,17 5377097728     0 1840291 /dev/shm/fb_sort_iJHugt (deleted)
firebird 31962 firebird   10u   REG   0,17 5402263552     0 1840292 /dev/shm/fb_recbuf_Um8ftJ (deleted)
т.е. в сумме 6.5 гб на fb_sort и 5.4 гб на буфер. Понятно, что никаких индексов он не юзал, но я это помню еще с лета, проверял тогда.
На вторую сортировку у него ушло 5.37 гб - при том, что общий размер базы = 5.9 гб, а в таблице 100 млн int-чисел... Многовато жрёт, КМК.

Затраты по времени, ес-сно, оказались хуже плинтуса:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
                    C
=====================
                65535

Current memory = 144928000
Delta memory = 15336
Max memory = 4551284088
Elapsed time=  491.98 sec 
Cpu = 0.00 sec
Buffers = 16384
Reads = 582442
Writes = 0
Fetches = 190923738
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38534976
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидМноговато жрёт, КМК
там вполне сознательный и необходимый оверхед, причем он фиксирован. Посортируй 10 интов или что еще подлиннее и увидишь это.
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38535004
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидзачем вообще в запросе count(distinct x), что с over() что без, применять сортировку, которая жрёт 120 мегов. Можно ведь просто накапливать разные значения в некоторой структуре типа hashset и выдать затем число её элементов.

агрегирование хэшированием в FB пока увы нет (хотя я не уверен что здесь тот случай).
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38535028
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

тут вопрос в селективности X. При низкой хеш-таблица или дерево могут быть хороши. А при высокой сортировка переиграет вас в разы.
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38535030
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr,

ну так оптимизатор может ведь выбрать оптимальный вариант агрегирования, если соответствующие сведения доступны в статистике.
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38535032
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

вот когда будет из чего выбирать - тогда и разговор пойдет. И когда статистика будет не только по индексированным полям.
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38537395
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... а это, как его... вот установил я в конфиге ФБ параметр TempBlockSize = 200M, запустил в очередной раз при TempCacheLimit = 1024M запрос select * from (select count(distinct x)over() c from ts) rows 1 - и в другом окне мониторю объем времянок, которые создаются (в /tmp, т.е. через lsof -a +L1 /).
И вижу, что размер времянок увеличивается вовсе не на 200 Мб за 1 раз, а строго на 8 М .
И это одинаково как для fb_ rec_buf :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
COMMAND   PID     USER   FD   TYPE DEVICE   SIZE/OFF NLINK     NODE NAME
firebird 2309 firebird    4u   REG    8,4 1098907648     0 12591046 /tmp/fb_recbuf_2JnwrM (deleted)
COMMAND   PID     USER   FD   TYPE DEVICE   SIZE/OFF NLINK     NODE NAME
firebird 2309 firebird    4u   REG    8,4 1107296256     0 12591046 /tmp/fb_recbuf_2JnwrM (deleted)
. . .
COMMAND   PID     USER   FD   TYPE DEVICE   SIZE/OFF NLINK     NODE NAME
firebird 2309 firebird    4u   REG    8,4 1182793728     0 12591046 /tmp/fb_recbuf_2JnwrM (deleted)
COMMAND   PID     USER   FD   TYPE DEVICE   SIZE/OFF NLINK     NODE NAME
firebird 2309 firebird    4u   REG    8,4 1191182336     0 12591046 /tmp/fb_recbuf_2JnwrM (deleted)
. . .
COMMAND   PID     USER   FD   TYPE DEVICE   SIZE/OFF NLINK     NODE NAME
firebird 2309 firebird    4u   REG    8,4 1199570944     0 12591046 /tmp/fb_recbuf_2JnwrM (deleted)
COMMAND   PID     USER   FD   TYPE DEVICE   SIZE/OFF NLINK     NODE NAME
firebird 2309 firebird    4u   REG    8,4 1207959552     0 12591046 /tmp/fb_recbuf_2JnwrM (deleted)
size / measuremeasure-1measure-2measure-3size_after 1 107 296 256 1 191 182 336 1 207 959 552 size_before 1 098 907 648 1 182 793 728 1 199 570 944 size_diff 8 388 608 8 388 608 8 388 608
так и для fb_ sort _*
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
COMMAND   PID     USER   FD   TYPE DEVICE   SIZE/OFF NLINK     NODE NAME
firebird 2309 firebird    4u   REG    8,4 1300234240     0 12591046 /tmp/fb_recbuf_2JnwrM (deleted)
firebird 2309 firebird    5u   REG    8,4  100663296     0 12591588 /tmp/fb_sort_BcrYQF (deleted)
COMMAND   PID     USER   FD   TYPE DEVICE   SIZE/OFF NLINK     NODE NAME
firebird 2309 firebird    4u   REG    8,4 1300234240     0 12591046 /tmp/fb_recbuf_2JnwrM (deleted)
firebird 2309 firebird    5u   REG    8,4  109051904     0 12591588 /tmp/fb_sort_BcrYQF (deleted)
. . .
COMMAND   PID     USER   FD   TYPE DEVICE   SIZE/OFF NLINK     NODE NAME
firebird 2309 firebird    4u   REG    8,4 1300234240     0 12591046 /tmp/fb_recbuf_2JnwrM (deleted)
firebird 2309 firebird    5u   REG    8,4  109051904     0 12591588 /tmp/fb_sort_BcrYQF (deleted)
COMMAND   PID     USER   FD   TYPE DEVICE   SIZE/OFF NLINK     NODE NAME
firebird 2309 firebird    4u   REG    8,4 1300234240     0 12591046 /tmp/fb_recbuf_2JnwrM (deleted)
firebird 2309 firebird    5u   REG    8,4  117440512     0 12591588 /tmp/fb_sort_BcrYQF (deleted)
. . .
COMMAND   PID     USER   FD   TYPE DEVICE   SIZE/OFF NLINK     NODE NAME
firebird 2309 firebird    4u   REG    8,4 1300234240     0 12591046 /tmp/fb_recbuf_2JnwrM (deleted)
firebird 2309 firebird    5u   REG    8,4  117440512     0 12591588 /tmp/fb_sort_BcrYQF (deleted)
COMMAND   PID     USER   FD   TYPE DEVICE   SIZE/OFF NLINK     NODE NAME
firebird 2309 firebird    4u   REG    8,4 1300234240     0 12591046 /tmp/fb_recbuf_2JnwrM (deleted)
firebird 2309 firebird    5u   REG    8,4  125829120     0 12591588 /tmp/fb_sort_BcrYQF (deleted)
size / measuremeasure-1measure-2measure-3size_after109 051 904 117 440 512 125 829 120 size_before100 663 296 109 051 904 117 440 512 size_diff8 388 608 8 388 608 8 388 608
Там случайно "в недрах" ФБ верхний лимит для TempCacheBlock не прописан жестко ?
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38537399
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

этот параметр на "времянки" вообще никак не влияет, это гранулярность аллокации блоков в пределах TempCacheLimit.
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38537400
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал overall-benchmark для разных вариантов настройки TempDirectories, опции монтирования sync и размера TempCacheLimit (1, 2 и 4 Гб).
Гляньте в аттач и почувствуйте разницу (я про sync -vs- async для случая TempCacheLimit = 1Gb ).
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38537403
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrэтот параметр на "времянки" вообще никак не влияет, это гранулярность аллокации блоков в пределах TempCacheLimit.он "сверху" чем-то ограничен ? (кроме ес-сно, самого TempCacheLimit'a)
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38537410
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидон "сверху" чем-то ограничен ? (кроме ес-сно, самого TempCacheLimit'a)
нет
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38537412
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда прошу разъяснений (на правах особо недогоняющего).
Если времянки растут с шагом = 8М (неважно, почему - может, это в линухе "так заведено"), то какой смысл назначать TempCacheBlock > 8 M ? Ведь когда ему понадобится новое место в temp_space, он получит за один присест только 8 м - так или нет ?
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38537418
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

еще раз - TempBlockSize играет рояль только пока все влазит в память ФБ (т.е. не превышен TempCacheLimit). Потом он ни на что уже не влияет.
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38537428
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спс, теперь понятно.
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38538939
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторил замеры для сочетаний:
TempBlockSize = 1 20 50 100 150 200 300 400 600 800 Mb
и
TempCacheLimit = 1024 2047 4096 8192 Mb

Хранение времяной во всех прогонах назначалось на ram-диске (/dev/shm).
И вот что теперь вижу:
1) как только времянки перестают вылазить на предел TempCacheLimit'a, так сразу скорость увеличивается на ~30% (т.е. даже если времянки должны храниться в памяти, превышение TCL ощутимо бьёт по скорости);
2) размер TempBlockSize влияет на скорость только на "малых высотах". Нежелателен размер = 1М - он выглядит явным "изгоем общества" на любом размере TempCacheLimit'a, см аттач.

2 dimitr: около года взад ты присылал патчик, который пишет в firebird.log, насколько оказалася превышен TempCacheLimit в результате того или иного стейтмента. Вывод данной статистики в трейсе и isql было бы полезнейшим нововведением последних лет. Сортировки "не по индексу" - повседневная часть работы. Равно как и заполнение GTT'шек, а в ближайшем будущем - и применение over()-функций.
Все они требуют под себя область, задаваемую TempCacheLimit'ом и выход за её границы, как можно видеть по результатам замеров, очень нежелательно.
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38538950
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

дык 15452254
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38538958
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

как оказалось, важнее всего именно вылезание за 100% отведенной области. Даже если она "смаплена" на ram-disk: там результаты становятся похожими на работу с "обычным" диском.
А будет ли она заполнена на 7% или на 97% - пофиг, это всё одинаково по скорости. Лишняя инфа, КМК, в статистике не нужна.
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38538967
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ. Если "главенствующей" арх-рой в трёшке станет SS, то нынешние дефолтные значения для TempCacheLimit & TempBlockSize стопудово станут анахронизмами в наш космический век бесплатных терабайтов. ИМХО.
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38538972
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

это тоже важно. Тут нужна инфа насколько заполнено временное пространство и сколько этого пространства требует конкретный оператор. При многопользовательском режиме всё может быть несколько иначе поскольку эта память будет делится между всеми сессиями (для суперклассика/супресервера)
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38538989
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениснужна инфа насколько заполнено временное пространство и сколько этого пространства требует конкретный оператор. При многопользовательском режиме всё может быть несколько иначе поскольку эта память будет делится между всеми сессиями (для суперклассика/супресервера)Стейтмент при своем окончании высвобождает область TempCacheLimit'a, которая ему была нужна. Если в приложении много стейтментов, которые выполняются дольше 5...10 сек, то - да, они будут пересекаться и затраты их сложатся.
Но мне интересно, отчего скорость так падает, даже если времянки хранятся на ram-диске. нет
...
Рейтинг: 0 / 0
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
    #38538999
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

дык если память TempCacheLimit настроен плохо, то 5...10 сек запросто
...
Рейтинг: 0 / 0
40 сообщений из 40, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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