powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / баги или не баги
44 сообщений из 44, показаны все 2 страниц
баги или не баги
    #38790073
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В своём воображении вставил я в таблицу T(V INTEGER) 10 млрд. записей (5 млрд. положительных V, и 5 млрд. отрицательных) . Реально вставлять долго, поэтому в воображении.
Вопросы:
1. Есть ли бага FB в том, что
Код: sql
1.
select count(*) from T

не вернёт мне 10 млрд?

2. Есть ли бага FB в том, что после
Код: sql
1.
update T set V = 1 where V > 1

я не смогу узнать кол-во реально обновлённых записей вызовом isc_dsql_sql_info с isc_info_sql_records, как это делается на табличках меньшего размера?

Понятно что в integer 5 млрд не вмещается. Я вот только не пойму есть ли в этом баг. По мне так баг, т.к. я явно получаю ложные результаты функций. А когда я получаю ложные результаты функций, то оцениваю это как баг.
А как вы оцениваете? :)
...
Рейтинг: 0 / 0
баги или не баги
    #38790087
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

Для первого запроса. С чего ты взял?
...
Рейтинг: 0 / 0
баги или не баги
    #38790201
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

твои "баги" отсутствуют в ФБ3, можешь не напрягаться
...
Рейтинг: 0 / 0
баги или не баги
    #38790220
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисДля первого запроса. С чего ты взял?
Сделал запрос select count(*) from T. Тип результата: INTEGER. От количества записей в таблице естественно не зависит.
...
Рейтинг: 0 / 0
баги или не баги
    #38790245
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

хм... никогда не обращал внимание. В FB3 точно BIGINT. В том числе и для ранжирующих функций (в 3 диалекте)
...
Рейтинг: 0 / 0
баги или не баги
    #38790577
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeВ своём воображении вставил я в таблицу T(V INTEGER) 10 млрд. записейА ты пробовал провернуть - без воображения, в реале - 1 (один) млрд ?
...
Рейтинг: 0 / 0
баги или не баги
    #38790711
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидNickDeeВ своём воображении вставил я в таблицу T(V INTEGER) 10 млрд. записейА ты пробовал провернуть - без воображения, в реале - 1 (один) млрд ?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
execute block as
declare variable I integer;
begin
  I = 1;
  while (I <= 100000000) do
  begin
    insert into T(V) values(:I);
    I = I + 1;
  end
end


100000000 записей было добавлено в таблицу T

------ Информация о производительности ------
Время подготовки запроса = 0ms
Время выполнения запроса = 5m 44s 13ms
Current memory = 34 967 472
Max memory = 66 884 652
Memory buffers = 2 048
Reads from disk to cache = 237
Writes from cache to disk = 306 132
Чтений из кэша = 302 446 960

Умножить на 10 и будет миллиард. Только это почти час ждать.
...
Рейтинг: 0 / 0
баги или не баги
    #38790746
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeУмножить на 10 и будет миллиард. Только это почти час ждать.
А теперь чисто по приколу попробуй то же самое проделать с Оракулом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
баги или не баги
    #38790755
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee100000000 записей было добавлено в таблицу T
Время выполнения запроса = 5m 44s 13ms
Memory buffers = 2 048
Reads from disk to cache = 237
Writes from cache to disk = 306 132
Чтений из кэша = 302 446 960Везучий. Или просто таблица без индекса и, само собой, fw = off ;-)
...
Рейтинг: 0 / 0
баги или не баги
    #38790792
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

в чём везучесть? :)
проц 2.3 гигагерца (ноутбучный), винт на 5400 оборотов (ноутбучный), винда с 4 гигами памяти (ноутбучными), индексов нет, FW включен (никогда его не выключал).
Упирается не в скорость винта, а в процессор.
На твоём мега-железе оно разве не быстрей?
...
Рейтинг: 0 / 0
баги или не баги
    #38790808
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА теперь чисто по приколу попробуй то же самое проделать с Оракулом.
Его же ставить нужно :)
...
Рейтинг: 0 / 0
баги или не баги
    #38790835
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeНа твоём мега-железе оно разве не быстрей?Не помню уже. Но я делал таблицу с другой структурой (там, помимо ID, было еще два поля: varchar(36) & bigint).
Основная песня начинается после того, как построишь индексы на такой таблице.
...
Рейтинг: 0 / 0
баги или не баги
    #38790836
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeУмножить на 10 и будет миллиард. Только это почти час ждать.
Можно немного ускорить (~25%), если завернуть в автономки по 1млн записей.
...
Рейтинг: 0 / 0
баги или не баги
    #38790844
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afgmМожно немного ускорить (~25%), если завернуть в автономки по 1млн записей.1. 25% это много
2. не верю
...
Рейтинг: 0 / 0
баги или не баги
    #38790883
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad1. 25% это много
2. не верю
Соврал ~20% :)
speed test
Код: sql
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.
40.
41.
42.
43.
44.
45.
46.
47.
-- Перед каждым запуском делаю
RECREATE TABLE T (
    V  INTEGER
);

