Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ускорение работы растущей базы данных Firebird через приложение на Delphi / 25 сообщений из 243, страница 1 из 10
18.11.2021, 14:04
    #40112840
Наталья87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
При работе моего приложения со временем растет размер базы данных Firebird.

Например, за полгода работы размер может вырасти до 600 мегабайт.
Проблема в том, что программа начинает тормозить, причем работать может в 10 раз медленнее, чем изначально.

При этом если сделать backup&restore - скорость работы программы возвращается к нормальной, размер базы становится в несколько раз меньше (например, был 600 Мб, стал 150 Мб).

Но Firebird - насколько я знаю - не поддерживает горячее восстановление баз данных. Особенно если программа настроена на работу не в режиме embedded, а в режиме работы с несколкьих компьютеров с единой базой данных.

Вопрос - что делать - можно ли встроить в программу функционал - чтобы пользователи могли сами делать backup&restore (причём делать это нужно с защитой от дурака и кривых рук, сложности могут быть еще в том, что для Firebird характерна проблема невосстановимых бэкапов и т. д.)

Если с автоматическим функционалом bvackup&restore сложности - есть ли какая-нибудь команда СУБД Firebird - чтобы не прибегая к backup&restore можно было ускорить работу базы данных, проведя её дефрагментацию и возможно, переиндексацию?
...
Рейтинг: 0 / 0
18.11.2021, 14:14
    #40112845
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
Наталья87
При этом если сделать backup&restore - скорость работы программы возвращается к нормальной, размер базы становится в несколько раз меньше (например, был 600 Мб, стал 150 Мб).

Размер базы не влияет на скорость работы программы. Именно так, чтоб в разы и заметно на глаз.

Индексы нужно смотреть. Планы. Искать, где сканы без индексов и либо переделывать запросы, либо доделывать индексы.

В общем, нет панацеи. Нужна долгая и вдумчивая работа. Или специалист со стороны.
...
Рейтинг: 0 / 0
18.11.2021, 14:18
    #40112847
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
wadman
Размер базы не влияет на скорость работы программы. Именно так, чтоб в разы и заметно на глаз.

Уточню: у грамотно спроектированной базы.
...
Рейтинг: 0 / 0
18.11.2021, 14:26
    #40112849
