powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ускорение работы растущей базы данных Firebird через приложение на Delphi
243 сообщений из 243, показаны все 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
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40112981
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87Так как вызвать backup&restore?
Или сборщик мусора sweep?
Или дефрагментацию/переиндексацию?
вы на IBX, и про services api ничего не слышали? Фантастика.
http://www.ibase.ru/ibx#servapi

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

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

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


На примере висячей базы данных размером в 2 Гб:

Oldest transaction 9600032
Oldest active 9607730
Oldest snapshot 9607730
Next transaction 9607732

Разница 7 с половиной тысяч. После выполнения Sweep (с помощью вызова gfix) и выполнения set inactive index, set active index, set statistics index для всех индексов действительно база стала работать существенно быстрее и разница стала в пределах пары сотен. Даже без прибегания к средству в виде backup&restore. Размер 2 Гб как был, так и остался, но работать стало быстрее (ну и пусть будет 2 Гб в таком случае как я понимаю уменьшить всё равно без backup&restore не выйдет). Все-таки получится значит пользователя сделать счастливым с быстрой базой нажатием одной кнопки в программе.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40112983
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv

а потом ФБ и операционная система будут пыжиться, опять расширяя базу до 600мб. Пустое место в базе используется повторно.
Не надо сожалеть о "впустую потраченных мегабайтах", их просто не существует.

извините, чушь какая-то. База данных это файл с random access, принципиально. Поэтому никакая "дефрагментация" ему не нужна, и "переиндексация" тем более. Зачем "переиндексация" вообще?


Но тогда почему backup&restore помогает существенно ускорить работу с базой данных? И даже переиндексация помогает ...
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40112984
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87разница стала в пределах пары сотен
вас должна интересовать разница между Next transaction и Oldest Active. А она свипом не "убирается". И у вас ее (разницы Next-OAT) практически нет.
С другой стороны, если вы массово обновили данные, а потом запустили отчет - да, отчет будет "собирать" мусор, но это не значит, что свип надо запускать перед каждым отчетом.
Наталья87 уменьшить всё равно
да забудьте вы про "уменьшение базы", пожалуйста. Вы не представляете себе как организована БД внутри, и беспокоитесь об ее уменьшении...

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

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


Ну разумеется, у пользователей не самые новые компы. Pentium 4 с 1-2 Гб оперативы это нормально и HDD не самые новые. И 2 Гб база для них тяжело. Индексы нужные есть - даже местами чересчур.

Backup&Restore помогает в большинстве случаев. Если не помогает - рекомендация пользователю одна - выгрузить то, что нужно из старой базы, загрузить в чистую, свежую и снова быстро работать несколько месяцев с базой в пределах 100 Мб. Вопрос возник по той причине, что юзеры не хотят платить за backup&restore считают, что замедление работы специально встроено в программу, чтобы брать деньги за ускорение (а на самом деле специального замедления нет - это просто кривой код). Поэтому чтобы таких вопросов небыло встроим sweep и переиндексацию в приложение.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40112987
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87существенно ускорить работу с базой данных
существенно - это как? Например, дайте select count по вашей самой большой таблице в 600мб или 2 гиг базах, и приведите сюда сколько запрос выполняется, и сколько page reads.
Наталья87Pentium 4 с 1-2 Гб оперативы это нормально
где нормально - на таком компе нынче даже в браузере тяжело работать, тупо медленно.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40112989
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv

существенно - это как? Например, дайте select count по вашей самой большой таблице в 600мб или 2 гиг базах, и приведите сюда сколько запрос выполняется, и сколько page reads.


Видимо, после backup&restore ускорение произошло не благодаря уменьшению размера базы, а по другим причинам.

Идеи уменьшения размера базы (и мысли о том, что всё зависит от размера базы данных) пошли от того, что изначально, с пустой базой приложение работает очень быстро, а по мере наполнения базы начинает замедляться.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40112995
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87Pentium 4 с 1-2 Гб оперативы это нормально и HDD не самые новые. И 2 Гб база для
них тяжело.

База размером меньше ОЗУ "тяжело"? Вот так и рождается мифический "хайлоад"...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40112996
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Наталья87Pentium 4 с 1-2 Гб оперативы это нормально и HDD не самые новые. И 2 Гб база для
них тяжело.

База размером меньше ОЗУ "тяжело"? Вот так и рождается мифический "хайлоад"...


А зачем сравнивать размер базы с размером ОЗУ? Выше же ответили, что размер базы не влияет ...
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113000
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
Как при текущих базе данных и программе из приложения на Delphi выполнить оптимизацию базы данных в автоматическом режиме?
Уже и в этой теме несколько раз повторили.
Не держать длинные пишущие транзакции.
И всё, это решит все твои проблемы (описанные в этой теме)
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113001
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
select RDB$INDEX_NAME s from RDB$INDICES where RDB$INDEX_NAME not like ''RDB$%''

а потом

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

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

Наталья87
Ну и еще вызов

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

через ShellExecute

Это не поможет, если в это время висят старые пишущие транзакции.
Хоть через ShellExecute запускай, хоть через ShellExecuteEx.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113004
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87а по мере наполнения базы начинает замедляться.
дык. например, сумма по продажам. Сегодня их 100, завтра 200, к концу года 36500. Через 3 года - в 3-4 раза больше.
Если каждый раз считать сумму по этим одним и тем же данным, то к гадалке не ходи - будет медленнее и медленнее.
Поэтому... что? надо менять схему подсчета по сырым данным - добавлять хранимые агрегаты, и прочее.
Например, зачем делается в бухгалтерском ПО "закрытие месяца"? Как минимум, чтобы не считать всю эту фигню каждый раз.

Насчет памяти - база не обязана "влезать в ОЗУ", конечно. Но если у вас запросы с сортировками, то на 2гиг RAM они могут "вышибать" (кэшем ОС) память приложений (и ФБ), в результате чего начинается свопирование и прочие тормоза. И их причина - не в FB, а банально в том, что 2 гиг памяти уже давно даже не минимум, а я не знаю что.
Продумайте минимальные требования к железу для вашего ПО. Если клиент такой нищий, что не может докупить 2-6 гиг памяти, то зачем он вам нужен? Более того, подавляющее количество контор скорее заплатит за апгрейд железа, чем за какой-то софт (и тем более его поддержку).
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113011
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего при таком объеме оперативы при росте базы тупо перестаёт хватать памяти на дисковое кеширование винды (+еще внутренние кеши FB) и запросы просаживаются из-за возросших дисковых операций и своппинга оперативы
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113012
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не рассматривать вопроса раздутия базы каким-то мусором, можно посмотреть на план "тормозящих" запросов.
Т.е. выполнить тормозящий запрос из IBExpert и посмотреть насколько у него кривой план.
И возможно поможет прикручивание хинтов типа +0" или ||''

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

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

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

Потому что индексы. Планы нужно смотреть.
Если база после б/р уменьшается в 4 раза - значит, много мусора.
Кроме того, если индексы создаются перед наполнением таблиц - статистика у них будет нулевой, и планы будут почти рандомные.
Надо статистику у индексов через какой-то промежуток работы обновлять.

Если я удалю половину базы, то она уменьшится?

Я не телепат и не знаю, что там за база и какая/как с ней идёт работа. Поэтому про мусор выводы неоднозначные. А то, что после б/р начинает летать и снова тормозит, когда база распухнет для меня однозначно говорит, что там планы страшные.

Но ТС нам ничего не покажет.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113028
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock
Наталья87
select RDB$INDEX_NAME s from RDB$INDICES where RDB$INDEX_NAME not like ''RDB$%''

а потом

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

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

Наталья87
Ну и еще вызов

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

через ShellExecute

Это не поможет, если в это время висят старые пишущие транзакции.
Хоть через ShellExecute запускай, хоть через ShellExecuteEx.


Ну программа перезапускается раз в сутки. Комп выключается на ночь. Откуда там висящим транзакциям быть? В моем случае помогло, всё быстрее стало работать. От идей уменьшения файла базы отказалась.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113032
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
Если я удалю половину базы, то она уменьшится?
А при чём тут удаление? Б/р ничего не удаляет, кроме мусора.

wadman
А то, что после б/р начинает летать и снова тормозит, когда база распухнет для меня однозначно говорит, что там планы страшные.
Да нет, кол-во "рабочих" записей-то не меняется до удаления мусора и после, а летать начинает, с теми же планами.
Просто мусора много, и он не чистится из-за висячих транзакций.

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

пропущено...

Это не поможет, если в это время висят старые пишущие транзакции.
Хоть через ShellExecute запускай, хоть через ShellExecuteEx.


