powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ускорение работы растущей базы данных Firebird через приложение на Delphi
25 сообщений из 243, страница 4 из 10
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113230
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvp.s. и последнее - fetch All для select count зачем? там 1 запись выводится.

Ты сильный оптимист если думаешь, что она делала запрос с count...

Наталья87
Столько советов, что мозг уже не соображает, за что схватиться.

Естественно. Поэтому обычно обучение происходит постепенно, начиная с азов. Сначала просто счёт с палочками, потом сложение-вычитание, потом таблица умножения и только через четыре года тригонометрия с синусами-косинусами. А Вы решили ворваться в высшую математику, размахивая счётными палочками. Конечно же будет больно.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113253
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
goldmi45Это вы думаете, что не более 1 минуты, а пользователь, открыв диалог, отвлёкся,
потом пошёл на обед. И в итоге транзакция может висеть очень долго.

Приведённые ею статистики такого не показывают.Я не уверен, что приведенная статистика была не от недавно отресторенной базы.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113255
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

там всё какое-то секретное, и я даже вывода gstat -h не видел, только набор маркеров транзакций скопирован оттуда.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113268
pva86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наталья87, это Вы разрабатываете Курс: школа?
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113273
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да - размер страницы у меня, разумеется, 4 Кб.

По информации - да, запрос был без count. Сейчас то же самое с count. На всякий случай перед каждым тестом перезапуск сервера Firebird и свежий запуск IBExpert.


1) Исходная база 2 Гб:

------ Performance info ------
Prepare time = 0ms
Execute time = 40ms
Avg fetch time = 40,00 ms
Current memory = 9 110 532
Max memory = 9 357 108
Memory buffers = 2 048
Reads from disk to cache = 3 950
Writes from cache to disk = 0
Fetches from cache = 284 232


2) После set statistics index + Sweep (база 2 Гб):

------ Performance info ------
Prepare time = 0ms
Execute time = 50ms
Avg fetch time = 50,00 ms
Current memory = 9 106 432
Max memory = 9 352 988
Memory buffers = 2 048
Reads from disk to cache = 3 950
Writes from cache to disk = 0
Fetches from cache = 284 232


3) После Backup&Restore (база 117 Мб):

------ Performance info ------
Prepare time = 0ms
Execute time = 40ms
Avg fetch time = 40,00 ms
Current memory = 9 120 068
Max memory = 9 365 492
Memory buffers = 2 048
Reads from disk to cache = 4 161
Writes from cache to disk = 0
Fetches from cache = 284 654
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113276
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
Да - размер страницы у меня, разумеется, 4 Кб.

По информации - да, запрос был без count. Сейчас то же самое с count. На всякий случай перед каждым тестом перезапуск сервера Firebird и свежий запуск IBExpert.


1) Исходная база 2 Гб:

------ Performance info ------
Prepare time = 0ms
Execute time = 40ms
Avg fetch time = 40,00 ms
Current memory = 9 110 532
Max memory = 9 357 108
Memory buffers = 2 048
Reads from disk to cache = 3 950
Writes from cache to disk = 0
Fetches from cache = 284 232


2) После set statistics index + Sweep (база 2 Гб):

------ Performance info ------
Prepare time = 0ms
Execute time = 50ms
Avg fetch time = 50,00 ms
Current memory = 9 106 432
Max memory = 9 352 988
Memory buffers = 2 048
Reads from disk to cache = 3 950
Writes from cache to disk = 0
Fetches from cache = 284 232


3) После Backup&Restore (база 117 Мб):

------ Performance info ------
Prepare time = 0ms
Execute time = 40ms
Avg fetch time = 40,00 ms
Current memory = 9 120 068
Max memory = 9 365 492
Memory buffers = 2 048
Reads from disk to cache = 4 161
Writes from cache to disk = 0
Fetches from cache = 284 654