Олег Третьяков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
Наталья87
Вопрос - что делать - можно ли встроить в программу функционал - чтобы пользователи могли сами делать backup&restore (причём делать это нужно с защитой от дурака и кривых рук...


Наталья87
Особенно если программа настроена на работу не в режиме embedded, а в режиме работы с несколкьих компьютеров с единой базой данных.

На пользователей надёжи - мало. Нанять(назначить) прямые руки, называются DBA. Дать задание написать скрипт, делающий: 1.Регулярные бэкапы и складывающий в их укромное место. 2. Рестор из последнего бэкапа. 3.Запуск по шедулеру в техническое окно.
...
Рейтинг: 0 / 0
18.11.2021, 14:27
    #40112850
Наталья87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
wadman
wadman
Размер базы не влияет на скорость работы программы. Именно так, чтоб в разы и заметно на глаз.

Уточню: у грамотно спроектированной базы.


Так как вызвать backup&restore?
Или сборщик мусора sweep?
Или дефрагментацию/переиндексацию?

Каким-нибудь системным запросом? Это возможно?
...
Рейтинг: 0 / 0
18.11.2021, 14:28
    #40112852
Наталья87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
Олег Третьяков
Нанять(назначить) прямые руки, называются DBA. Дать задание написать скрипт, делающий: 1.Регулярные бэкапы и складывающий в их укромное место. 2. Рестор из последнего бэкапа. 3.Запуск по шедулеру в техническое окно.


Дело в том, что устанавливают программу сами пользователи. А прямых рук у них нет. И возникает вопрос - как обслуживать базу автоматически. Или одной кнопкой из приложения - которую нажал бы пользователь.
...
Рейтинг: 0 / 0
18.11.2021, 14:32
    #40112854
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
Наталья87
Дело в том, что устанавливают программу сами пользователи. А прямых рук у них нет.
А пишет программу программист. Но если программист пишет
Наталья87
А от Firebird мне трудно отказаться будет. У меня такой код, что открывает транзакции, которые долго висят - например, в ожидании диалогов пользователя. Очень удобно. Firebird многоверсионник легко такое переваривает
и этому программисту многократно говорят так не делать, то кто ему доктор?
...
Рейтинг: 0 / 0
18.11.2021, 14:35
    #40112856
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
Наталья87Дело в том, что устанавливают программу сами пользователи. А прямых рук у них нет.

А им и не нужно. Прямые руки должны быть у разработчика базы и приложения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.11.2021, 14:44
    #40112860
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
Наталья87
wadman
пропущено...

Уточню: у грамотно спроектированной базы.


Так как вызвать backup&restore?
Или сборщик мусора sweep?
Или дефрагментацию/переиндексацию?

Каким-нибудь системным запросом? Это возможно?

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

ЗЫ. Бекап нужно делать по расписанию в шедулере сервера, а не приложением. Или что, каждый пользователь будет делать бекап только для себя и себе?
...
Рейтинг: 0 / 0
18.11.2021, 15:07
    #40112864
DmSer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
Наталья87
При работе моего приложения со временем растет размер базы данных Firebird.

Например, за полгода работы размер может вырасти до 600 мегабайт.
Проблема в том, что программа начинает тормозить, причем работать может в 10 раз медленнее, чем изначально.

При этом если сделать backup&restore - скорость работы программы возвращается к нормальной, размер базы становится в несколько раз меньше (например, был 600 Мб, стал 150 Мб).

Но Firebird - насколько я знаю - не поддерживает горячее восстановление баз данных. Особенно если программа настроена на работу не в режиме embedded, а в режиме работы с несколкьих компьютеров с единой базой данных.

Вопрос - что делать - можно ли встроить в программу функционал - чтобы пользователи могли сами делать backup&restore (причём делать это нужно с защитой от дурака и кривых рук, сложности могут быть еще в том, что для Firebird характерна проблема невосстановимых бэкапов и т. д.)

Если с автоматическим функционалом bvackup&restore сложности - есть ли какая-нибудь команда СУБД Firebird - чтобы не прибегая к backup&restore можно было ускорить работу базы данных, проведя её дефрагментацию и возможно, переиндексацию?


Сталкивались с такими проблемами. Знаем. Решается просто: разделяем транзакции для чтения и записи. Для чтения можно использовать длинную транзакцию, она не повлияет на накопление мусора в БД. Для записи используем короткие транзакции, которые запускаем только на момент записи в БД. Мусор в этом случае не копится. База не тормозит.
...
Рейтинг: 0 / 0
18.11.2021, 15:09
    #40112868
DmSer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
И ещё использовать нужно SSD, иначе, если используется HDD, то тормоза будут связаны с медленным доступом к информации на диске, причем чем дольше база работает, тем больше степень её фрагментированности, тем дольше её страницы читаются из HDD.
...
Рейтинг: 0 / 0
18.11.2021, 15:22
    #40112871
sg729
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
Наталья87,
Для начала попробуйте проанализировать результат gstat.exe -a -r
Или почитайте здесь : 45 способов улучшить производительность Firebird
В некоторых случаях может помочь обновление статистики индексов.
...
Рейтинг: 0 / 0
18.11.2021, 15:22
    #40112872
Наталья87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
DmSer
И ещё использовать нужно SSD, иначе, если используется HDD, то тормоза будут связаны с медленным доступом к информации на диске, причем чем дольше база работает, тем больше степень её фрагментированности, тем дольше её страницы читаются из HDD.


Это всё понятно. Но вопрос в другом. Как при текущих базе данных и программе из приложения на Delphi выполнить оптимизацию базы данных в автоматическом режиме? Backup&Restore то помогает - причём делать достаточно раз в полгода - то есть не всё так плохо.
...
Рейтинг: 0 / 0
18.11.2021, 15:29
    #40112874
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
Наталья87Как при текущих базе данных и программе из приложения на Delphi выполнить
оптимизацию базы данных в автоматическом режиме?

Никак, обломитесь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.11.2021, 15:45
    #40112879
Наталья87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
sg729
Наталья87,
Для начала попробуйте проанализировать результат gstat.exe -a -r
Или почитайте здесь : 45 способов улучшить производительность Firebird
В некоторых случаях может помочь обновление статистики индексов.


ОК, спасибо
...
Рейтинг: 0 / 0
18.11.2021, 15:54
    #40112881
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
sg729Или почитайте здесь

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

Наталья87Как при текущих базе данных и программе из приложения на Delphi выполнить
оптимизацию базы данных в автоматическом режиме?

Никак, обломитесь.


Не угадали.
select RDB$INDEX_NAME s from RDB$INDICES where RDB$INDEX_NAME not like ''RDB$%''

а потом

alter index .... inactive
alter index .... active

для каждого индекса помогло - хоть и меньше чем backup&restore - но ускорение есть

Ну и еще вызов

gfix.exe" -sweep "......." -user SYSDBA -password masterkey

через ShellExecute

Единственное хотелось бы обойтись без вызова gfix.exe ну и базу уменьшать в горячем режиме научиться (насколько знаю, MS SQL Server умеет, а Firebird так не может ...)
...
Рейтинг: 0 / 0
18.11.2021, 16:15
    #40112887
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
Наталья87Не угадали.

Да нет, это вы не угадали.

1. Статистика собирается совсем другим запросом и её сбор не требует блокировки
таблиц на запись.
2. Sweep не нужен если счётчики транзакций не застряли.

Но продолжайте плясать, дождь может скоро начаться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.11.2021, 16:21
    #40112891
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
Наталья87,

В горячем - не в горячем, но если очень хочется, то кое-что можно и прямо из приложения.
Взгляните на возможности IBX.IBServices.TIBBackupService\TIBRestoreService.
И не забудьте перед использованием закрыть основной коннект приложения.))
...
Рейтинг: 0 / 0
18.11.2021, 16:55
    #40112908
