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

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

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

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

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

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

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

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

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

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


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

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

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


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

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


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

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

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


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

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

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

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

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

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

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

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

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


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


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

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


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

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

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

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

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

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

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


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


Dimitry Sibiryakov

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


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

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

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

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


Или хотя бы утечки памяти не устранять. Тогда пользователи будут вынуждены сами перезапускать программу 2 раза в день. Шутка
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40112979
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья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
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40112980
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87alter index .... inactive
alter index .... active

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

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


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