|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
При работе моего приложения со временем растет размер базы данных Firebird. Например, за полгода работы размер может вырасти до 600 мегабайт. Проблема в том, что программа начинает тормозить, причем работать может в 10 раз медленнее, чем изначально. При этом если сделать backup&restore - скорость работы программы возвращается к нормальной, размер базы становится в несколько раз меньше (например, был 600 Мб, стал 150 Мб). Но Firebird - насколько я знаю - не поддерживает горячее восстановление баз данных. Особенно если программа настроена на работу не в режиме embedded, а в режиме работы с несколкьих компьютеров с единой базой данных. Вопрос - что делать - можно ли встроить в программу функционал - чтобы пользователи могли сами делать backup&restore (причём делать это нужно с защитой от дурака и кривых рук, сложности могут быть еще в том, что для Firebird характерна проблема невосстановимых бэкапов и т. д.) Если с автоматическим функционалом bvackup&restore сложности - есть ли какая-нибудь команда СУБД Firebird - чтобы не прибегая к backup&restore можно было ускорить работу базы данных, проведя её дефрагментацию и возможно, переиндексацию? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 14:04 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
Наталья87 При этом если сделать backup&restore - скорость работы программы возвращается к нормальной, размер базы становится в несколько раз меньше (например, был 600 Мб, стал 150 Мб). Размер базы не влияет на скорость работы программы. Именно так, чтоб в разы и заметно на глаз. Индексы нужно смотреть. Планы. Искать, где сканы без индексов и либо переделывать запросы, либо доделывать индексы. В общем, нет панацеи. Нужна долгая и вдумчивая работа. Или специалист со стороны. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 14:14 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
wadman Размер базы не влияет на скорость работы программы. Именно так, чтоб в разы и заметно на глаз. Уточню: у грамотно спроектированной базы. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 14:18 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
Наталья87 Вопрос - что делать - можно ли встроить в программу функционал - чтобы пользователи могли сами делать backup&restore (причём делать это нужно с защитой от дурака и кривых рук... Наталья87 Особенно если программа настроена на работу не в режиме embedded, а в режиме работы с несколкьих компьютеров с единой базой данных. На пользователей надёжи - мало. Нанять(назначить) прямые руки, называются DBA. Дать задание написать скрипт, делающий: 1.Регулярные бэкапы и складывающий в их укромное место. 2. Рестор из последнего бэкапа. 3.Запуск по шедулеру в техническое окно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 14:26 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
wadman wadman Размер базы не влияет на скорость работы программы. Именно так, чтоб в разы и заметно на глаз. Уточню: у грамотно спроектированной базы. Так как вызвать backup&restore? Или сборщик мусора sweep? Или дефрагментацию/переиндексацию? Каким-нибудь системным запросом? Это возможно? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 14:27 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
Олег Третьяков Нанять(назначить) прямые руки, называются DBA. Дать задание написать скрипт, делающий: 1.Регулярные бэкапы и складывающий в их укромное место. 2. Рестор из последнего бэкапа. 3.Запуск по шедулеру в техническое окно. Дело в том, что устанавливают программу сами пользователи. А прямых рук у них нет. И возникает вопрос - как обслуживать базу автоматически. Или одной кнопкой из приложения - которую нажал бы пользователь. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 14:28 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
Наталья87 Дело в том, что устанавливают программу сами пользователи. А прямых рук у них нет. Наталья87 А от Firebird мне трудно отказаться будет. У меня такой код, что открывает транзакции, которые долго висят - например, в ожидании диалогов пользователя. Очень удобно. Firebird многоверсионник легко такое переваривает ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 14:32 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
Наталья87Дело в том, что устанавливают программу сами пользователи. А прямых рук у них нет. А им и не нужно. Прямые руки должны быть у разработчика базы и приложения. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 14:35 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
Наталья87 wadman пропущено... Уточню: у грамотно спроектированной базы. Так как вызвать backup&restore? Или сборщик мусора sweep? Или дефрагментацию/переиндексацию? Каким-нибудь системным запросом? Это возможно? Повторюсь: чтобы ускорить базу данных нужно не бекап/рестор делать, а базу грамотно проектировать. Механизм бекапа не для того придуман. ЗЫ. Бекап нужно делать по расписанию в шедулере сервера, а не приложением. Или что, каждый пользователь будет делать бекап только для себя и себе? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 14:44 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
Наталья87 При работе моего приложения со временем растет размер базы данных Firebird. Например, за полгода работы размер может вырасти до 600 мегабайт. Проблема в том, что программа начинает тормозить, причем работать может в 10 раз медленнее, чем изначально. При этом если сделать backup&restore - скорость работы программы возвращается к нормальной, размер базы становится в несколько раз меньше (например, был 600 Мб, стал 150 Мб). Но Firebird - насколько я знаю - не поддерживает горячее восстановление баз данных. Особенно если программа настроена на работу не в режиме embedded, а в режиме работы с несколкьих компьютеров с единой базой данных. Вопрос - что делать - можно ли встроить в программу функционал - чтобы пользователи могли сами делать backup&restore (причём делать это нужно с защитой от дурака и кривых рук, сложности могут быть еще в том, что для Firebird характерна проблема невосстановимых бэкапов и т. д.) Если с автоматическим функционалом bvackup&restore сложности - есть ли какая-нибудь команда СУБД Firebird - чтобы не прибегая к backup&restore можно было ускорить работу базы данных, проведя её дефрагментацию и возможно, переиндексацию? Сталкивались с такими проблемами. Знаем. Решается просто: разделяем транзакции для чтения и записи. Для чтения можно использовать длинную транзакцию, она не повлияет на накопление мусора в БД. Для записи используем короткие транзакции, которые запускаем только на момент записи в БД. Мусор в этом случае не копится. База не тормозит. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 15:07 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
И ещё использовать нужно SSD, иначе, если используется HDD, то тормоза будут связаны с медленным доступом к информации на диске, причем чем дольше база работает, тем больше степень её фрагментированности, тем дольше её страницы читаются из HDD. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 15:09 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
Наталья87, Для начала попробуйте проанализировать результат gstat.exe -a -r Или почитайте здесь : 45 способов улучшить производительность Firebird В некоторых случаях может помочь обновление статистики индексов. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 15:22 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
DmSer И ещё использовать нужно SSD, иначе, если используется HDD, то тормоза будут связаны с медленным доступом к информации на диске, причем чем дольше база работает, тем больше степень её фрагментированности, тем дольше её страницы читаются из HDD. Это всё понятно. Но вопрос в другом. Как при текущих базе данных и программе из приложения на Delphi выполнить оптимизацию базы данных в автоматическом режиме? Backup&Restore то помогает - причём делать достаточно раз в полгода - то есть не всё так плохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 15:22 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
Наталья87Как при текущих базе данных и программе из приложения на Delphi выполнить оптимизацию базы данных в автоматическом режиме? Никак, обломитесь. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 15:29 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
sg729 Наталья87, Для начала попробуйте проанализировать результат gstat.exe -a -r Или почитайте здесь : 45 способов улучшить производительность Firebird В некоторых случаях может помочь обновление статистики индексов. ОК, спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 15:45 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
sg729Или почитайте здесь Ссылку следовало назвать "45 танцев дождя для начинающих шаманов". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 15:54 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
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.11.2021, 16:08 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
Наталья87Не угадали. Да нет, это вы не угадали. 1. Статистика собирается совсем другим запросом и её сбор не требует блокировки таблиц на запись. 2. Sweep не нужен если счётчики транзакций не застряли. Но продолжайте плясать, дождь может скоро начаться. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 16:15 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
Наталья87, В горячем - не в горячем, но если очень хочется, то кое-что можно и прямо из приложения. Взгляните на возможности IBX.IBServices.TIBBackupService\TIBRestoreService. И не забудьте перед использованием закрыть основной коннект приложения.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 16:21 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov 1. Статистика собирается совсем другим запросом и её сбор не требует блокировки таблиц на запись. set statistics index тоже присобачим Dimitry Sibiryakov 2. Sweep не нужен если счётчики транзакций не застряли. Будем на всякий случай делать. При каждом запуске программы (может, даже в отдельном потоке). Хуже ведь не станет? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 16:55 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
Наталья87Хуже ведь не станет? Станет. Особенно "при каждом запуске программы". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 17:02 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
Судя по тому что у вас раздувается размер базы, но после бэкапа-рестора она сильно сдувается - у вас в базе накапливается много мусора. Мусор накапливается из-за некорректной работы программы, точнее программиста этой программы, с транзакциями. Смотрите в статистике базы данных какой разрыв между номерами транзакций OIT и OAT. Если разрыв больше 5000 - уже повод что-то делать, а если разрыв 50 тысяч и больше - то все плохо. Если вы не в состоянии переписать программу что бы более корректно работала с транзакциями - то хотя бы сделайте орг. метод - не допускайте длительной работы программы, особенно несколько дней подряд. Перезапускайте их - застрявшие транзакции будут отпускаться и мусор собранный ими будет вычищаться в процессе работы с базой. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 17:49 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
fraks Если вы не в состоянии переписать программу что бы более корректно работала с транзакциями - то хотя бы сделайте орг. метод - не допускайте длительной работы программы, особенно несколько дней подряд. Перезапускайте их - застрявшие транзакции будут отпускаться и мусор собранный ими будет вычищаться в процессе работы с базой. Или хотя бы утечки памяти не устранять. Тогда пользователи будут вынуждены сами перезапускать программу 2 раза в день. Шутка ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 19:48 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
Наталья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.11.2021, 21:53 |
|
Ускорение работы растущей базы данных Firebird через приложение на Delphi
|
|||
---|---|---|---|
#18+
Наталья87alter index .... inactive alter index .... active для каждого индекса помогло - хоть и меньше чем backup&restore - но ускорение есть alter index inactive не нужно, потому что active и так индекс перестроит. То, что "помогло" - видимо статистика по индексам не пересчитывается. А перестраивать индексы было необязательно. Насчет того, что backup/restore "помогает" - это только кажется. Тем более при вашей микроскопической базе в 600мб это вообще ни о чем. Если у вас при такой базе б/р помогает ускорить что-то, то или у вас база на древнем hdd, или запросы настолько КРИВЫЕ (или нет нужных индексов), что бороться надо (как тут уже сказали) именно за планы запросов. Ну и см. 22397640 . Правда, опять же - база 600мб, и влияние "мусора" - это что-то невообразимое. Но да - транзакциями надо управлять. А в однопользовательских базах проблем с "мусором" не должно быть по определению. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2021, 22:00 |
|
|
start [/forum/topic.php?fid=58&msg=40112852&tid=2036796]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 266ms |
total: | 416ms |
0 / 0 |