Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
Наталья87
Member

Откуда:
Сообщений: 114
При работе моего приложения со временем растет размер базы данных Firebird.

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

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

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

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

Если с автоматическим функционалом bvackup&restore сложности - есть ли какая-нибудь команда СУБД Firebird - чтобы не прибегая к backup&restore можно было ускорить работу базы данных, проведя её дефрагментацию и возможно, переиндексацию?
18 ноя 21, 14:04    [22397489]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
wadman
Member

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

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

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

В общем, нет панацеи. Нужна долгая и вдумчивая работа. Или специалист со стороны.
18 ноя 21, 14:14    [22397497]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 27313
wadman
Размер базы не влияет на скорость работы программы. Именно так, чтоб в разы и заметно на глаз.

Уточню: у грамотно спроектированной базы.
18 ноя 21, 14:18    [22397502]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
Олег Третьяков
Member

Откуда: Москва
Сообщений: 167
Наталья87
Вопрос - что делать - можно ли встроить в программу функционал - чтобы пользователи могли сами делать backup&restore (причём делать это нужно с защитой от дурака и кривых рук...


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

На пользователей надёжи - мало. Нанять(назначить) прямые руки, называются DBA. Дать задание написать скрипт, делающий: 1.Регулярные бэкапы и складывающий в их укромное место. 2. Рестор из последнего бэкапа. 3.Запуск по шедулеру в техническое окно.
18 ноя 21, 14:26    [22397508]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
Наталья87
Member

Откуда:
Сообщений: 114
wadman
wadman
Размер базы не влияет на скорость работы программы. Именно так, чтоб в разы и заметно на глаз.

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


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

Каким-нибудь системным запросом? Это возможно?
18 ноя 21, 14:27    [22397509]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
Наталья87
Member

Откуда:
Сообщений: 114
Олег Третьяков
Нанять(назначить) прямые руки, называются DBA. Дать задание написать скрипт, делающий: 1.Регулярные бэкапы и складывающий в их укромное место. 2. Рестор из последнего бэкапа. 3.Запуск по шедулеру в техническое окно.


Дело в том, что устанавливают программу сами пользователи. А прямых рук у них нет. И возникает вопрос - как обслуживать базу автоматически. Или одной кнопкой из приложения - которую нажал бы пользователь.
18 ноя 21, 14:28    [22397511]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13358
Наталья87
Дело в том, что устанавливают программу сами пользователи. А прямых рук у них нет.
А пишет программу программист. Но если программист пишет
Наталья87
А от Firebird мне трудно отказаться будет. У меня такой код, что открывает транзакции, которые долго висят - например, в ожидании диалогов пользователя. Очень удобно. Firebird многоверсионник легко такое переваривает
и этому программисту многократно говорят так не делать, то кто ему доктор?
18 ноя 21, 14:32    [22397514]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

Наталья87
Дело в том, что устанавливают программу сами пользователи. А прямых рук у них нет.

А им и не нужно. Прямые руки должны быть у разработчика базы и приложения.

Posted via ActualForum NNTP Server 1.5

18 ноя 21, 14:35    [22397516]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 27313
Наталья87
wadman
пропущено...

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


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

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

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

ЗЫ. Бекап нужно делать по расписанию в шедулере сервера, а не приложением. Или что, каждый пользователь будет делать бекап только для себя и себе?
18 ноя 21, 14:44    [22397521]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1457
Наталья87
При работе моего приложения со временем растет размер базы данных Firebird.

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

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

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

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

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


Сталкивались с такими проблемами. Знаем. Решается просто: разделяем транзакции для чтения и записи. Для чтения можно использовать длинную транзакцию, она не повлияет на накопление мусора в БД. Для записи используем короткие транзакции, которые запускаем только на момент записи в БД. Мусор в этом случае не копится. База не тормозит.
18 ноя 21, 15:07    [22397531]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1457
И ещё использовать нужно SSD, иначе, если используется HDD, то тормоза будут связаны с медленным доступом к информации на диске, причем чем дольше база работает, тем больше степень её фрагментированности, тем дольше её страницы читаются из HDD.
18 ноя 21, 15:09    [22397536]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
sg729
Member

Откуда:
Сообщений: 65
Наталья87,
Для начала попробуйте проанализировать результат gstat.exe -a -r
Или почитайте здесь : 45 способов улучшить производительность Firebird
В некоторых случаях может помочь обновление статистики индексов.
18 ноя 21, 15:22    [22397542]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
Наталья87
Member

Откуда:
Сообщений: 114
DmSer
И ещё использовать нужно SSD, иначе, если используется HDD, то тормоза будут связаны с медленным доступом к информации на диске, причем чем дольше база работает, тем больше степень её фрагментированности, тем дольше её страницы читаются из HDD.


Это всё понятно. Но вопрос в другом. Как при текущих базе данных и программе из приложения на Delphi выполнить оптимизацию базы данных в автоматическом режиме? Backup&Restore то помогает - причём делать достаточно раз в полгода - то есть не всё так плохо.
18 ноя 21, 15:22    [22397543]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

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

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

Posted via ActualForum NNTP Server 1.5

18 ноя 21, 15:29    [22397549]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
Наталья87
Member

Откуда:
Сообщений: 114
sg729
Наталья87,
Для начала попробуйте проанализировать результат gstat.exe -a -r
Или почитайте здесь : 45 способов улучшить производительность Firebird
В некоторых случаях может помочь обновление статистики индексов.


ОК, спасибо
18 ноя 21, 15:45    [22397556]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

sg729
Или почитайте здесь

Ссылку следовало назвать "45 танцев дождя для начинающих шаманов".

Posted via ActualForum NNTP Server 1.5

18 ноя 21, 15:54    [22397558]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
Наталья87
Member

Откуда:
Сообщений: 114
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 так не может ...)
18 ноя 21, 16:08    [22397569]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