execute block as
declare variable I integer;
begin
  I = 1;
  while (I <= 10000000) do
  begin
    insert into T(V) values(:I);
    I = I + 1;
  end
end
-- Execute time = 43s 384ms
-- Execute time = 43s 509ms
-- Execute time = 43s 321ms

execute block as
declare variable I integer;
declare variable c integer;
begin
  c = 1;
  while (c <= 10) do
  begin
      in autonomous transaction do
      begin
          I = 1;
          while (I <= 1000000) do
          begin
            insert into T(V) values(:I);
            I = I + 1;
          end
      end
      c = c + 1;
  end
end
-- Execute time = 34s 211ms
-- Execute time = 35s 397ms
-- Execute time = 34s 960ms

/*
(43.384 + 43.509 + 43.321) / 3 = 43.4046666666667
(34.211 + 35.397 + 34.960) / 3 = 34.856
(43.4046666666667 - 34.856) / 43.4046666666667 * 100  = 19.6952708618122
*/

...
Рейтинг: 0 / 0
баги или не баги
    #38790892
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В текущей версии птицы алгоритм слияния сейфпоинтов несколько неоптимален.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
баги или не баги
    #38790907
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВ текущей версии птицы алгоритм слияния сейфпоинтов несколько неоптимален.

Забыл сказать, что гонял тест на 3.0 FW=ON
...
Рейтинг: 0 / 0
баги или не баги
    #38790958
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afgmЗабыл сказать, что гонял тест на 3.0 FW=ON
Уточняю: во всех существующих версиях Firebird этот алгоритм неоптимален.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
баги или не баги
    #38790960
1 диалект
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dimitr "баги" отсутствуют в ФБ3, можешь не напрягаться
А для первого диалекта? Или bigint теперь есть и там?
...
Рейтинг: 0 / 0
баги или не баги
    #38790963
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 диалектА для первого диалекта? Или bigint теперь есть и там?
есть и там
...
Рейтинг: 0 / 0
баги или не баги
    #38790970
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afgm,

тест делал так: recreate, commit, exec block, commit и далее по кругу

fw=on

1. вставка 1х10М записей
Execute time = 32s 343ms
Execute time = 31s 297ms
Execute time = 30s 625ms

2. вставка 10х1М записей
Execute time = 31s 984ms
Execute time = 33s 47ms
Execute time = 32s 265ms
...
Рейтинг: 0 / 0
баги или не баги
    #38790972
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr1 диалектА для первого диалекта? Или bigint теперь есть и там?
есть и там

но можно только SELECT из него делать. В PSQL использовать не получится.
Создать таблицу с полем BIGINT тоже.
...
Рейтинг: 0 / 0
баги или не баги
    #38790975
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

мало того, что пальцем в небо, так ещё и мимо

Когда (если) подумаешь головой, то поймёшь, что работа анду-лога в этом тесте до лампочки и никак не объяснит мифические 20% выигрыша при вставке пачками.
А если потрудишься глянуть на графики загрузки CPU\IO, то может быть наступит хоть какое-то просветление.
...
Рейтинг: 0 / 0
баги или не баги
    #38790981
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladмало того, что пальцем в небо, так ещё и мимо
Да, пожалуй. Слияние мелочи по одной записи тормозить не может, а лог транзакции убивается
в обоих случаях ещё до начала массового слияния.

Интересно было бы посмотреть на разницу скоростей если перед EB поставить явный savepoint...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
баги или не баги
    #38791002
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladтест делал так: recreate, commit, exec block, commit и далее по кругу
именно так и делал
Поднял память до 2 гигов (было 512) (DefaultDbCachePages = 131072)
Страница 16к
Firebird-3.0.0.31369-0_x64
Windows 7
Как ни кручу не могу заставить выполняться за одинаковое время.
Куда ещё можно копнуть?
...
Рейтинг: 0 / 0
баги или не баги
    #38791014
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afgmКуда ещё можно копнуть?Посмотри на загрузку CPU и IO, сравни.

PS Я мерял при стандартных для супера 2048 страницах кеша. Сама страница у меня 8КБ
...
Рейтинг: 0 / 0
баги или не баги
    #38791040
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladПосмотри на загрузку CPU и IO, сравни.