Результаты идентичны, в пределах порешности на квант времени, отводимого ос потоку.
Вывод: вы тестируете [уже] не тормозящую базу.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113278
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет - база тормозящая. Кажись, таблица та была не самая большая.
Вообще непонятно как определять самую большую таблицу. То ли по количеству записей. То ли по примерной сумме данных (в байтах).
Вот здесь другая таблица - уже посущественнее задержки.


1) Исходная тормозящая БД
------ Performance info ------
Prepare time = 0ms
Execute time = 4s 436ms
Avg fetch time = 4 436,00 ms
Current memory = 9 191 116
Max memory = 9 357 108
Memory buffers = 2 048
Reads from disk to cache = 9 070
Writes from cache to disk = 8 674
Fetches from cache = 8 352 295


2) После set statistics index + Sweep
------ Performance info ------
Prepare time = 0ms
Execute time = 1s 312ms
Avg fetch time = 1 312,00 ms
Current memory = 9 107 400
Max memory = 9 352 988
Memory buffers = 2 048
Reads from disk to cache = 7 292
Writes from cache to disk = 0
Fetches from cache = 707 354


3) После backup&restore
------ Performance info ------
Prepare time = 0ms
Execute time = 500ms
Avg fetch time = 500,00 ms
Current memory = 9 120 772
Max memory = 9 365 492
Memory buffers = 2 048
Reads from disk to cache = 7 243
Writes from cache to disk = 0
Fetches from cache = 707 257
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113286
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья871) Исходная тормозящая БД
Reads from disk to cache = 9 070
Writes from cache to disk = 8 674
как вы это всё меряете. Ну например, на тормозящей - выполнили запрос, дисконнект, и опять запрос? Во второй раз запрос сколько выполняется?
Вы же видите, что у вас на читающий запрос почти столько же writes сколько и reads. Т.е. вся таблица замусорена, и мусор этим запросом убрался.
Непонятно, на что вы жалуетесь - сначала наплодили версий во всей таблице, а потом "запрос медленно работает".

Статистику по базе (gstat -r ...) смотрели? Версии есть? Или после первого запроса они исчезли? Или еще не исчезли, раз у вас superserver (как я понял), и он просто не успел еще собрать мусор?

Но нет - мы стартанем свип (просто наобум), и не глядя в firebird.log будем считать что станет быстрее. Хотя мусор собрался уже перед свипом.

И почему вы считаете что для базы 2 гиг размер страницы 4к - это нормально? Сделайте 8к, и сразу заметите что стало быстрее.

Короче, я уже устал. :-) Читайте ibase.ru про транзакции, версионность, и т.д.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113315
pva86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,
Если речь таки о Курс: школа, то там полная печаль: бекапы базы делаются путем копирования файла базы перед каждым запуском программы, клиентов десятки тысяч на самых разных конфигурациях ПК. А сама база, в основном, содержит информацию всего лишь о 2-3 тисячах человек
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113374
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pva86бекапы базы делаются путем копирования файла базы перед каждым запуском программы
ну, 1с локальные базы "бэкапит" тоже записью в zip или сжатую папку.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113375
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv1с локальные базы "бэкапит" тоже записью в zip или сжатую папку

Галактика в своё время делала так же. Самое забавное, что из-за какого-то бага в
pkzip архив на определённых данных получался битый и не мог распаковаться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113546
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
энди
Я правильно понимаю что Вы стартуете транзакцию, а потом вываливаете пользователю диалоговое окно и в это время у вас все еще болтается открытая транзакция?


Да. Но это не часами длится. Обычно не более 1 минуты, а при нормальной работе секунд 10-15. Очень удобно - если произошла ошибка или пользователь нажал "Отменить" - просто делаем Rollback и всё.


но это в корне неправильно
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113556
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11но это в корне неправильно

Да нет, при соблюдении определённых условий это нормально. Жаль, что аффтарша
эти условия соблюсти не смогла.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113628
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

