Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Перестройка индексов в Firebird / 25 сообщений из 142, страница 1 из 6
18.04.2016, 14:37
    #39218177
NightWizard
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
Добрый день.

Разрабатываю приложение, которое использует Firebird в конфигурации Embedded (платформа - Linux, версия FB - 2.1.5). База данных расположена на отдельном диске (без файловой системы - чисто на блочном устройстве).

Есть несколько таблиц со структурой:
Код: plsql
1.
2.
CREATE TABLE Table1(id numeric(18,0), i_timestamp numeric(18,0),
	i_offset numeric(18,0), PRIMARY KEY (id));



Для каждой создан индекс:

Код: plsql
1.
CREATE ASC INDEX idx_Table1 ON Table1 (i_timestamp);



Выполняю запрос:
Код: plsql
1.
SELECT FIRST 1 ID, I_TIMESTAMP, I_OFFSET FROM Table1 WHERE I_TIMESTAMP >= <значение> ORDER BY I_TIMESTAMP ASC;



В итоге, при размере таблицы примерно в 700 000 записей первый такой запрос к таблице выполняется от 6 до 17 секунд. Последующие запросы отрабатывают быстрее (подозреваю, вследствие кэширования FB). И далее, чем больше записей, тем больше время выполнения запроса. Макс. время выполнения запроса видел - 65 секунд (!!!!).

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

Код: plsql
1.
ALTER INDEX idx_Table1 ACTIVE;



И да, это помогает. После перестройки индексов запросы выполняется очень быстро. НО есть две проблемы.

1) Если я завершаю свое приложение и отключаюсь от базы, то при последующем запуске и подключении нужно опять делать перестройку всех индексов - а это приводит к тому, что перестройка всех индексов занимает более 225 сек, что очень плохо. Почему Firebird не сохраняет высчитанные значение в файл базы данных, например ?

2) После перестройки индексов, все запросы из таблицы работают очень быстро, однако, со временем, при изменении таблицы, вновь растет время выполнения запросов. Есть ли какие-либо рекомендации, с какой частотой необходимо перестраивать индексы, чтобы быстро отрабатывались запросы к БД ?

Надеюсь, кто-то сталкивался с таким и поможет найти решение.
...
Рейтинг: 0 / 0
18.04.2016, 14:42
    #39218186
__Avenger__
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
NightWizard1) Если я завершаю свое приложение и отключаюсь от базы, то при последующем запуске и подключении нужно опять делать перестройку всех индексов - а это приводит к тому, что перестройка всех индексов занимает более 225 сек, что очень плохо. Почему Firebird не сохраняет высчитанные значение в файл базы данных, например ?

Коммит забыл сделать?

NightWizard2) После перестройки индексов, все запросы из таблицы работают очень быстро, однако, со временем, при изменении таблицы, вновь растет время выполнения запросов. Есть ли какие-либо рекомендации, с какой частотой необходимо перестраивать индексы, чтобы быстро отрабатывались запросы к БД ?

Перестраиваю индексы раз в сутки ночью.
...
Рейтинг: 0 / 0
18.04.2016, 14:43
    #39218189
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
феерия просто
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.04.2016, 14:44
    #39218191
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
NightWizardВ итоге, при размере таблицы примерно в 700 000 записей первый такой
запрос к таблице выполняется от 6 до 17 секунд.
Ты план этого запроса смотрел?

PS: дальше идущий бред пропустил.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.04.2016, 14:47
    #39218195
NightWizard
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
__Avenger__NightWizard1) Если я завершаю свое приложение и отключаюсь от базы, то при последующем запуске и подключении нужно опять делать перестройку всех индексов - а это приводит к тому, что перестройка всех индексов занимает более 225 сек, что очень плохо. Почему Firebird не сохраняет высчитанные значение в файл базы данных, например ?

Коммит забыл сделать?

NightWizard2) После перестройки индексов, все запросы из таблицы работают очень быстро, однако, со временем, при изменении таблицы, вновь растет время выполнения запросов. Есть ли какие-либо рекомендации, с какой частотой необходимо перестраивать индексы, чтобы быстро отрабатывались запросы к БД ?