PS Я мерял при стандартных для супера 2048 страницах кеша. Сама страница у меня 8КБ
Посмотрел загрузку CPU vs IO
В случае большой транзакции сначала занят CPU (почти 25% т.е. 100% одно ядро) и меньше IO, а под конец наоборот.
В случае 10 транзакций нагрузка идёт равномернее.
Попробовал вернуть страницы на 2048 и вот результат:
1. вставка 1х10М записей
Execute time = 25s 69ms
Execute time = 26s 333ms
Execute time = 26s 551ms

2. вставка 10х1М записей
Execute time = 30s 389ms
Execute time = 30s 826ms
Execute time = 32s 293ms

Немного растерян...
...
Рейтинг: 0 / 0
баги или не баги
    #38791067
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afgm,

а теперь померяй в isql, и заодно приведи статистику коммитов
...
Рейтинг: 0 / 0
баги или не баги
    #38791070
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladafgm,

а теперь померяй в isql, и заодно приведи статистику коммитовЕсли не лень, то и с большим кешем тоже. Там будет интереснее.
Ну и наблюдай CPU\IO
...
Рейтинг: 0 / 0
баги или не баги
    #38791158
1 диалект
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисно можно только SELECT из него делать. В PSQL использовать не получится.
Создать таблицу с полем BIGINT тоже.
Так это значит что нет. Не сохранить никуда, и сравнить не с чем. Why?
С Boolean небось так же?
...
Рейтинг: 0 / 0
баги или не баги
    #38791162
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 диалектНе сохранить никуда
double не нравицца?
...
Рейтинг: 0 / 0
баги или не баги
    #38791228
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 диалект,

не с Boolean всё нормально
...
Рейтинг: 0 / 0
баги или не баги
    #38791239
1 диалект
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dimitr1 диалектНе сохранить никуда
double не нравицца?
Выкрутиться, конечно, всегда можно, но непонятка одна: а как bigint противоречит 1-му диалекту, не поддерживается в нём по каким причинам?
Просто БД у нас - легаси-стайл. На 3-й диалект не перевести в разумные сроки (а это значит - практически никогда).
Жить как-бы можно (лисапедов понастроено на многие случаи), но как-то периодически плюшки пытаются пройти мимо по диалектному признаку, забывают отцы про первенца :)
...
Рейтинг: 0 / 0
баги или не баги
    #38791251
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 диалект,

в обозримом будущем первенца вообще не станет. Так что лучше начинать готовиться к неизбежному заранее.
...
Рейтинг: 0 / 0
баги или не баги
    #38791252
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 диалекта как bigint противоречит 1-му диалекту, не поддерживается в нём по каким причинам?
bigint просто нет в 1 диалекте. И вообще, bigint был добавлен только в 1.5.
какой смысл что-то там модифицировать или добавлять для 1 диалекта, если 1 диалект - это совместимость со всеми старыми IB и FB?
IB 4.x, 5.x, 6.x, FB 1.0.
Да и драйверы, которые поддерживают только 1 диалект, bigint не поймут.
...
Рейтинг: 0 / 0
баги или не баги
    #38791273
1 диалект
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dimitrв обозримом будущем первенца вообще не станет. Так что лучше начинать готовиться к неизбежному заранее.
Категорично. Подозреваю, как только это случится - так, видимо, и закроются для нас новые версии FB на неопределённый (читай вечный) срок.
Изменить ядро системы лоскутной (в изощрённом виде) автоматизации - это не просто у БД диалект сменить, а несколько бОльшая задача, причём, вообще за пределами АйТи.
kdvbigint просто нет в 1 диалекте. И вообще, bigint был добавлен только в 1.5.
какой смысл что-то там модифицировать или добавлять для 1 диалекта, если 1 диалект - это совместимость со всеми старыми IB и FB?
IB 4.x, 5.x, 6.x, FB 1.0.
Да и драйверы, которые поддерживают только 1 диалект, bigint не поймут.
Всё так. Просто я думал что это не полностью отдельная ветка в коде, а лишь несколько case и только там где это необходимо (для несовместимых типов и т.п.).
А совместимость с дровами, которые ничего кроме первого диалекта (образца царя гороха) не понимают - это вообще боюсь никому не нужно, они и FB скорее всего не понимают вообще, им IB подавай.
Кстати, с прошедшим юбилеем.
...
Рейтинг: 0 / 0
баги или не баги
    #38791555
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