Наталья87
Не угадали.

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

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

Но продолжайте плясать, дождь может скоро начаться.

Posted via ActualForum NNTP Server 1.5

18 ноя 21, 16:15    [22397571]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
Vlad F
Member

Откуда:
Сообщений: 1451
Наталья87,

В горячем - не в горячем, но если очень хочется, то кое-что можно и прямо из приложения.
Взгляните на возможности IBX.IBServices.TIBBackupService\TIBRestoreService.
И не забудьте перед использованием закрыть основной коннект приложения.))

Сообщение было отредактировано: 18 ноя 21, 16:22
18 ноя 21, 16:21    [22397576]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
Наталья87
Member

Откуда:
Сообщений: 114
Dimitry Sibiryakov

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


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


Dimitry Sibiryakov

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


Будем на всякий случай делать. При каждом запуске программы (может, даже в отдельном потоке). Хуже ведь не станет?
18 ноя 21, 16:55    [22397602]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

Наталья87
Хуже ведь не станет?

Станет. Особенно "при каждом запуске программы".

Posted via ActualForum NNTP Server 1.5

18 ноя 21, 17:02    [22397611]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1836
Судя по тому что у вас раздувается размер базы, но после бэкапа-рестора она сильно сдувается - у вас в базе накапливается много мусора. Мусор накапливается из-за некорректной работы программы, точнее программиста этой программы, с транзакциями.

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

Если вы не в состоянии переписать программу что бы более корректно работала с транзакциями - то хотя бы сделайте орг. метод - не допускайте длительной работы программы, особенно несколько дней подряд. Перезапускайте их - застрявшие транзакции будут отпускаться и мусор собранный ими будет вычищаться в процессе работы с базой.
18 ноя 21, 17:49    [22397640]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
Наталья87
Member

Откуда:
Сообщений: 114
fraks
Если вы не в состоянии переписать программу что бы более корректно работала с транзакциями - то хотя бы сделайте орг. метод - не допускайте длительной работы программы, особенно несколько дней подряд. Перезапускайте их - застрявшие транзакции будут отпускаться и мусор собранный ими будет вычищаться в процессе работы с базой.


Или хотя бы утечки памяти не устранять. Тогда пользователи будут вынуждены сами перезапускать программу 2 раза в день. Шутка Картинка с другого сайта.

Сообщение было отредактировано: 18 ноя 21, 19:48
18 ноя 21, 19:48    [22397684]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 30253
Наталья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, принципиально. Поэтому никакая "дефрагментация" ему не нужна, и "переиндексация" тем более. Зачем "переиндексация" вообще?
18 ноя 21, 21:53    [22397706]     Ответить | Цитировать Сообщить модератору
 Re: Ускорение работы растущей базы данных Firebird через приложение на Delphi  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 30253
Наталья87
alter index .... inactive
alter index .... active

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

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

Ну и см. 22397640. Правда, опять же - база 600мб, и влияние "мусора" - это что-то невообразимое. Но да - транзакциями надо управлять. А в однопользовательских базах проблем с "мусором" не должно быть по определению.
18 ноя 21, 22:00    [22397708]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Delphi Ответить