Перестраиваю индексы раз в сутки ночью.

При перестройки коммит для трнзакции делается.

Я тоже хотел один раз в сутки делать, но база наполняется быстро довольно (в каждую такую табличку примерно 10 записей в 20 секунд добавляется - и сутками работает все).
...
Рейтинг: 0 / 0
18.04.2016, 14:53
    #39218204
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
NightWizardПочему Firebird не сохраняет высчитанные значение в файл базы данных, например ?

Сохраняет, куда он денется. По крайней мере в файл.

NightWizardПосле перестройки индексов, все запросы из таблицы работают очень быстро

перестройки индексов - и кэширования данных, как самим сервером, так и операционкой

NightWizardоднако, со временем, при изменении таблицы, вновь растет время выполнения запросов.

Система работает - данные вытесняются из кэша. На момент запроса кэш полу-пустой и его надо заного считать с диска.

В общем вам лучше в самом деле попробовать посмотреть статистику по вашим запросам, возможно удобнее в отдельно-стоящем сервере и IDE типа IBExpert. Не только планы запросов, но и их длительность и количество чтений с диска и из кэша.
...
Рейтинг: 0 / 0
18.04.2016, 14:55
    #39218207
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
NightWizardбаза наполняется быстро довольно (в каждую такую табличку примерно 10
записей в 20 секунд добавляется - и сутками работает все).
Одна запись в две секунды. Мизерная нагрузка. Только полный дебилизм разработчика может
заставить это тормозить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.04.2016, 14:56
    #39218209
NightWizard
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
Dimitry SibiryakovNightWizardВ итоге, при размере таблицы примерно в 700 000 записей первый такой
запрос к таблице выполняется от 6 до 17 секунд.
Ты план этого запроса смотрел?

PS: дальше идущий бред пропустил.


Тут все ок:

Код: plsql
1.
PLAN (TABLE1 ORDER IDX_TABLE1 INDEX (IDX_TABLE1))
...
Рейтинг: 0 / 0
18.04.2016, 14:58
    #39218212
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
Мимопроходящийфеерия простои сборник мифов "древнего файрберда".

NightWizardРазрабатываю приложение, которое использует Firebird в конфигурации Embedded (платформа - Linux, версия FB - 2.1.5)странно разрабатывать на снятой с техподдержки версии.

NightWizardПрочитал в документации, что после массового удаления/добавления записей необходимо вручную инициировать пересчет индексов:вот прямо так необходимо ?

NightWizardпримерно 10 записей в 20 секунд добавляетсяNightWizardпри размере таблицы примерно в 700 000 записейРазмеры микроскопические и прирост тоже.

Где план и статистика исполнения запроса?
Сдается мне натуралом оно шпарит и диск САТА.
...
Рейтинг: 0 / 0
18.04.2016, 14:58
    #39218214
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
NightWizard
Код: plsql
1.
i_timestamp numeric(18,0)



А зачем Int64, при аличии родного timestamp ?

http://firebirdsql.su/doku.php?id=tipy_dannyx

Ну, предполагая, что у вас третий диалект включён, а то и float получите...

http://wm-help.net/lib/b/book/4054355128/189
...
Рейтинг: 0 / 0
18.04.2016, 15:00
    #39218219
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
Dimitry SibiryakovТолько полный дебилизм разработчика может
заставить это тормозить.

зависание OIT с распуханием индексов неактуальными записями?
отключение сборки мусора навечно ?
...
Рейтинг: 0 / 0
18.04.2016, 15:00
    #39218220
NightWizard
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
AriochNightWizard
Код: plsql
1.
i_timestamp numeric(18,0)



А зачем Int64, при аличии родного timestamp ?

http://firebirdsql.su/doku.php?id=tipy_dannyx

Ну, предполагая, что у вас третий диалект включён, а то и float получите...

http://wm-help.net/lib/b/book/4054355128/189