Вот попробовал
Сервер стартовал в режиме приложения и прогонял оба теста. По несколько прогонов делать не стал (там уже автоматизация просится)
замеры через isql1 х 10млн10 х 1млнquerycommittotalquerycommittotaldelta (1x - 10x) E. timeWritesE. timeWritesE. timeWritesE. timeWritesE. timeWritesE. timeWritesE. timeWrites204824,979286640,57203025,5493069428,511307830,002204828,51332831-2,964-2137409625,651266641,1400926,7513067330,69307670,002409630,69234863-3,941-4190819227,597225422,617812530,2143066730,896307660,001230,89730768-0,683-1011638430,093143634,7281629234,8213065531,482307600,002231,484307623,337-1073276821,917719,1753059531,0923066630,995307600,001230,996307620,096-96

Результат как в Эксперте не повторился :(

А вот с CPU/IO всё действительно интересно. При этом для 10х-версии предсказуемая пила, а для большой транзакции результат каждый раз разный.
...
Рейтинг: 0 / 0
баги или не баги
    #38791586
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afgm,

а если изменить приоритет на службы?
...
Рейтинг: 0 / 0
баги или не баги
    #38791681
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afgm,

несколько подсказок:

- тест 1x10М делает коммит 1 раз, соотв. 1 раз пишет грязный кеш на диск, а вот тест 10х1М делает 10 коммитов

- во время коммита запись на диск происходит быстрее, чем во время выполнения запроса, отсюда пила во втором случае

- чем больше кеш, тем позже начнётся запись на диск и тем больше работы останется коммиту

- отдельно про "эффект IBE" : при расширении таблицы новые страницы PIP помечаются таким образом, что к их записи на диск приведёт коммит любой тр-ции (не обязательно нашей).
Из-за careful writes перед записью PIP нужно сначала записать все соотв. DP. Таким образом коммит любой тр-ии приведёт к записи всего кеша.
Нужно ли говорить, что после выполнения запроса IBE стартует и завершает несколько своих тр-ций, которые и пишут весь грязный кеш (а нам кажется, что это сделал наш запрос,
хотя в статистике этого и не видно)

Главное - я уверен, что в тесте 1х10М ты не увидел падения загрузки ни у CPU, ни у IO - а это означает, что скорость заливки не зависит от кол-ва записей заливаемых в одной тр-ции.
Это многократно подтверждается наблюдением за работой рестора, например.

Есть другие факторы, связанные с размером кеша и частотой коммитов, но заливка сама-по-себе никак не зависит от кол-ва записей (по крайней мере это не измеримо на практике).
...
Рейтинг: 0 / 0
баги или не баги
    #38791723
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениса если изменить приоритет на службы?
Попозже обязательно попробую.
...
Рейтинг: 0 / 0
баги или не баги
    #38791756
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladIBE стартует и завершает несколько своих тр-ций, которые и пишут весь грязный кеш (а нам кажется, что это сделал наш запрос,
хотя в статистике этого и не видно)
В реальной жизни при многих коннектах будет именно так.
hvladГлавное - я уверен, что в тесте 1х10М ты не увидел падения загрузки ни у CPU, ни у IO - а это означает, что скорость заливки не зависит от кол-ва записей заливаемых в одной тр-ции.
Увидел вот что:
картинкиКрасное - диск
Синее - первое ядро, к которому прибит FB
Зелёное - весь CPU

1x10 2048:

1x10 16384 :
...
Рейтинг: 0 / 0
баги или не баги
    #38792594
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afgmПоднял память до 2 гигов (было 512)
Как там у Классика?
- Он над нами издевался... (ну и далее по тексту.) :-)
afgmУвидел вот что:
А ты чо хотел-то?
Если мозгов нет... будет винт.
...
Рейтинг: 0 / 0
баги или не баги
    #38792622
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Di_LIneА ты чо хотел-то?
Если мозгов нет... будет винт.
Ну у меня то всё просто. Данная конкретная БД работает не на выделенном сервере (она служебная), но в неё идёт заливка иногда. И большой перебор. Увеличивая размер кеша я пытался обезопасить СУБД от вытеснения файлового кеша операционной системы другими файловыми операциями. На толстых запросах всё хорошо, а вот на массовых заливках большой кеш мешает. Или я ничего не понял.
Надо будет уменьшить до стандартных 2048 и погонять тесты заливки, апдейтов и селектов.
...
Рейтинг: 0 / 0
баги или не баги
    #38792794
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afgm Увеличивая размер кеша я пытался обезопасить СУБД от вытеснения файлового кеша операционной системы другими файловыми операциями.
Да у тебя ОСь на свопе сидит...
...
Рейтинг: 0 / 0
44 сообщений из 44, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / баги или не баги
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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