Ну программа перезапускается раз в сутки. Комп выключается на ночь. Откуда там висящим транзакциям быть? В моем случае помогло, всё быстрее стало работать. От идей уменьшения файла базы отказалась.
А, ну если клиенты все отваливаются на ночь, то повесь в планировщик на сервере запуск sweep на час ночи, да и всё.
sweep interval можно отключить тогда (через gfix установить 0), если вручную запускать будешь.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113039
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock
А, ну если клиенты все отваливаются на ночь, то повесь в планировщик на сервере запуск sweep на час ночи, да и всё.


Повесить в планировщик будут сложности, тк юзеры сами устанавливают софт. И для них это будет нестандартной задачей, на которую они будут забивать. В час ночи всё отключено (и сервер тоже) и скрипт в планировщике не запустится.

Потому и хочу сделать - если программа запускается НА СЕРВЕРЕ (где база, сервер - это обычный компьютер, где тоже используется программа) - при запуске программы пусть выполняется этот самый sweep через gfix.exe. Надеюсь, ничего плохого не случится если случайно окажется, что к базе подсоединены в этот момент клиенты (просто очистка должным образом не выполнится).
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113041
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87

Потому и хочу сделать - если программа запускается НА СЕРВЕРЕ (где база, сервер - это обычный компьютер, где тоже используется программа) - при запуске программы пусть выполняется этот самый sweep через gfix.exe. Надеюсь, ничего плохого не случится если случайно окажется, что к базе подсоединены в этот момент клиенты (просто очистка должным образом не выполнится).

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

Потому и хочу сделать - если программа запускается НА СЕРВЕРЕ (где база, сервер - это обычный компьютер, где тоже используется программа) - при запуске программы пусть выполняется этот самый sweep через gfix.exe. Надеюсь, ничего плохого не случится если случайно окажется, что к базе подсоединены в этот момент клиенты (просто очистка должным образом не выполнится).

Это плохая идея.


А к чему плохому это может привести?

Ну не буду тогда это делать. Тем более похоже на то, что sweep не очень то и нужен раз все компы и так выключаются раз в сутки.

Но set statistics index при каждом 10-м запуске программы (чтобы не нервировать пользователей - при каждом запуске не стоит, наверное это делать) ведь не повредит?

P. S. При каждом десятом запуске - чтобы не заморачиваться и определить десятый ли запуск думаю сделать что-то типа if random(10)=9 then ...
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113055
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87,

Тут проблема в том, что если
- в однопользовательском варианте вы можете и свип запускать из приложения (не через гфикс), и бэкап делать тоже (не через гбак).
- в многопользовательском приложении запускать гбак или гфикс, или пересчитывать статистику через какие-то интервалы - значит у вас в КАЖДОМ приложении такое возможно, а значит вы будете "долбить" сервер этими задачами, причем только в момент работы пользователей. В многопользовательском случае по любому нужен админ, и настройка бэкапов и свипов именно на сервере.

p.s. так что там с 22397719
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113062
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Сталкивались с такими проблемами. Знаем. Решается просто: разделяем транзакции для чтения и записи. Для чтения можно использовать длинную транзакцию, она не повлияет на накопление мусора в БД. Для записи используем короткие транзакции, которые запускаем только на момент записи в БД. Мусор в этом случае не копится. База не тормозит.


Зачем дальнейшая дискуссия и танцы з бубном после этого сообщения?

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

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

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

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

Наталья87
Но set statistics index при каждом 10-м запуске программы (чтобы не нервировать пользователей - при каждом запуске не стоит, наверное это делать) ведь не повредит?

Повредит по тем же причинам - бесполезные тормоза.
Статистику чаще всего достаточно считать один раз - после наполнения базы данными.
Либо вообще 0 раз, если создавать индексы после наполнения базы данными (как делает restore, например).
У вас, видимо, ни разу не считалась на той базе, на которой помогло ускорить.
Да, бывают случаи, когда полезно статистику обновить раз в месяц или около того. Накопление данных может изменить статистику и планы. Но это не ваш случай.
Ну и делать это нужно на сервере, опять же, ночью, ведь это тормозит, а у вас этого нет.

Хотите, раз для вас это допустимо (базы у вас, я так понял, крохотные), делайте backup-restore еженедельно, да и всё. Отмечайте в реестре дату последнего успешного, и проверяйте, чтоб это был 7-й день с тех пор.
Запускайте только на компьютере, где база.
Предварительно остановив службу Firebird и переименовав файл базы.
Ну, что ж. Зато не надо swwep запускать и set stat :))
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113074
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11пишущая транзакция - для записи данных и она - максимально короткая.
а потом приходит какой-нибудь чел, лезет ИБЭкспертом в промышленную базу с 500 одновременных пользователей, выполняет там какой-нибудь запрос и бросает ИБЭксперт на пару суток.
И через сутки-двое начинаются вопли "у нас всё тормозит". Если в конторе есть кто-то умный, который знает про mon$ - смотрит и находит негодяя по IP, ИБэксперт отрубают, и дают тому канделябром по башке.
Иногда после этого пишут скрипт, который раз в 1-2 часа отрубает все коннекты, где имя процесса - ibexpert.exe.
Как-то так.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113076
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv
Наталья87,

Тут проблема в том, что если
- в однопользовательском варианте вы можете и свип запускать из приложения (не через гфикс), и бэкап делать тоже (не через гбак).
- в многопользовательском приложении запускать гбак или гфикс, или пересчитывать статистику через какие-то интервалы - значит у вас в КАЖДОМ приложении такое возможно, а значит вы будете "долбить" сервер этими задачами, причем только в момент работы пользователей. В многопользовательском случае по любому нужен админ, и настройка бэкапов и свипов именно на сервере.

p.s. так что там с 22397719


Ну у нас "сервер" только в кавычках. Не какая-то там высоконагруженная система, а программка на 1-3 компьютера. Ну максимум 8. Там где больше 3 компьютеров по любому есть какой нибудь админ и наверное автоматические свипы не нужны ...
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113101
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понимаю что Вы стартуете транзакцию, а потом вываливаете пользователю диалоговое окно и в это время у вас все еще болтается открытая транзакция?
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113104
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRocksweep interval можно отключить тогда (через gfix установить 0)

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


Да. Но это не часами длится. Обычно не более 1 минуты, а при нормальной работе секунд 10-15. Очень удобно - если произошла ошибка или пользователь нажал "Отменить" - просто делаем Rollback и всё.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113107
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

YuRocksweep interval можно отключить тогда (через gfix установить 0)

Не надо обезьянам давать ЭТУ гранату. Уже были прецеденты - угробит базу.


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

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


Зачем дальнейшая дискуссия и танцы з бубном после этого сообщения?

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

У вас накаливается много-много мусора, вероятно из-за того, что вы используете пишущие транзакции для чтения и потом их не подтверждаете, не откатываете.


Даже не знаю, какие транзакции Delphi использует при работе с TIBTransaction, TIBQuery. Судя по всему - по умолчанию транзакции вида Snapshot. Вполне возможно, что пишущие используются для чтения. Вот только я после чтения их всё равно освобождаю (Free) - надеюсь, это решает проблему. Free делать приходится - так как иначе утечки памяти очень быстро копятся и потребляют все ресурсы компьютера.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113111
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Наталья87А как базу можно этим угробить? Разве что тормозить база начнёт.

систему мигрируют на другую СУБД.


Это нереально. Тем более с вашим подходом "переводите по одной форме с IBX на FireDAC как раз до конца жизни за год и успеете. Перевести 400 тысяч строк кода - тем более что там куча быдлокода и говнокода на другую СУБД невозможно, либо оно того не стоит.

Скорее пользователи в этом случае сделают backup&restrore, поставят помощнее комп или в самом крайнем случае начнут с чистой базы данных.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113113
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87Это нереально.

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

Наталья87Это нереально.

Целый фейсбук переводили на другую СУБД несколько раз. Думаете, у них меньше
говнокода, чем у вас?..


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


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

Не делайте так никогда. Это вы думаете, что не более 1 минуты, а пользователь, открыв диалог, отвлёкся, потом пошёл на обед. И в итоге транзакция может висеть очень долго.
Пишущая транзакция должна быть по времени максимально короткой. Стартовать в момент, когда пользователь нажал "Сохранить".
Дайте угадать, вы используете DBWare-компонеты, типа TDBEdit и поэтому не можете отказаться от старта транзакции перед изменением данных?
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113127
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldmi45Это вы думаете, что не более 1 минуты, а пользователь, открыв диалог, отвлёкся,
потом пошёл на обед. И в итоге транзакция может висеть очень долго.

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