Наталья87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
Dimitry Sibiryakov

1. Статистика собирается совсем другим запросом и её сбор не требует блокировки
таблиц на запись.


set statistics index
тоже присобачим


Dimitry Sibiryakov

2. Sweep не нужен если счётчики транзакций не застряли.


Будем на всякий случай делать. При каждом запуске программы (может, даже в отдельном потоке). Хуже ведь не станет?
...
Рейтинг: 0 / 0
18.11.2021, 17:02
    #40112917
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
Наталья87Хуже ведь не станет?

Станет. Особенно "при каждом запуске программы".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.11.2021, 17:49
    #40112936
fraks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
Судя по тому что у вас раздувается размер базы, но после бэкапа-рестора она сильно сдувается - у вас в базе накапливается много мусора. Мусор накапливается из-за некорректной работы программы, точнее программиста этой программы, с транзакциями.

Смотрите в статистике базы данных какой разрыв между номерами транзакций OIT и OAT.
Если разрыв больше 5000 - уже повод что-то делать, а если разрыв 50 тысяч и больше - то все плохо.

Если вы не в состоянии переписать программу что бы более корректно работала с транзакциями - то хотя бы сделайте орг. метод - не допускайте длительной работы программы, особенно несколько дней подряд. Перезапускайте их - застрявшие транзакции будут отпускаться и мусор собранный ими будет вычищаться в процессе работы с базой.
...
Рейтинг: 0 / 0
18.11.2021, 19:48
    #40112972
Наталья87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
fraks
Если вы не в состоянии переписать программу что бы более корректно работала с транзакциями - то хотя бы сделайте орг. метод - не допускайте длительной работы программы, особенно несколько дней подряд. Перезапускайте их - застрявшие транзакции будут отпускаться и мусор собранный ими будет вычищаться в процессе работы с базой.


Или хотя бы утечки памяти не устранять. Тогда пользователи будут вынуждены сами перезапускать программу 2 раза в день. Шутка
...
Рейтинг: 0 / 0
18.11.2021, 21:53
    #40112979
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
Наталья87Например, за полгода работы размер может вырасти до 600 мегабайт.
не смешите меня, пожалуйста. Мы сопровождаем десятки серверов с Firebird где базы по 400-500 ГИГАБАЙТ. Остальные сопровождаемые сотни серверов меньше 400 гиг, и единицы серверов с трерабайтными БД.
Наталья87При этом если сделать backup&restore - скорость работы программы возвращается к нормальной, размер базы становится в несколько раз меньше (например, был 600 Мб, стал 150 Мб).
а потом ФБ и операционная система будут пыжиться, опять расширяя базу до 600мб. Пустое место в базе используется повторно.
Не надо сожалеть о "впустую потраченных мегабайтах", их просто не существует.
Наталья87Но Firebird - насколько я знаю - не поддерживает горячее восстановление баз данных.
встроенная репликация поддерживается для 2.5 и 3.0 в HQbird, и есть в стандартном Firebird 4. Можно сделать standby кластер.
Наталья87Вопрос - что делать - можно ли встроить в программу функционал - чтобы пользователи могли сами делать backup&restore
для однопользовательских приложений - ОДНОЗНАЧНО. Не можно, а нужно. К нам регулярно такие пользователи обращаются за ремонтом БД, починить можно процентов 70 баз, но часть данных теряется всегда, а 30% баз в мусорку отправляются.
Наталья87можно было ускорить работу базы данных, проведя её дефрагментацию и возможно, переиндексацию?
извините, чушь какая-то. База данных это файл с random access, принципиально. Поэтому никакая "дефрагментация" ему не нужна, и "переиндексация" тем более. Зачем "переиндексация" вообще?
...
Рейтинг: 0 / 0
18.11.2021, 22:00
    #40112980
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорение работы растущей базы данных Firebird через приложение на Delphi
Наталья87alter index .... inactive
alter index .... active

для каждого индекса помогло - хоть и меньше чем backup&restore - но ускорение есть
alter index inactive не нужно, потому что active и так индекс перестроит.
То, что "помогло" - видимо статистика по индексам не пересчитывается. А перестраивать индексы было необязательно.
Насчет того, что backup/restore "помогает" - это только кажется. Тем более при вашей микроскопической базе в 600мб это вообще ни о чем. Если у вас при такой базе б/р помогает ускорить что-то, то или у вас база на древнем hdd, или запросы настолько КРИВЫЕ (или нет нужных индексов), что бороться надо (как тут уже сказали) именно за планы запросов.

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


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