kdv1с локальные базы "бэкапит" тоже записью в zip или сжатую папку

Галактика в своё время делала так же. Самое забавное, что из-за какого-то бага в
pkzip архив на определённых данных получался битый и не мог распаковаться.


Не у меня все по феншую. Бэкапы делаются с помощью gbak, не простым копированием файла базы, также проверяется восстановление из бэкапов. Если же бэкапы перестали делаться - пользователю выводится табличка с предупреждением. Обычно если бэкапы перестали делаться означает что база сильно повреждена, что даже бэкапы перестали делаться.

Для новых пользователей и размер страницы будет 8К. А старым 4К останется тут уже ничего не сделаешь ...
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113635
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
А старым 4К останется тут уже ничего не сделаешь ...
При восстановлении из бэкапа это можно легко изменить.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113636
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87

с пустой базой приложение работает очень быстро, а по мере наполнения базы начинает замедляться.

Оценить зависимость времени выполнения запросов от размера базы (числа строк больших таблиц) можете? Если зависимость линейная, значит, где-то индекса не хватает, или он не используется. Вместо логарифмического поиска используется линейный. Почему B/R в таком случае помогает? Меньше страниц серверу просматривать приходится. Как гипотеза.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113709
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
shalamyansky
Наталья87

с пустой базой приложение работает очень быстро, а по мере наполнения базы начинает замедляться.

Оценить зависимость времени выполнения запросов от размера базы (числа строк больших таблиц) можете? Если зависимость линейная, значит, где-то индекса не хватает, или он не используется. Вместо логарифмического поиска используется линейный. Почему B/R в таком случае помогает? Меньше страниц серверу просматривать приходится. Как гипотеза.


От этого и возникают идеи "дефрагментации базы данных". Чтобы упорядочить данные внутри файла. Чтобы они не были раскиданы по всему файлу в хаотичном виде. Я так понимаю, после Backup&Restore именно это и происходит (данные таблиц становятся более упорядоченными внутри файла и идут последовательно). Но в целом рекомендации выше и так уже помогли. Всё стало работать с приемлемой скоростью и без backup&restrore. А у кого это не поможет (таких теперь явно будет меньше после выполнения всех рекомендаций) можно по старинке и backup&restore сделать (и индексов добавить где запросы тормозят).
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113770
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Я так понимаю", а почитать?
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113780
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87. Чтобы упорядочить данные внутри файла. Чтобы они не были раскиданы по всему файлу в хаотичном виде. Я так понимаю, после Backup&Restore именно это и происходит (данные таблиц становятся более упорядоченными внутри файла и идут последовательно).
еще раз - база данных (любая) - это файл произвольного доступа (random access). У операционной системы при чтении файлов есть "предиктивное" чтение. Поэтому, если 2 страницы одной и той же таблицы лежат подряд, то файловый кэш ОС скорее всего при обращении к такой первой странице считает и вторую.
Поэтому, как бы, последовательный перебор записей в таблицах быстрее после restore. Потому что рестор заливает таблицы по очереди.
Однако, последовательность данных в таблицах всегда случайная - т.е. как их записали, или как обновили в зависимости от "дырок" после удалений.
А обычно из БД стараются получить данные в каком-то упорядоченном виде. Который абсолютно точно не соответствует расположению записей в таблицах.
Индексы, которые способствуют выдаче по нужному порядку, строятся "потом". Например, в самом конце restore. И они расположены далеко от таблиц.
Опять возвращаемся к random access. Если на HDD "предиктивное чтение" ОС еще как-то помогало, то на SSD оно абсолютно бесполезно, т.к. чтение случайных страниц одинаково быстро.
И вообще, "дефрагментация" с SSD теряет смысл. Дефрагментация раньше нужна была только для того, чтобы файлы копировались быстрее. А копирование - это последовательное чтение страниц (блоков) файла.
Чего (последовательного чтения) при выборке данных из БД не бывает почти никогда.