goldmi45Это вы думаете, что не более 1 минуты, а пользователь, открыв диалог, отвлёкся,
потом пошёл на обед. И в итоге транзакция может висеть очень долго.

Приведённые ею статистики такого не показывают.

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

Если запустился автосвип (который часто путают со сборщиком мусора), то это
должно быть отражено в firebird.log. И "колом встало" при его работе это не про
приложение на полтора пользователя, там нужна гораздо более интенсивная нагрузка.

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

да всё это теоретизирование. Я вот пока не вижу результата select count по самой большой таблице с execute time и page reads.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113161
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ТС уже раз пять прямо сказала, что НЕ БУДЕТ переделывать "как правильно", а они все равно скачут перед ней, как самцы павианов перед самкой, "короткие трпнзакции", "сборка мусора"...
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113186
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ
ТС уже раз пять прямо сказала, что НЕ БУДЕТ переделывать "как правильно", а они все равно скачут перед ней, как самцы павианов перед самкой, "короткие трпнзакции", "сборка мусора"...


Почему же нет? Буду переделывать. Только переделки времени требуют. Особенно если речь про 400 000 строк кода.
И требование писать новый код никто не отменял :(
И понять, как не открывать пишущие транзакции для чтения в Delphi тоже.
Плохо тут то, что данные ошибки не проявляют себя сразу, а потом привыкаешь так писать.

Столько советов, что мозг уже не соображает, за что схватиться. Извините, если туплю :(

Хотя вопрос по сути уже решён, совет с "set statistics index" помог. Да 2 гигабайтной базе много и нее надо наверное ...



kdv
goldmi45,

да всё это теоретизирование. Я вот пока не вижу результата select count по самой большой таблице с execute time и page reads.


IBExpert (Execute and Fetch All) показывает так (cтоит сказать, что у меня Intel Core i7 и SSD, а у пользователей Pentium 4 и HDD потому сложно понять их проблемы с тормозами ...):

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

------ Performance info ------
Prepare time = 0ms
Execute time = 1s 452ms
Avg fetch time = 0,01 ms
Current memory = 13 053 936
Max memory = 48 897 120
Memory buffers = 2 048
Reads from disk to cache = 3 949
Writes from cache to disk = 4
Fetches from cache = 316 413

После set statistics index Sweep (размер базы остался 2 Гб):

------ Performance info ------
Prepare time = 10ms
Execute time = 1s 472ms
Avg fetch time = 0,01 ms
Current memory = 12 719 024
Max memory = 71 616 052
Memory buffers = 2 048
Reads from disk to cache = 3 950
Writes from cache to disk = 0
Fetches from cache = 316 393

После Backup&Restore (размер бэкапа 47 Мб) база стала вместо 2 Гб - 117 Мб :

И запрос:

------ Performance info ------
Prepare time = 10ms
Execute time = 1s 412ms
Avg fetch time = 0,01 ms
Current memory = 9 146 440
Max memory = 9 365 804
Memory buffers = 2 048
Reads from disk to cache = 4 162
Writes from cache to disk = 4
Fetches from cache = 284 673
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113192
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87

И понять, как не открывать пишущие транзакции для чтения в Delphi тоже.

Двойной клик мышью по объекту TIBTransaction открывает некий диалог, где все это, решив разобраться, можно настроить.
Т.е. в самом минимальном варианте нужны будут два объекта: TIBTransactionReadOnly и TIBTransactionReadWrite.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113197
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87Хотя вопрос по сути уже решён, совет с "set statistics index" помог.

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


kdv
...Я вот пока не вижу результата select count по самой большой таблице с execute time и page reads.


IBExpert (Execute and Fetch All) показывает так (cтоит сказать, что у меня Intel Core i7 и SSD, а у пользователей Pentium 4 и HDD потому сложно понять их проблемы с тормозами ...):

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

------ Performance info ------
Prepare time = 0ms
Execute time = 1s 452ms
Avg fetch time = 0,01 ms
Current memory = 13 053 936
Max memory = 48 897 120
Memory buffers = 2 048
Reads from disk to cache = 3 949
Writes from cache to disk = 4
Fetches from cache = 316 413

После set statistics index Sweep (размер базы остался 2 Гб):

------ Performance info ------
Prepare time = 10ms
Execute time = 1s 472ms
Avg fetch time = 0,01 ms
Current memory = 12 719 024
Max memory = 71 616 052
Memory buffers = 2 048
Reads from disk to cache = 3 950
Writes from cache to disk = 0
Fetches from cache = 316 393

После Backup&Restore (размер бэкапа 47 Мб) база стала вместо 2 Гб - 117 Мб :

И запрос:

------ Performance info ------
Prepare time = 10ms
Execute time = 1s 412ms
Avg fetch time = 0,01 ms
Current memory = 9 146 440
Max memory = 9 365 804
Memory buffers = 2 048
Reads from disk to cache = 4 162
Writes from cache to disk = 4
Fetches from cache = 284 673

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

ок, спасибо. Хотя размер страницы из (gstat -h) тоже бы не помешал. Ну да ладно.
Допустим, размер страницы 8к. Хотя, если соотнести с уровнем знаний, то должен быть 4к.
Итого. 4162 страниц размером (допустим) 8к прочитано за 1.4 сек. Это получается 23мб/в секунду.
Для 4к страниц это 11.6мб в секунду.

То есть, база на каком-то ноутбучном диске HDD примерно 10летней давности, не меньше.
Наталья87После set statistics index Sweep (размер базы остался 2 Гб):
ну почему вы считаете что после каких-то операций размер базы должен уменьшиться?
Размер базы НИКОГДА не уменьшается, ни при каких операциях - удаление, свип, реиндексация, и т.д.
Уменьшение файла БД вообще никакой СУБД никогда не делается.
А рестор - это создание новой БД и заполнение ее данными из бэкапа. Весь файл БД строится заново.

Кроме того - ну уменьшилась у вас база в 20 раз. И что? Как было время выполнения запроса 1.4 секунды, так и осталось. Потому что читалось одно и то же (примерно) количество страницы. Результат page reads 4162 относительно 3950 предыдущих, видимо, из-за заполнения кэша (там плюс-минус 2048 страниц кэша).
Fetches меньше? Ну, м.б. чуть поплотнее данные на страницах стали. и всё.
Наталья87cтоит сказать, что у меня Intel Core i7 и SSD
не верю. по цифрам никакого ssd у вас нет.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40113229
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87,

Для примера. База 26 гиг, tpcc. размер страницы 16к. amd 3700x.
select count(*) from order_line
(если что - результат = 90млн записей)
Execute time = 46s 687ms
Memory buffers = 2 048
Reads from disk to cache = 532 637
Firebird 3 (версия ФБ тут без разницы, т.к. фактически меряется скорость обращения к диску)

вычисляем, получаем ... 178 мегабайт в секунду. На HDD ST200DM01.

Вам надо CrystalDiskMark запустить, посмотреть диск. А то ваш диск на ssd не тянет совершенно, и даже на hdd.

Скопировал базу на ssd (samsung 860 evo, sata3), получил
Execute time = 22s 500ms

То есть, 369 мегабайт в секунду (столько же показывает и диспетчер задач).

p.s. и последнее - fetch All для select count зачем? там 1 запись выводится.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных 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
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117506
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreat
X11,


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

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

Будешь делать только апдейты. От этого база расти не должна.

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


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


да, вот уже пытаюсь... но все равно будут же и старые

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


вообще, в приложении хватает транзакций, т.е. их на самом деле не две.

А живет она недолго. Только на момент выполнения Delete запроса.

вот процедура выполнения запроса

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
function ExecSql(const aSQL: string; ParamValues: array of variant; const aOkMess: string = ''; const aErrMess: string = ''): string;
Var
  i, c: integer;
  UniSql: TUniSql;
begin
  if aSql.IsEmpty then
    exit(constError + '. ' + constSqlIsEmpty);

  UniSql := CreateUniSql;

  UniSql.Transaction := CreateWrireTransaction(UniSql);
  UniSql.Transaction.StartTransaction;

  try
    UniSql.SQL.Text := aSql;
    try

     if High(ParamValues) < UniSql.Params.Count - 1 then
      c := High(ParamValues)
     else
      c := UniSql.Params.Count - 1;

      for i := 0 to c do
        if not VarIsEmpty(ParamValues[i]) then
        begin
          UniSql.Params[i].ParamType := ptInput;

          case VarType(ParamValues[i]) of
            varByte, varWord, varLongWord, varShortInt, varSmallint, varInteger:
              UniSql.Params[i].AsInteger := ParamValues[i];
            else
              UniSql.Params[i].Value := ParamValues[i];
          end;// case
        end;

      UniSql.Execute;

      if UniSql.Transaction.Active then
        UniSql.Transaction.Commit;

      result := '';

      if not aOkMess.IsEmpty then
        MyMessageBox(constAttention, constMsgSQLOk + aOkMess);

    except
      on e: exception do
      begin
        if UniSql.Transaction.Active then
          UniSql.Transaction.Rollback;

        result := 'Error in ExecSql, sql = ' + aSQL + ', ' + e.Message;

        if not aErrMess.IsEmpty then
          LogError(aErrMess + constMsgSQLErr, e, aSQL);

      end;// on e:
    end;// except
  finally
    FreeAndNil(UniSql);
  end;// finally

end;



код примерно такой:
* Закрываю набор данных, связанный с таблицей мониторинга.
* Удаляю записи текущего процесса.
* Открываю набор данных, связанный с таблицей мониторинга.

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

List я не использую.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117517
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Будешь делать только апдейты. От этого база расти не должна.
Должна. UPDATE и DELETE порождают ровно такие же версии, как и INSERT.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117519
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11,

после b/r размер базы уменьшается? Если нет, то и "лечить" не нужно.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117520
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

Попробуй периодически делать SELECT из этой таблицы. Он собирать мусор может.
Сколько вообще записей в таблице? Несколько штук, как я понял? Делай SELECT COUNT(*), и будет хорошо.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117521
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
после b/r размер базы уменьшается? Если нет, то и "лечить" не нужно.

да, возвращается на начальный размер
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117522
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11
ъъъъъ
после b/r размер базы уменьшается? Если нет, то и "лечить" не нужно.

да, возвращается на начальный размер

Тебе следует плакать в этой теме (предварительно изучив её).
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117523
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Попробуй периодически делать SELECT из этой таблицы.


я выше написал....
только немного ошибся, вот так правильно:

* Закрываю набор данных, связанный с таблицей мониторинга.
* Удаляю записи текущего процесса.
* Открываю набор данных, связанный с таблицей мониторинга.
* Добавляю новые записи (подтверждаю пишущую транзацию).
* Переоткрываю набор данных, связанный с таблицей мониторинга.

У этого набора данных, который связан с таблицей мониторинга, две транзакции. И читающую я не переоткрываю, а только пишущую.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117525
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
YuRock
Попробуй периодически делать SELECT из этой таблицы.


я выше написал....
только немного ошибся, вот так правильно:

* Закрываю набор данных, связанный с таблицей мониторинга.
* Удаляю записи текущего процесса.
* Открываю набор данных, связанный с таблицей мониторинга.
* Добавляю новые записи (подтверждаю пишущую транзацию).
* Переоткрываю набор данных, связанный с таблицей мониторинга.

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

Я точно не помню, и щас проверять лень, но:
- Возможно, в читающей транзакции мусор не чистится;
- Возможно, при индексированном чтении мусор не чистится.
Может у тебя что из этих вариантов.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117526
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, индексов не создавал, а при открытии НД - простой Select, даже where нет.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117527
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Кстати, индексов не создавал, а при открытии НД - простой Select, даже where нет.
И такой селект каждые секунды 3 запускается?
Значит, попробуй запускать его в НЕread-only транзакции, авось поможет.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117529
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
вот процедура выполнения запроса
Вот это
X11
Код: pascal
1.
if UniSql.Transaction.Active then

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


раз в 5 секунд
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117534
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11
код примерно такой:
* Закрываю набор данных, связанный с таблицей мониторинга.
* Удаляю записи текущего процесса.
* Открываю набор данных, связанный с таблицей мониторинга.

Добавь в итерацию:
Код: sql
1.
 select count(*) from табличка


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


что ее искать?
она одна на все приложение и все НД с гридами к ней подключены
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117536
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Добавь в итерацию:
Код: sql
1.
 select count(*) from табличка




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

Для этого у админа есть MON$ таблицы. Всовывать-высовывать каждую секунду не надо.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117539
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и удалять буду не все, а только те, которые старше на 15 мин текущего времени

Код: pascal
1.
2.
3.
4.
5.
6.
7.
      OLDLASTTIME := IncMillisecond(now, 0-UniServerModule.SessionTimeout);// старые записи, которые старше 15 мин(900000 мс), удалить
      UniSession.Log('OLDLASTTIME: ' + DateTimeToStr(OLDLASTTIME));

      if UniServerModule.NodeMode then// если программа запущена из-под HyperServer
        UniMainModule.ExecSql('DELETE FROM TWEBMON WHERE PROCID = :PROCID AND LASTTIME <= :OLDLASTTIME', [pid, OLDLASTTIME]) // удалить все, что связано с текущим процессом, т.к. через HyperServer может быть запущено несколько процессов
      else
        UniMainModule.ExecSql('DELETE FROM TWEBMON WHERE LASTTIME <= :OLDLASTTIME', [OLDLASTTIME]); // удалить все, что связано с текущим процессом
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117541
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Для этого у админа есть MON$ таблицы.


так у меня не монитор подключений к Firebird серверу, а монитор подключений веб-пользователей к приложению

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

Сугубо всё равно. Ежесекундный секс с табличкой не нужен и проистекает из
неправильной архитектуры приложения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117543
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11
и удалять буду не все, а только те, которые старше на 15 мин текущего времени

Ну и что это тебе даст, если ты процедуру каждые 3 секунды повторяешь? Просто отодвинешь "процесс" на 15 минут.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117544
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Сугубо всё равно. Ежесекундный секс с табличкой не нужен и проистекает из
неправильной архитектуры приложения.


Согласен.

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

Замени в этом месте Firebird на первую попавшуюся in-memory СУБД и будет тебе
счастье.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117547
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Ну и что это тебе даст, если ты процедуру каждые 3 секунды повторяешь? Просто отодвинешь "процесс" на 15 минут.


а как же мне удалять старые ненужные записи?
пользователь подключился - запись добавилась...
пользователь отключился - запись осталась.... и ее нужно удалить
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117548
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Замени в этом месте Firebird на первую попавшуюся in-memory СУБД и будет тебе
счастье.


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

В уэб-приложениях так не бывает. Сессия пользователя заканчивается либо явным
тычком на кнопку, либо по таймауту. Специфика stateless протокола http.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117552
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
X11пользователь отключился - запись осталась....

В уэб-приложениях так не бывает. Сессия пользователя заканчивается либо явным
тычком на кнопку, либо по таймауту. Специфика stateless протокола http.
У него же uniGUI. Имитация "классической двухзвенки" поверх http.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117553
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Сессия пользователя заканчивается либо явным
тычком на кнопку, либо по таймауту.


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

Вообще без понятия, что там в FireBird происходит.

Мы для нагруженных систем пользуемся нормальными enterprise БД, без подобных тараканов.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117557
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Должна. UPDATE и DELETE порождают ровно такие же версии, как и INSERT.

Это особенность FireBird?

Так-то, в приличной базе, если блобов нет, табличное пространство при апдейте не должно расти. Только логи.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117558
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreat
YuRock
Должна. UPDATE и DELETE порождают ровно такие же версии, как и INSERT.

Это особенность FireBird?

Так-то, в приличной базе, если блобов нет, табличное пространство при апдейте не должно расти. Только логи.

Рождение эксперта, однако.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117560
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
что ее искать?
она одна на все приложение и все НД с гридами к ней подключены
Так что ты тогда хочешь?
X11
ъъъъъ
Добавь в итерацию:
Код: sql
1.
 select count(*) from табличка

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

Замени в этом месте Firebird на первую попавшуюся in-memory СУБД и будет тебе
счастье.
+1
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117565
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_
Потому что есть активные транзакции.

Да кто же его знает, что у него там.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117566
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
YuRock
Должна. UPDATE и DELETE порождают ровно такие же версии, как и INSERT.

Это особенность FireBird?

Так-то, в приличной базе, если блобов нет, табличное пространство при апдейте не должно расти. Только логи.
Это особенность всех версионных СУБД.
В "логах" лежат эти версии, или в одном файле вся БД - не важно. Логи, о которых ты говоришь - это не какая-то неважная информация, это та же БД.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117567
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
X11
что ее искать?
она одна на все приложение и все НД с гридами к ней подключены
Так что ты тогда хочешь?
X11
пропущено...
ок, спасибо, добавлю
Не поможет. Потому что есть активные транзакции. Соберутся в мусор только те записи, которые уже не существовали на момент старта всех write транзакций
Ну они у него вроде долго не живут (если не врёт), т.ч. оставаться мусора будет не так много.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117571
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Так что ты тогда хочешь?


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


чтобы база не росла...
я же удаляю записи, место должно освободиться когда-нибудь и на это место должны добавляться новые записи
разве нет?

А какие параметры транзакций у тебя?
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117574
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Это особенность всех версионных СУБД.
В "логах" лежат эти версии, или в одном файле вся БД - не важно. Логи, о которых ты говоришь - это не какая-то неважная информация, это та же БД.
Угу, только если это лежит в логах, сами табличные пространства пухнуть не будут. И если делать только Update, они будут иметь постоянный размер.

А логи место на диске занимают только временно и оно будет потом отдано, без всяких подпорок типа reorg, sweep и т.п.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117578
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11я же удаляю записи, место должно освободиться когда-нибудь и на это место должны добавляться новые записи
разве нет?
ух, ох...
Почитайте самую элементарщину
http://www.ibase.ru/mga

Удаление не может "удалить" запись. Это же версионник, поэтому при удалении создается версия (маркер удаления), и БАЗА РАСТЁТ.
Дальше эти версии будут физически удалены на страницах данных только если
- нет длинных транзакций, заинтересованных в этих версиях (просто длинных read/write транзакций)
- кто-нибудь "удаленные данные" прочитает (парадокс).

Если "транзакция записи короткая", это ничего не значит, она просто удалением порождает версию, и всё. Удерживать эту версию может та самая "длинная транзакция одна на всё". Для всех версий ФБ до версии 4 это должна быть транзакция read only read committed. В этом случае она не будет препятствовать превращению старых версий в мусор.

Но, "удаленные записи" ничто не читает, и это логично. И увы, в версионнике запись+версия_удаления так и будут торчать, пока
- кто-то не прочитает эту запись (по условию, куда попадут и другие записи). Тогда сработает сборщик мусора.
- не запустится авто-свип или вручную его не запустят, он прошерстит ВСЮ базу данных и уберет накопившийся мусор.
- ну или можно select count периодически запускать. Но см. выше про длинные транзакции.

p.s. ну ты же в форуме Firebird тусуешься, я думал ты АЗЫ-то хоть знаешь. Ну как так можно.
Короче, читаем подряд
http://www.ibase.ru/mga
http://www.ibase.ru/garbage/
http://www.ibase.ru/sweep/
Это базовые знания по версионности InterBase и Firebird.
rgreatМы для нагруженных систем пользуемся нормальными enterprise БД, без подобных тараканов.
версионные Enterprise СУБД - Oracle, MS SQL (если включить версионность), PostgreSQL, Firebird. Версионность у них работает почти одинаково, с некоторыми отличиями, но принцип похожий. Так что про "тараканов" - это прям ляп в лужу. Не говорите так никому.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117579
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatИ если делать только Update, они будут иметь постоянный размер.
А логи место на диске занимают только временно и оно будет потом отдано
У Firebird данные и "логи" в одном файле. И да, когда "логи" очистятся, туда можно будет напихать новых данных.
У PostgreSQL - то же самое.
Но если в версионнике активна какая-то транзакция, "логи" не могут быть просто так очищены. Например, у Оракла была проблема, когда длинная snapshot-транзакция обламывалась прочитать данные, которые были вычищены из лога.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117580
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Но если в версионнике активна какая-то транзакция, "логи" не могут быть просто так очищены.

Зависшие транзакции - это известный комплекс проблем. Только я сомневаюсь что у X11 проблема именно в этом.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117581
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
версионные Enterprise СУБД - Oracle, MS SQL (если включить версионность), PostgreSQL, Firebird. Версионность у них работает почти одинаково, с некоторыми отличиями, но принцип похожий. Так что про "тараканов" - это прям ляп в лужу. Не говорите так никому.
IBM DB2 забыл.
Да, везде свои нюансы. Но только в приличной и нормально настроенной БД такого роста занимаемого объема, быть не может, если объем фактических данных в таблицах почти не растет.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117595
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
А какие параметры транзакций у тебя?


для чтения: read;nowait;rec_version;read_committed
для записи: write;nowait;rec_version;read_committed
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117598
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
- ну или можно select count периодически запускать. Но см. выше про длинные транзакции.


Получается, это этой проблемной таблицы можно сделать отдельную еще одну читающую транзакцию? Ну чтобы датасет читал данные из этой таблицы периодически переоткрывая транзакцию...
С детства меня учили, что одна "вечная" транзакция - это хорошо, а тут на тебе
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117599
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
я думал ты АЗЫ-то хоть знаешь


та вроде как
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117601
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
kdv
- ну или можно select count периодически запускать. Но см. выше про длинные транзакции.


Получается, это этой проблемной таблицы можно сделать отдельную еще одну читающую транзакцию? Ну чтобы датасет читал данные из этой таблицы периодически переоткрывая транзакцию...
С детства меня учили, что одна "вечная" транзакция - это хорошо, а тут на тебе

Kdv там в одном месте "не" пропустил, ну это ясно.
А по поводу переоткрытия транзакции - такого понятия нет. Переоткрытие - это открытие новой. (Retain не будем упоминать)
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117602
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал изменения в коде. Теперь записи новые добавляются очень редко.
Потестировав пару часов, я проверил размер файла базы - как был размер на диске 63901696 байт, так и остался. Т.е. даже ни на байт не увеличился
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117603
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Для всех версий ФБ до версии 4 это должна быть транзакция read only read committed. В этом случае она не будет препятствовать превращению старых версий в мусор.

Вот тут надо "не" вставить перед (или лучше после) "должна быть".
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117604
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatIBM DB2 забыл.
с каких пор DB2 стала версионником?
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117605
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11учили, что одна "вечная" транзакция - это хорошо
только если она read read_committed.

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


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


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

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

p.s. "на пустом" - я не спорю, что версионник для задач "залили-удалили" не очень подходит, как раз потому что удаление это типа не удаление. Но в блокировочнике поди удали запись, которую читают - повиснешь на блокировке. Другой подход нужен, и т.д.
А в версионнике - тяп-ляп, и всё. Правда, потом, "почему пухнет, почему тормоза", и т.д.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117633
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
YuRock
Должна. UPDATE и DELETE порождают ровно такие же версии, как и INSERT.

Это особенность FireBird?

Так-то, в приличной базе, если блобов нет, табличное пространство при апдейте не должно расти. Только логи.

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

Речь не про настройку БД/СУБД, а про некорректную работу приложения с транзакциями.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117658
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11
Сделал изменения в коде. Теперь записи новые добавляются очень редко.
Потестировав пару часов, я проверил размер файла базы - как был размер на диске 63901696 байт, так и остался. Т.е. даже ни на байт не увеличился

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

Ну да.... и что....
Есть отдельные запросы, как на запись, так и на чтение и не все они привязаны к двум транзакциям. Но у всех транзакций одинаковые параметры .
99% наборов данных (TUniQuery) привязаны к той единственной вечной читающей транзакции.

Но если запрос на Update/Delete/Insert то пишущую транзакцию я иногда создаю как отдельную пишущую транзакцию на время выполнения запроса. Вот как в данном случае.

Например, есть еще модуль сохранения/восстановления разных настроек, т.е. размеры столбцов у сеток, размеры окон, панелей, видимость компонент и т.д. Здесь тоже использует та одна вечная транзакция на чтение и создается своя отдельная пишущая на время записи данных в таблицу.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117691
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Если "транзакция записи короткая", это ничего не значит, она просто удалением порождает версию, и всё. Удерживать эту версию может та самая "длинная транзакция одна на всё". Для всех версий ФБ до версии 4 это должна быть транзакция read only read committed. В этом случае она не будет препятствовать превращению старых версий в мусор.


это ведь правильные параметры для read only?

read;nowait;rec_version;read_committed
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117692
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость

Статьи у тебя классные, но, имхо, нужны готовые рецепты.
Хорошо бы примеры живого кода из приложений: вот так база пухнет, чтобы не пухла, нужно вот тут сделать не так, а так (или так).
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117705
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Есть отдельные запросы, как на запись, так и на чтение и не все они привязаны к двум транзакциям.
Ищи длинную write транзакцию. Она тебе все портит
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117709
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
X11
Есть отдельные запросы, как на запись, так и на чтение и не все они привязаны к двум транзакциям.
Ищи длинную write транзакцию. Она тебе все портит
+1
X11, дёргай периодически gstat -h
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117724
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

это так не работает. Производительность мониторится gstat -h /gstat -r, mon$, трассировка. Чаще всего на работу с транзакциями кладут болт. В статье про ibx у меня есть общие рекомендации по управлению транзакциями, но это максимум, что я могу дать.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117740
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
в блокировочнике поди удали запись, которую читают - повиснешь на блокировке.

Не подвиснешь. Что бы чтение блокировало запись - это надо специально этого захотеть.
Блокировка обычно идет в обратную сторону.

Но и WITH UR FOR READ ONLY никто не отменял, если надо.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117778
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksУ Firebird нет логов.

Технически - есть. Но не на диске (обычно).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117840
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11
_Vasilisk_,

Ну да.... и что....
Есть отдельные запросы, как на запись, так и на чтение и не все они привязаны к двум транзакциям. Но у всех транзакций одинаковые параметры .
99% наборов данных (TUniQuery) привязаны к той единственной вечной читающей транзакции.

Но если запрос на Update/Delete/Insert то пишущую транзакцию я иногда создаю как отдельную пишущую транзакцию на время выполнения запроса. Вот как в данном случае.

Например, есть еще модуль сохранения/восстановления разных настроек, т.е. размеры столбцов у сеток, размеры окон, панелей, видимость компонент и т.д. Здесь тоже использует та одна вечная транзакция на чтение и создается своя отдельная пишущая на время записи данных в таблицу.


У тебя где-то есть живая "write" транзакция.
И не обязательно в "твоих" приложениях. Ты мог открыть ibExpert и, например, посмотреть данные любой в табличке. По умолчанию ibExpert открывает таблички в RC-R W транзакции.
Вот и всё.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117847
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv
ъъъъъ,

это так не работает. Производительность мониторится gstat -h /gstat -r, mon$, трассировка. Чаще всего на работу с транзакциями кладут болт. В статье про ibx у меня есть общие рекомендации по управлению транзакциями, но это максимум, что я могу дать.

А вот интересно.
Сделал я тестовое приложение, которое в цикле
Код: pascal
1.
2.
3.
4.
старт транзакции
  пишет в табличку
  удаляет
коммит


- ну и параллельно запускаю RO или RW транзакции и наблюдаю, что размер базы меняется (RW параллельная транзакция) или нет (RO параллельная транзакция). Тут всё понятно.

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


Так. Заменил я коммит на роллбэк - база всё равно пухнет. После роллбэка.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117857
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
ъъъъъ
А потом я вынес старт и коммит транзакции за пределы цикла. И база стала пухнуть после лишь коммита, при этом никаких параллельных транзакций я не запускал. Это как понимать? То, что должны храниться все версии до завершения транзакции - это понятно. Но нашиша их в базу пихать при коммите, когда нет других транзакций?


Так. Заменил я коммит на роллбэк - база всё равно пухнет. После роллбэка.
Слабо верится (точнее, совсем не верится), что версии сохраняются при commit/rollback.
Скорее, у тебя ForcedWrites отключено.
А то, что версии остаются после rollback - это правильно.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117864
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock,

у тебя фибы установлены? Могу крошечное тестовое приложение выложить, сам увидишь.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117865
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock
ъъъъъ
пропущено...


Так. Заменил я коммит на роллбэк - база всё равно пухнет. После роллбэка.
Слабо верится (точнее, совсем не верится), что версии сохраняются при commit/rollback.
Скорее, у тебя ForcedWrites отключено.
А то, что версии остаются после rollback - это правильно.

тестировал с fb 2.0 и 4.0.

fb 2.0
По commint или rollback, в базу пишется весь накопившийся мусор. Пофиг на параллельные транзакции.
fb 4.0
Аналогично, но мусор в базу пишется не только по commint или rollback, а постепенно, в процессе. Надо полагать, дабы избежать переполнения памяти в длинных и активных транзакциях. И тоже пофиг на параллельные транзакции.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117866
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъЭто как понимать?

Это надо понимать так, что не надо смотреть на размер файла в проводнике.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117867
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
ъъъъъЭто как понимать?

Это надо понимать так, что не надо смотреть на размер файла в проводнике.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
procedure TForm1.ShowDBSize;
var
  info: TWin32FileAttributeData;
begin
  if not GetFileAttributesEx(PChar(fDBName), GetFileExInfoStandard, @info) then
    lblDBSize.Caption := '?'
  else
    lblDBSize.Caption := IntToStr(Int64(info.nFileSizeLow)
      or Int64(info.nFileSizeHigh shl 32));

end;
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117869
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ
...
А вот интересно.
Сделал я тестовое приложение, которое в цикле
Код: pascal
1.
2.
3.
4.
старт транзакции
  пишет в табличку
  удаляет
коммит



- ну и параллельно запускаю RO или RW транзакции и наблюдаю, что размер базы меняется (RW параллельная транзакция) или нет (RO параллельная транзакция)...

"размер базы меняется (RW параллельная транзакция) или нет (RO параллельная транзакция)" - это в FB 2.0.
...
А в fb 4.0 база пухнет при любых RC транзакциях, хоть RO, хоть RW.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117871
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ
...
А в fb 4.0 база пухнет при любых RC транзакциях, хоть RO, хоть RW.

Офигеть, сколько нового.
В FB 4.0 RC транзакции по умолчанию стартуют с доп. опцией опцией "Read Consistency".
Если на сервере, в firebird.conf установить ReadConsistency в 0, то параллельные RC RO транзакции уже не будут заставлять "пухнуть" базу.

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

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

у тебя фибы установлены? Могу крошечное тестовое приложение выложить, сам увидишь.

В общем, кому интересно - вот крошечное приложение. Требует наличие FIB+, не обязательно инсталлированные, лишь бы путь к файликам был в "library path" Delphi.
На компе должен быть установлен и запущен сервер FB, раскоммитить и отредактирвоать нужные константы, пределяющие №порта и путь к клиентской библиотеке:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
const

// fb 2.0
//  cFBClientDLL = 'C:\FBServer\bin\fbclient.dll';
//  cFBPort = 3100;

// fb 4.0
  cFBClientDLL = 'D:\Tools\FB\Servers\Firebird-4.0.1.2631-0_Win32\fbclient.dll';
  cFBPort = 3111;
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117879
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ
ъъъъъ
YuRock,

у тебя фибы установлены? Могу крошечное тестовое приложение выложить, сам увидишь.

В общем, кому интересно - вот крошечное приложение. Требует наличие FIB+, не обязательно инсталлированные, лишь бы путь к файликам был в "library path" Delphi.
На компе должен быть установлен и запущен сервер FB, раскоммитить и отредактирвоать нужные константы, пределяющие №порта и путь к клиентской библиотеке:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
const

// fb 2.0
//  cFBClientDLL = 'C:\FBServer\bin\fbclient.dll';
//  cFBPort = 3100;

// fb 4.0
  cFBClientDLL = 'D:\Tools\FB\Servers\Firebird-4.0.1.2631-0_Win32\fbclient.dll';
  cFBPort = 3111;




https://www.sql.ru/forum/actualfile.aspx?id=22405985] Приложенный файл (tstGarb.7z - 2Kb)

Запускается, [пере]создается файл базы, табличка tbl (id integer, name varchar(100)), и в бесконечном цикле выполняется скрипт, который можно поменять.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117880
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock
ъъъъъ
YuRock,

у тебя фибы установлены? Могу крошечное тестовое приложение выложить, сам увидишь.
Нет

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

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

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

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

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

Не понял вопроса.
Увидел. Ты пишешь и удаляешь в одной транзакции.
Вполне возможно, сервер настолько умный, что всё равно обходится одной версией, просто изменяет ее.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117896
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как интересно...
Есть табличка,
Код: sql
1.
2.
3.
4.
CREATE TABLE TBL (
    ID    INTEGER NOT NULL,
    NAME  VARCHAR(100)
);



Сперва выполняем

Код: sql
1.
2.
3.
4.
insert into tbl values (1, 'Колбаса') ;
insert into tbl values (2, 'Сосиски') ;
insert into tbl values (3, 'Хлеб') ;
... много-много раз insert


а потом, в цикле

Код: sql
1.
2.
3.
start transaction;
update tbl set id = 123,  name = 'Молоко';
commit;


Так вот, в fb 2.0, при наличии параллельной RW транзакции, база бешено пухнет.

А в fb 4.0 - не пухнет. Хотя, при включении параллельной RW транзакции, скорость апдейта все равно существенно уменьшается.

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

Ты думаешь, выпуск двух минорных версий и двух мажорных - просто изменение циферки?..
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117900
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Протеститровал и с FB 2.5: апдейты, при включении параллельной RW транзакции, также заставляют "пухнуть" базу.

Наверное, нужно таки переползать на FB 4.0.
Если не боитесь Read Consistency, конечно. :)
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117901
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
Ты думаешь, выпуск двух минорных версий и двух мажорных - просто изменение циферки?..

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

Ты думаешь, выпуск двух минорных версий и двух мажорных - просто изменение циферки?..

"Я читаю, но не понимаю" - (с).

В версии 4.0 столько уже накрутили, что не знаешь, откуда подвоха ждать. Пока сам не пощупаешь, не осознаЁшь.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117907
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Протеститровал и с FB 2.5: апдейты, при включении параллельной RW транзакции, также заставляют "пухнуть" базу.

Наверное, нужно таки переползать на FB 4.0.
Если не боитесь Read Consistency, конечно. :)

