|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
Добрый день. Разрабатываю приложение, которое использует Firebird в конфигурации Embedded (платформа - Linux, версия FB - 2.1.5). База данных расположена на отдельном диске (без файловой системы - чисто на блочном устройстве). Есть несколько таблиц со структурой: Код: plsql 1. 2.
Для каждой создан индекс: Код: plsql 1.
Выполняю запрос: Код: plsql 1.
В итоге, при размере таблицы примерно в 700 000 записей первый такой запрос к таблице выполняется от 6 до 17 секунд. Последующие запросы отрабатывают быстрее (подозреваю, вследствие кэширования FB). И далее, чем больше записей, тем больше время выполнения запроса. Макс. время выполнения запроса видел - 65 секунд (!!!!). Прочитал в документации, что после массового удаления/добавления записей необходимо вручную инициировать пересчет индексов: Код: plsql 1.
И да, это помогает. После перестройки индексов запросы выполняется очень быстро. НО есть две проблемы. 1) Если я завершаю свое приложение и отключаюсь от базы, то при последующем запуске и подключении нужно опять делать перестройку всех индексов - а это приводит к тому, что перестройка всех индексов занимает более 225 сек, что очень плохо. Почему Firebird не сохраняет высчитанные значение в файл базы данных, например ? 2) После перестройки индексов, все запросы из таблицы работают очень быстро, однако, со временем, при изменении таблицы, вновь растет время выполнения запросов. Есть ли какие-либо рекомендации, с какой частотой необходимо перестраивать индексы, чтобы быстро отрабатывались запросы к БД ? Надеюсь, кто-то сталкивался с таким и поможет найти решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 14:37 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
NightWizard1) Если я завершаю свое приложение и отключаюсь от базы, то при последующем запуске и подключении нужно опять делать перестройку всех индексов - а это приводит к тому, что перестройка всех индексов занимает более 225 сек, что очень плохо. Почему Firebird не сохраняет высчитанные значение в файл базы данных, например ? Коммит забыл сделать? NightWizard2) После перестройки индексов, все запросы из таблицы работают очень быстро, однако, со временем, при изменении таблицы, вновь растет время выполнения запросов. Есть ли какие-либо рекомендации, с какой частотой необходимо перестраивать индексы, чтобы быстро отрабатывались запросы к БД ? Перестраиваю индексы раз в сутки ночью. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 14:42 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
феерия просто Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 14:43 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
NightWizardВ итоге, при размере таблицы примерно в 700 000 записей первый такой запрос к таблице выполняется от 6 до 17 секунд. Ты план этого запроса смотрел? PS: дальше идущий бред пропустил. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 14:44 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
__Avenger__NightWizard1) Если я завершаю свое приложение и отключаюсь от базы, то при последующем запуске и подключении нужно опять делать перестройку всех индексов - а это приводит к тому, что перестройка всех индексов занимает более 225 сек, что очень плохо. Почему Firebird не сохраняет высчитанные значение в файл базы данных, например ? Коммит забыл сделать? NightWizard2) После перестройки индексов, все запросы из таблицы работают очень быстро, однако, со временем, при изменении таблицы, вновь растет время выполнения запросов. Есть ли какие-либо рекомендации, с какой частотой необходимо перестраивать индексы, чтобы быстро отрабатывались запросы к БД ? Перестраиваю индексы раз в сутки ночью. При перестройки коммит для трнзакции делается. Я тоже хотел один раз в сутки делать, но база наполняется быстро довольно (в каждую такую табличку примерно 10 записей в 20 секунд добавляется - и сутками работает все). ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 14:47 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
NightWizardПочему Firebird не сохраняет высчитанные значение в файл базы данных, например ? Сохраняет, куда он денется. По крайней мере в файл. NightWizardПосле перестройки индексов, все запросы из таблицы работают очень быстро перестройки индексов - и кэширования данных, как самим сервером, так и операционкой NightWizardоднако, со временем, при изменении таблицы, вновь растет время выполнения запросов. Система работает - данные вытесняются из кэша. На момент запроса кэш полу-пустой и его надо заного считать с диска. В общем вам лучше в самом деле попробовать посмотреть статистику по вашим запросам, возможно удобнее в отдельно-стоящем сервере и IDE типа IBExpert. Не только планы запросов, но и их длительность и количество чтений с диска и из кэша. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 14:53 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
NightWizardбаза наполняется быстро довольно (в каждую такую табличку примерно 10 записей в 20 секунд добавляется - и сутками работает все). Одна запись в две секунды. Мизерная нагрузка. Только полный дебилизм разработчика может заставить это тормозить. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 14:55 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovNightWizardВ итоге, при размере таблицы примерно в 700 000 записей первый такой запрос к таблице выполняется от 6 до 17 секунд. Ты план этого запроса смотрел? PS: дальше идущий бред пропустил. Тут все ок: Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 14:56 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
Мимопроходящийфеерия простои сборник мифов "древнего файрберда". NightWizardРазрабатываю приложение, которое использует Firebird в конфигурации Embedded (платформа - Linux, версия FB - 2.1.5)странно разрабатывать на снятой с техподдержки версии. NightWizardПрочитал в документации, что после массового удаления/добавления записей необходимо вручную инициировать пересчет индексов:вот прямо так необходимо ? NightWizardпримерно 10 записей в 20 секунд добавляетсяNightWizardпри размере таблицы примерно в 700 000 записейРазмеры микроскопические и прирост тоже. Где план и статистика исполнения запроса? Сдается мне натуралом оно шпарит и диск САТА. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 14:58 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
NightWizard Код: plsql 1.
А зачем Int64, при аличии родного timestamp ? http://firebirdsql.su/doku.php?id=tipy_dannyx Ну, предполагая, что у вас третий диалект включён, а то и float получите... http://wm-help.net/lib/b/book/4054355128/189 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 14:58 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovТолько полный дебилизм разработчика может заставить это тормозить. зависание OIT с распуханием индексов неактуальными записями? отключение сборки мусора навечно ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 15:00 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
AriochNightWizard Код: plsql 1.
А зачем Int64, при аличии родного timestamp ? http://firebirdsql.su/doku.php?id=tipy_dannyx Ну, предполагая, что у вас третий диалект включён, а то и float получите... http://wm-help.net/lib/b/book/4054355128/189 Диалект 3. Timestamp не подходит, так как точность до миллисекунд нужна. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 15:00 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
NightWizardТут все ок: PLAN (TABLE1 ORDER IDX_TABLE1 INDEX (IDX_TABLE1)) Что об этом индексе говорит "gstat -i"? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 15:02 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
NightWizardДиалект 3. Timestamp не подходит, так как точность до миллисекунд нужна. Точность timestamp - одна десятая миллисекунды. Чисто для информации. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 15:03 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
NightWizardточность до миллисекунд нужна. MILLISECOND NUMERIC(9,1) Миллисекунд, 0.0–999.9 (начиная с версии 2.1.2) http://firebirdsql.su/doku.php?id=extract The fractional part of the time used to be always “.0000”, giving an effective seconds precision. Since Firebird 2.0 the precision is 3 decimals, i.e. milliseconds. http://www.firebirdsql.org/refdocs/langrefupd21-now.html Fractions of Seconds: If fractions of seconds are stored in date and time data types, Firebird stores them to ten-thousandths of a second. If a lower granularity is preferred, the fraction can be specified explicitly as thousandths, hundredths or tenths of a second in Dialect 3 databases of ODS 11 or higher. http://www.firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-datatypes-datetime.html ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 15:09 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
Arioch, Да, тут недоглядел. Но я пробовал менять и на timestamp - от этого быстрее оно не заработало. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 15:11 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovNightWizardТут все ок: PLAN (TABLE1 ORDER IDX_TABLE1 INDEX (IDX_TABLE1)) Что об этом индексе говорит "gstat -i"? Блин, на сервере, где это тестировал gstat'а нет, как и увы gbak'а. Разберусь с этим вопросом. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 15:14 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
NightWizardТут все ок: Код: plsql 1.
я бы не был столь оптимистичен вполне возможно что SORT был бы лучше чем ORDER ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 15:14 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
NightWizard, проверьте, что у вас не залипла Oldest Interesting Transaction http://www.firebirdsql.org/manual/gstat-example-header.html и что достаточно часто проходит сборка мусора ( sweep interval ) иначе у вас индексы должны распухать старыми записями и в пределе будет всё более похоже на чтение таблицы без индексов вообще ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 15:15 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
Hello, Arioch! You wrote on 18 апреля 2016 г. 15:17:41: Arioch> проверьте, что у вас не залипла у него gfix-а нету, как и gstat-а Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 15:18 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
А вот интересно, предположим залипание OIT как поведет себя embedded сервер, когда он OIT "подвинет" - при выключении приложения ( и соотв. смерти транзакции ), или при следующем запуске? nbackup на embedded натравить едва ли получится... стало быть проверить залипание OIT в процессе работы embedded-сервера можно только "изнутри приложения", внешние утилиты просто не получат доступ к файлу БД ? или gstat всё же можно натравить по NFS/SMB на файл БД, открытой на другой машине встроенным сервером? Хотя бы заголовок БД считать, если не индексы? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 15:21 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
Мимопроходящий, ну значит или прoверять через API изнутри программы, или жёстко отстреливать программу на лету не давая записать в файл исправленный OIT (и все остальные кэши, ага) и потом копировать полуживой файл БД для вскрытия ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 15:23 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
NightWizard gstat'а нет, как и увы gbak'а Весело вам - живете как на пороховой бочке. P.S. Путь джедая-камикадзе - особенно труден. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 15:23 |
|
Перестройка индексов в Firebird
|
|||
---|---|---|---|
#18+
gfix как раз есть. Счас посмотрю, подумаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2016, 15:23 |
|
|
start [/forum/topic.php?fid=40&tid=1562211]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 273ms |
total: | 428ms |
0 / 0 |