p.s. вся эта идея "дефрагментации" она как из прошлого, лет 20-30 назад. Тем более по отношении к БД. И сейчас просто СТЫДНО упоминать такую бредятину. Как минимум, это индикатор того, что вы вообще не понимаете внутреннее устройство баз, дисков, ssd и прочего. А надо бы.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40115196
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87,

Если вам нужно делать backup/restore раз в полгода, ну создайте bat/cmd/sh, который это делает. Записываете вызов в скедалер и наслаждаетесь.

Что мешает делать это программно? У нас так и сделано. Правда идет управление роботом, контроль ведется несколькими программами одновременно. При старте компьютера специальная программа рапуска контролирующих программ проверяет статус запуска серверов, запуска соединения с железом и на минутку задерживается, чтоб сделать бэкап/рестор базы.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117409
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
svd
Наталья87,

Если вам нужно делать backup/restore раз в полгода, ну создайте bat/cmd/sh, который это делает. Записываете вызов в скедалер и наслаждаетесь.

Что мешает делать это программно? У нас так и сделано. Правда идет управление роботом, контроль ведется несколькими программами одновременно. При старте компьютера специальная программа рапуска контролирующих программ проверяет статус запуска серверов, запуска соединения с железом и на минутку задерживается, чтоб сделать бэкап/рестор базы.


Так не сделать - потому что программа имеет множество вариантов как локальной, так и сетевой установки. Никаких админов нет - установка и прочие действия производятся пользователями, а им доверять установку скриптов смерти подобно, саппорт явно от этого не обрадуется. Да и нет в этом необходимости. Пусть я дилетант но в целом выполнив 1/10 рекомендаций полученных здесь я получила результат - что заказчики довольны. Нет больше тормозов, которые мешают работе.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117494
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такс...
Я вот тоже, получается, что делаю что-то не так.
Я же вроде все делаю по правилам, т.е. 2 транзакции, где одна write для удаление, другая read.

Предыстория...
Есть веб-приложение (uniGUI) и несколько процессов запущено и подключено к БД Firebird 3.
Запилил некий монитор пользователей, т.е. кто в онлайне, откуда и т.д.
И т.к. серверных процессов (программ) запущено несколько для балансировки нагрузки, то несколько пользователей подключаются к разным серверным процессам (программам).
Так вот, периодически в базе таблица, где все это живет, чистится от всех записей и потом в нее снова добавляют записи от запущенных процессов, например, каждые несколько секунд или минут. И так по кругу: удаление, потом добавление. В итоге админ видит в этой таблице кто куда подключен и т.д.
Все довольно просто. Но за ночь база выросла с 70ти Мб до 1,5 Гб.

Можно было бы использовать временную таблицу GTT, но она для каждого подключения своя, хоть и называется "глобальной".

И что мне предпринять, чтобы база не росла как на дрожжах? Что я забыл?
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117495
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

Firebird - говно?

Хотя откуда у тебя взялось аж 1.5 Гб - вопрос.

Сколько записей в минуту ты пишешь/удаляешь?


Задумайся о обновлении изменившихся данных вместо того что бы постоянно все с нуля перезаписывать.

Если у тебя рекорды позже могут появляться аналогичные удаленным до этого - сделай логическое удаление. (Поле IsDeleted = 1/0).

Будешь делать только апдейты. От этого база расти не должна.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117503
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
, где одна write для удаление,
Сколько живе эта транзакция? Как ее завершаешь? Больше у базы нет активных write транзакций?
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117505
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Хотя откуда у тебя взялось аж 1.5 Гб - вопрос.


Ну например, раз в секунду добавляются новые записи, а старые удаляются. Точно не знаю, ну пусть будет 3-5 записей в секунду.
...
Рейтинг: 0 / 0
25 сообщений из 243, страница 4 из 10
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ускорение работы растущей базы данных Firebird через приложение на Delphi
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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