Read Consistency - это круть. То, чего давно не хватало.

А подвох там - это таймзоны, отключить которые легко и для всех я пока так и не понял, как. Видимо, так и останется никак.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117913
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое простое - параметром конфига. Чуть сложнее SET BIND в триггере на коннект.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117916
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock
ъъъъъ
Протеститровал и с FB 2.5: апдейты, при включении параллельной RW транзакции, также заставляют "пухнуть" базу.

Наверное, нужно таки переползать на FB 4.0.
Если не боитесь Read Consistency, конечно. :)

Read Consistency - это круть. То, чего давно не хватало.
...

Тебя не смущает, что теперь, с "Read Consistency", все RC транзакции станут причиной создания множества версий? Там, где у тебя в древних приложениях жила "безобидная" длинная RC RO транзакция, базы начнут "пухнуть".
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117925
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
YuRock
пропущено...

Read Consistency - это круть. То, чего давно не хватало.
...

Тебя не смущает, что теперь, с "Read Consistency", все RC транзакции станут причиной создания множества версий? Там, где у тебя в древних приложениях жила "безобидная" длинная RC RO транзакция, базы начнут "пухнуть".
Не станут. Они будут держать только те версии, которые изменили.
В этом - главная прелесть.
Прочти уж до конца, что читать начал.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117926
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock
Они будут держать только те версии, которые изменили.