Диалект 3. Timestamp не подходит, так как точность до миллисекунд нужна.
...
Рейтинг: 0 / 0
18.04.2016, 15:02
    #39218222
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
NightWizardТут все ок:

PLAN (TABLE1 ORDER IDX_TABLE1 INDEX (IDX_TABLE1))
Что об этом индексе говорит "gstat -i"?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.04.2016, 15:03
    #39218223
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
NightWizardДиалект 3. Timestamp не подходит, так как точность до миллисекунд нужна.

Точность timestamp - одна десятая миллисекунды. Чисто для информации.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.04.2016, 15:09
    #39218228
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
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
...
Рейтинг: 0 / 0
18.04.2016, 15:11
    #39218233
NightWizard
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
Arioch,

Да, тут недоглядел. Но я пробовал менять и на timestamp - от этого быстрее оно не заработало.
...
Рейтинг: 0 / 0
18.04.2016, 15:14
    #39218243
NightWizard
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
Dimitry SibiryakovNightWizardТут все ок:

PLAN (TABLE1 ORDER IDX_TABLE1 INDEX (IDX_TABLE1))
Что об этом индексе говорит "gstat -i"?


Блин, на сервере, где это тестировал gstat'а нет, как и увы gbak'а. Разберусь с этим вопросом.
...
Рейтинг: 0 / 0
18.04.2016, 15:14
    #39218245
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
NightWizardТут все ок:

Код: plsql
1.
PLAN (TABLE1 ORDER IDX_TABLE1 INDEX (IDX_TABLE1))



я бы не был столь оптимистичен
вполне возможно что
SORT был бы лучше чем ORDER
...
Рейтинг: 0 / 0
18.04.2016, 15:15
    #39218248
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
NightWizard,

проверьте, что у вас не залипла Oldest Interesting Transaction
http://www.firebirdsql.org/manual/gstat-example-header.html

и что достаточно часто проходит сборка мусора ( sweep interval )

иначе у вас индексы должны распухать старыми записями и в пределе будет всё более похоже на чтение таблицы без индексов вообще
...
Рейтинг: 0 / 0
18.04.2016, 15:18
    #39218255
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
Hello, Arioch!
You wrote on 18 апреля 2016 г. 15:17:41:

Arioch> проверьте, что у вас не залипла
у него gfix-а нету, как и gstat-а
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.04.2016, 15:21
    #39218260
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
А вот интересно, предположим залипание OIT

как поведет себя embedded сервер, когда он OIT "подвинет" - при выключении приложения ( и соотв. смерти транзакции ), или при следующем запуске?

nbackup на embedded натравить едва ли получится...

стало быть проверить залипание OIT в процессе работы embedded-сервера можно только "изнутри приложения", внешние утилиты просто не получат доступ к файлу БД ?

или gstat всё же можно натравить по NFS/SMB на файл БД, открытой на другой машине встроенным сервером?
Хотя бы заголовок БД считать, если не индексы?
...
Рейтинг: 0 / 0
18.04.2016, 15:23
    #39218264
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
Мимопроходящий,

ну значит или прoверять через API изнутри программы, или жёстко отстреливать программу на лету не давая записать в файл исправленный OIT (и все остальные кэши, ага) и потом копировать полуживой файл БД для вскрытия
...
Рейтинг: 0 / 0
18.04.2016, 15:23
    #39218266
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
NightWizard gstat'а нет, как и увы gbak'а

Весело вам - живете как на пороховой бочке.

P.S. Путь джедая-камикадзе - особенно труден.
...
Рейтинг: 0 / 0
18.04.2016, 15:23
    #39218267
NightWizard
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
gfix как раз есть.
Счас посмотрю, подумаю.
...
Рейтинг: 0 / 0
18.04.2016, 15:24
    #39218269
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестройка индексов в Firebird
DarkMaster,

а толку с gbak'a на embedded 2.1 ?
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Перестройка индексов в Firebird / 25 сообщений из 142, страница 1 из 6
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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