Что могут изменить RO транзакции?
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117928
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Самое простое - параметром конфига. Чуть сложнее SET BIND в триггере на коннект.
Если речь про DataTypeCompatibility = 3.0 - то это будет та же тройка, смысла перехода на такое нет.
Что касается set bind of TIME ZONE, то это может работать не всегда корректно, на клиент может приходить не то, что было на сервере. А для меня это недопустимо.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117929
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
YuRock
Они будут держать только те версии, которые изменили.

Что могут изменить RO транзакции?
Речь о любых Read commited транзакциях.
RO ничего держать не будут, т.к. ничего не изменят в их контексте.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117934
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock
RO ничего держать не будут, т.к. ничего не изменят в их контексте.

Так было до 4.0.
С 4.0, RC RO + Read Consistency - изменения, стало как в RC RW.
Смотри:
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117943
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
YuRock
RO ничего держать не будут, т.к. ничего не изменят в их контексте.

Так было до 4.0.
С 4.0, RC RO + Read Consistency - изменения, стало как в RC RW.
Смотри:

Так не должно быть, разве что на снапшотах.
С RORC - можно в трэкер идти. Ну или хотя бы в соседний форум для начала.
RC не должна ничего "держать" (даже пишущая, кроме "своих" записей) - в этом главная фича ФБ4 вроде.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117946
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Ну или хотя бы в соседний форум для начала.
А, вижу, ты уже.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40117956
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

там тонкость в том, что в 4.0 могут вычищаться "промежуточные" версии, и "поэтому" RO RC не работает. Так что зависит от теста.
Тут по мере теста надо смотреть в gstat -r.
Кроме того, если тест постоянно обновляет одни и те же записи, и запущен SuperServer, то фоновый сборщик мусора может просто не успевать собирать мусор, из-за постоянных блокировок страниц на запись.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118003
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
И не обязательно в "твоих" приложениях. Ты мог открыть ibExpert и, например, посмотреть данные любой в табличке. По умолчанию ibExpert открывает таблички в RC-R W транзакции.


наверно была в моей программе...
я переписал код и вынес удаление и обновление в отдельные свои транзакции, а у НД, который привязан к сетке не вызываю Apend/Edit.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118051
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11,

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

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

Firebird 3

Ну, пока можно жить.
Только длинные RW транзакции исключи.
И в настройках ibExpert сделай RO транзакции умолчательными. А то откроешь ibExpert, и начнешь вчерашний день в своем коде искать.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118097
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

???
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118099
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
???
isc_tpb_read
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118101
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
X11
???
isc_tpb_read
я давно говорил Александру, что у него "редактор транзакций" - говно убогое.
но править он его не будет.
забронзовел.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118109
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
база, которая выросла
это статистика из IBExpert (gstat -h то же показывает)
Размер файла 1,35 Гб.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Database header page information:
        Flags                   0
        Generation              230251
        System Change Number    0
        Page size               4096
        ODS version             12.0
        Oldest transaction      235975
        Oldest active           235976
        Oldest snapshot         235976
        Next transaction        236091
        Sequence number         0
        Next attachment ID      65901
        Implementation          HW=Intel/i386 little-endian OS=Windows CC=MSVC
        Shadow count            0
        Page buffers            0
        Next header page        0
        Database dialect        3
        Creation date           Oct 10, 2019 22:54:52
        Attributes              force write

    Variable header data:
        Sweep interval:         20000
        *END*
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118113
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11база, которая выросла

Это не база, это только её заголовок.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118115
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
база, которая выросла
это статистика из IBExpert (gstat -h то же показывает)
Размер файла 1,35 Гб.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Database header page information:
        Oldest transaction      235975
        Oldest active           235976
        Oldest snapshot         235976
        Next transaction        236091
................
    Variable header data:
        Sweep interval:         20000
        *END*
укороти значение Sweep interval
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118116
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

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

"Тормозите лучше в папу..." (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118119
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11и так понятно...

Непонятно назачем ты ЕЁ показываешь , когда тебе сказали
смотреть СТАТИСТИКУ ВЕРСИЙ ЗАПИСЕЙ И ИНДЕКСОВ .
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118123
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
смотреть СТАТИСТИКУ ВЕРСИЙ ЗАПИСЕЙ И ИНДЕКСОВ .


это там, где отчёт по всем таблицам (gstat -r) на 5000+ строк по всем таблицам?
а посмотреть нужно только конкретную таблицу?
TWEBMON
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
TWEBMON (226)
    Primary pointer page: 2920, Index root page: 13986
    Pointer pages: 1, data page slots: 1
    Data pages: 1, average fill: 41%
    Primary pages: 1, secondary pages: 0, swept pages: 0
    Empty pages: 0, full pages: 0
    Fill distribution:
         0 - 19% = 0
        20 - 39% = 0
        40 - 59% = 1
        60 - 79% = 0
        80 - 99% = 0

    Index FK_TWEBMON_1 (1)
        Root page: 14206, depth: 1, leaf buckets: 1, nodes: 3
        Average node length: 2.00, total dup: 2, max dup: 2
        Average key length: 1.00, compression ratio: 0.00
        Average prefix length: 0.00, average data length: 0.00
        Clustering factor: 1, ratio: 0.33
        Fill distribution:
             0 - 19% = 1
            20 - 39% = 0
            40 - 59% = 0
            60 - 79% = 0
            80 - 99% = 0

    Index PK_TWEBMON (0)
        Root page: 14205, depth: 1, leaf buckets: 1, nodes: 3
        Average node length: 5.00, total dup: 0, max dup: 0
        Average key length: 3.67, compression ratio: 0.82
        Average prefix length: 1.33, average data length: 1.67
        Clustering factor: 1, ratio: 0.33
        Fill distribution:
             0 - 19% = 1
            20 - 39% = 0
            40 - 59% = 0
            60 - 79% = 0
            80 - 99% = 0
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118245
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

ядрит-мадрит, сказали же - gstat -r ! Нет, он gstat -a запустил :-)

чем отличается:
gstat -a
BLOAT (139)
Primary pointer page: 299, Index root page: 300
Pointer pages: 1, data page slots: 1
Data pages: 1, average fill: 1%
Primary pages: 1, secondary pages: 0, swept pages: 0
Empty pages: 0, full pages: 0


gstat -r
BLOAT (139)
Primary pointer page: 299, Index root page: 300
Total formats: 1, used formats: 1
Average record length: 9.00, total records: 1
Average version length: 9.00, total versions: 1, max versions: 1
Average fragment length: 0.00, total fragments: 0, max fragments: 0
Average unpacked length: 16.00, compression ratio: 1.78
Pointer pages: 1, data page slots: 1
Data pages: 1, average fill: 1%
Primary pages: 1, secondary pages: 0, swept pages: 0
Empty pages: 0, full pages: 0
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118358
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не запускал gstat -r, а взяли статистику, которую выдал IBExpert, я не знал, что он выдает статистику, связанную с gstat -a, увидел, что похожие ключевые слова и подумал, что это именно gstat -r.

Вот, взял непосредственно из gstat -r:
gstat -r localhost:db1 -u SYSDBA -p masterkey >> 11.txt
TWEBMON (226)
Primary pointer page: 2920, Index root page: 13986
Total formats: 3, used formats: 1
Average record length: 289.00, total records: 1
Average version length: 0.00, total versions: 0, max versions: 0
Average fragment length: 0.00, total fragments: 0, max fragments: 0
Average unpacked length: 3082.00, compression ratio: 10.66
Pointer pages: 1, data page slots: 1
Data pages: 1, average fill: 8%
Primary pages: 1, secondary pages: 0, swept pages: 0
Empty pages: 0, full pages: 0
Fill distribution:
0 - 19% = 1
20 - 39% = 0
40 - 59% = 0
60 - 79% = 0
80 - 99% = 0

Index FK_TWEBMON_1 (1)
Root page: 14206, depth: 1, leaf buckets: 1, nodes: 1
Average node length: 2.00, total dup: 0, max dup: 0
Average key length: 1.00, compression ratio: 0.00
Average prefix length: 0.00, average data length: 0.00
Clustering factor: 1, ratio: 1.00
Fill distribution:
0 - 19% = 1
20 - 39% = 0
40 - 59% = 0
60 - 79% = 0
80 - 99% = 0

Index PK_TWEBMON (0)
Root page: 14205, depth: 1, leaf buckets: 1, nodes: 1
Average node length: 7.00, total dup: 0, max dup: 0
Average key length: 5.00, compression ratio: 0.60
Average prefix length: 0.00, average data length: 3.00
Clustering factor: 1, ratio: 1.00
Fill distribution:
0 - 19% = 1
20 - 39% = 0
40 - 59% = 0
60 - 79% = 0
80 - 99% = 0
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118449
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

в IBExpert галочку надо было нажать при сборе статистики.
А так - ну нет в таблице версий. Уже. Статистику надо брать вовремя, "в нужный момент."
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118456
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Статистику надо брать вовремя, "в нужный момент."


т.е. в тот самый момент, пока есть проблема и в момент, пока база растет?

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

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

ну а когда? В чем смысл собирать статистику по версиям после работы сборщика мусора, после свипа, да после рестора базы, в конце-концов, когда версий в базе УЖЕ НЕТ.
В то время, пока "база пухнет", и надо собирать.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118568
jonik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Dimitry Sibiryakov
Для этого у админа есть MON$ таблицы.


так у меня не монитор подключений к Firebird серверу, а монитор подключений веб-пользователей к приложению

у меня своя табличка пользователей и все приложения к Firebird подключены как SYSDBA .

Понятно, что к обсуждаемой проблеме это не имеет отношение. Но так ведь делать низя!
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118571
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jonik
X11
пропущено...


так у меня не монитор подключений к Firebird серверу, а монитор подключений веб-пользователей к приложению

у меня своя табличка пользователей и все приложения к Firebird подключены как SYSDBA .

Понятно, что к обсуждаемой проблеме это не имеет отношение. Но так ведь делать низя!

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

ну а когда? В чем смысл собирать статистику по версиям после работы сборщика мусора, после свипа, да после рестора базы, в конце-концов, когда версий в базе УЖЕ НЕТ.
В то время, пока "база пухнет", и надо собирать.


если всего этого в базе нет то, почему база весит не 60 Мб, а 1,35Гб? Что там такого? просто пустота?
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118573
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
В то время, пока "база пухнет", и надо собирать.


хорошо, буду знать, но часто это замечаешь уже ПОСЛЕ
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118574
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jonik
X11
пропущено...


так у меня не монитор подключений к Firebird серверу, а монитор подключений веб-пользователей к приложению

у меня своя табличка пользователей и все приложения к Firebird подключены как SYSDBA .

Понятно, что к обсуждаемой проблеме это не имеет отношение. Но так ведь делать низя!


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

Понятно, что к обсуждаемой проблеме это не имеет отношение. Но так ведь делать низя!


почему?

Меня так учили. SYSDBA это SYSDBA. Как по мне это не профессионально.
Ну и плюс много лет работал с ораклом, там никто под sys и остальными админами не работает.
И без разницы веб, это или не веб. В чем проблема завести общего пользователя для веб и раздать ему права и роли и под ним ходить?
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118599
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jonik, вопрос был: почему нельзя?

Извини, я какгбэ не про твой личный опыт спрашивал... а почему нельзя?
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118606
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11почему база весит не 60 Мб, а 1,35Гб? Что там такого? просто пустота?

Да, пустота. Почему она тебя беспокоит? Боишься, что с сервера придётся
перемещать коллекцию порнушки для освобождения места под этот гигабайт?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118607
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ
А то что будет? Через веб интерфейс прорвется враг?

Хотя бы то, что никого shutdown-ом не выгонишь
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118608
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня база 1,35 Гб, а завтра 135 Гб... не успеешь оглянуться

Нет, дело не в парнушке, проснитесь, сейчас уже 2022 год на носу, сейчас скорость доступа к Интернет 100-1000 Гбит, зачем ее хранить ее у себя )))
дело в то SSD, базы живут на SSD, а их размеры в среднем 240 Гб.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118610
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Сегодня база 1,35 Гб, а завтра 135 Гб...
дело в то SSD, базы живут на SSD, а их размеры в среднем 240 Гб.

Базы не живут на одиночном SSD. И даже при распухании до 135 гигабайт - ещё 105
остаются свободными.

О том, что в ноутбуке, с которого я это пишу, SSD на полтеррабайта из которых свободны 250, наверное, лучше было бы не говорить. А то вспомнится "солидная контора возьмёт в аренду дырокол"...
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118644
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv
существенно - это как? Например, дайте select count по вашей самой

Ну вот, недавно я узнал что наша сервисная база с момеиа запуска не b/r (не помню точно, когда это было, помню, что тогда fb 2.5 ещё бетой был), заставил выполнить b/r. Скорость формирования долгих отчетов выросла раза в 2-3, замеряли/сравнивали.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118648
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъСкорость формирования долгих отчетов выросла раза в 2-3, замеряли/сравнивали.

Осталась сущая мелочь: выяснить за счёт чего и устранить причину такой
деградации производительности.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118659
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
ъъъъъСкорость формирования долгих отчетов выросла раза в 2-3, замеряли/сравнивали.

Осталась сущая мелочь: выяснить за счёт чего и устранить причину такой
деградации производительности.
Я этот проект не веду, просто дал недеструктивный совет, когда пожаловались, что отчёты дольше минуты строятся. Ломать то, что пашет больше 10 лет - нет.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118661
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Я этот проект не веду, просто дал недеструктивный совет, когда пожаловались, что отчёты дольше минуты строятся. Ломать то, что пашет больше 10 лет - нет.
а чо не SSD ?
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40118691
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий
...а чо не SSD ?

На следующий раз приберег.
Хи, а я и не знаю, что там за железка.
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40119046
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
kdv
существенно - это как? Например, дайте select count по вашей самой

Ну вот, недавно я узнал что наша сервисная база с момеиа запуска не b/r (не помню точно, когда это было, помню, что тогда fb 2.5 ещё бетой был), заставил выполнить b/r. Скорость формирования долгих отчетов выросла раза в 2-3, замеряли/сравнивали.


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

Ты ещё скажи "следить за состоянием БД и вообще делать работу DBA", ха-ха.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ускорение работы растущей базы данных Firebird через приложение на Delphi
    #40119056
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

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

Ну вот, недавно я узнал что наша сервисная база с момеиа запуска не b/r (не помню точно, когда это было, помню, что тогда fb 2.5 ещё бетой был), заставил выполнить b/r. Скорость формирования долгих отчетов выросла раза в 2-3, замеряли/сравнивали.


может нужно периодически пересчитывать статистику индексов?

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


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