Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблемы с таблицей после добавления FK / 25 сообщений из 34, страница 1 из 2
29.09.2016, 06:20
    #39317411
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
Добрый день
Помогите объяснить причину возникновения такой проблемы:
В программе есть такой функционал - выделение классификатора товарных карточек для дальнейших действий над ними. В базе это таблица SEL_CLASSIF
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 CREATE TABLE SEL_CLASSIF (
    ID_USER       T_ID NOT NULL /* T_ID = INTEGER NOT NULL */,
    KIND          T_ID NOT NULL /* T_ID = INTEGER NOT NULL */,
    CLASSIF       T_CLASSIF NOT NULL /* T_CLASSIF = INTEGER NOT NULL */,
    CLASSIF_TYPE  T_CLASSIF_TYPE NOT NULL /* T_CLASSIF_TYPE = INTEGER NOT NULL */
);




/******************************************************************************/
/***                              Primary keys                              ***/
/******************************************************************************/

ALTER TABLE SEL_CLASSIF ADD CONSTRAINT PK_SEL_CLASSIF PRIMARY KEY (ID_USER, KIND, CLASSIF);


Добавили FK:
Код: plaintext
1.
2.
ALTER TABLE SEL_CLASSIF ADD CONSTRAINT FK_SEL_CLASSIF_CLASSIF FOREIGN KEY (CLASSIF) REFERENCES CLASSIF (ID_CLASSIF) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE SEL_CLASSIF ADD CONSTRAINT FK_SEL_CLASSIF_KIND FOREIGN KEY (KIND) REFERENCES SEL_CLASSIF_KIND (ID) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE SEL_CLASSIF ADD CONSTRAINT FK_SEL_CLASSIF_USER FOREIGN KEY (ID_USER) REFERENCES USERS (ID_USER) ON DELETE CASCADE ON UPDATE CASCADE;

После чего программа стала зависать на выделении классификатора в пиковых нагрузка (100 магазинов в одно время начинают печатать товары с измененными ценами по всему классификатора) + IBExpert зависает при выборке из этой таблице.
Таблица SEL_CLASSIF 2 млн. строк, CLASSIF - 6000, SEL_CLASSIF_KIND - 21,USERS - 2725. Может ли наличие FK вызывать такую проблему и почему? Разработчик бьет себя в грудь, что такой проблемы не может быть, а я наблюдаю другое.
...
Рейтинг: 0 / 0
29.09.2016, 06:23
    #39317413
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
Уточнение
до добавления FK таблица sel_classif была 24 млн строк
...
Рейтинг: 0 / 0
29.09.2016, 07:57
    #39317444
pastor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
Gallemar,

глубину индекса посмотри. если 4 - то аллес.
нужно увеличить размер страницы до максимума, если раньше этого не сделал.
...
Рейтинг: 0 / 0
29.09.2016, 07:59
    #39317445
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
pastorGallemar,

глубину индекса посмотри. если 4 - то аллес.
нужно увеличить размер страницы до максимума, если раньше этого не сделал.
Она уже 16.
...
Рейтинг: 0 / 0
29.09.2016, 09:11
    #39317475
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
GallemarОна уже 16.

как так получилось? какой размер страницы? Количество записей вроде не очень большое.

GallemarПосле чего программа стала зависать на выделении классификатора в пиковых нагрузка

отсюда не видно как оно делается. Давай запросы и статистику
...
Рейтинг: 0 / 0
29.09.2016, 09:23
    #39317484
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
Симонов Денис, размер страницы 16.


SEL_CLASSIF (1320)

Index FK_SEL_CLASSIF_CLASSIF (3)
Depth: 2, leaf buckets: 1089, nodes: 2754638
Average data length: 0.00, total dup: 2750682, max dup: 768
Fill distribution:
0 - 19% = 0
20 - 39% = 0
40 - 59% = 95
60 - 79% = 430
80 - 99% = 564
...
Рейтинг: 0 / 0
29.09.2016, 09:26
    #39317488
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
Gallemar,

а ну тогда ладно, а то я уже было подумал что глубина индекса. Таки жду пояснений что там тормозит и при какой конкретно выборке зависает IBE
...
Рейтинг: 0 / 0
29.09.2016, 09:27
    #39317489
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
Симонов ДенисGallemar,

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

Таки просто грид открываю и.... всё. IBE в задумчивости.
...
Рейтинг: 0 / 0
29.09.2016, 09:29
    #39317492
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
Причем такое только в моменты,когда все дергают этот функционал. Потом вполне себе работает.
...
Рейтинг: 0 / 0
29.09.2016, 09:32
    #39317497
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
Gallemar,

а это ты просто просмотр данных в таблице делаешь? Попробуй простой запрос, IBE вроде для просмотра таблиц неявно дописывает ORDER BY <PK>, что может сыграть злую шутку.
...
Рейтинг: 0 / 0
29.09.2016, 09:33
    #39317501
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
Gallemar,

у тебя там случайно этот механизм транзакцию с резервированием таблиц не использует?
...
Рейтинг: 0 / 0
29.09.2016, 09:35
    #39317504
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
Симонов ДенисGallemar,
IBE вроде для просмотра таблиц неявно дописывает ORDER BY <PK>, что может сыграть злую шутку.
На...я? зачем???? У меня по несколько млн строк в таблицах
...
Рейтинг: 0 / 0
29.09.2016, 09:36
    #39317505
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
Симонов ДенисGallemar,

у тебя там случайно этот механизм транзакцию с резервированием таблиц не использует?
Хм. Не знаю. У меня только база есть, не моя программа.
...
Рейтинг: 0 / 0
29.09.2016, 09:38
    #39317508
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
GallemarТаблица SEL_CLASSIF 2 млн. строк
Gallemarдо добавления FK таблица sel_classif была 24 млн строк
Т.е. 22 млн удалили ? И теперь оно с кучей индексов пытается собрать мусор ?
...
Рейтинг: 0 / 0
29.09.2016, 09:41
    #39317511
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
hvladGallemarТаблица SEL_CLASSIF 2 млн. строк
Gallemarдо добавления FK таблица sel_classif была 24 млн строк
Т.е. 22 млн удалили ? И теперь оно с кучей индексов пытается собрать мусор ?
Удаляли две недели назад, к тому же у меня каждый день делается gbak, он же должен был в любом случае мусор собрать.
...
Рейтинг: 0 / 0
29.09.2016, 09:43
    #39317516
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
GallemarСимонов ДенисGallemar,
IBE вроде для просмотра таблиц неявно дописывает ORDER BY <PK>, что может сыграть злую шутку.
На...я? зачем???? У меня по несколько млн строк в таблицах

когда PK является простым автоинкрементом это не страшно. Кстати где-то это можно отключить.
Проверь трейсом. Я сейчас глянул у себя и увидел, что именно так и происходит.
...
Рейтинг: 0 / 0
29.09.2016, 09:47
    #39317522
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
Симонов Денис
когда PK является простым автоинкрементом это не страшно.
А если как у меня - ПК составной из трех полей?
...
Рейтинг: 0 / 0
29.09.2016, 09:49
    #39317525
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
Gallemar,

я видел какой у тебя ПК. На IBE такой случай не проверял ибо в моей базе составные ПК отсутствуют совсем. Но ты же можешь проверить трейсом или даже мониторингом что делается в твоём случае.
...
Рейтинг: 0 / 0
29.09.2016, 09:53
    #39317527
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
Симонов Денис, сейчас посмотрю. А вообще такие зависания только в определенное время происходят. В другое - проблем нет.
Сейчас выполнил запрос и пошарился по гриду в IBE
select * from sel_classif where id_user = 80

План
PLAN (SEL_CLASSIF INDEX (PK_SEL_CLASSIF))

------ Информация о производительности ------
Время подготовки запроса = 16ms
Время выполнения запроса = 109ms
Среднее время на получение одной записи = 0,03 ms
Current memory = 27 646 816
Max memory = 44 539 272
Memory buffers = 1 500
Reads from disk to cache = 4
Writes from cache to disk = 0
Чтений из кэша = 7 943
...
Рейтинг: 0 / 0
29.09.2016, 09:55
    #39317533
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
GallemarУдаляли две недели назад, к тому же у меня каждый день делается gbak, он же должен был в любом случае мусор собрать.У тебя gbak мусор собирает ??? Не свип ???

1. gstat -t SEL_CLASSI -r даст ответ на вопрос о мусоре в этой таблице
2. статистика выполнения любого тормозящего селекта тоже даст ответ на вопрос о мусоре в этой таблице

Далее. Что было сначала - массовое удаление или создание ФК ?
...
Рейтинг: 0 / 0
29.09.2016, 10:06
    #39317545
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
hvladGallemarУдаляли две недели назад, к тому же у меня каждый день делается gbak, он же должен был в любом случае мусор собрать.У тебя gbak мусор собирает ??? Не свип ???

1. gstat -t SEL_CLASSI -r даст ответ на вопрос о мусоре в этой таблице
2. статистика выполнения любого тормозящего селекта тоже даст ответ на вопрос о мусоре в этой таблице

Далее. Что было сначала - массовое удаление или создание ФК ?

Каждый день sweep, set statistic, nbackup, gbak. Так что мусор точно собран.
1. На текущий момент

Analyzing database pages ...
SEL_CLASSIF (1320)
Primary pointer page: 2853, Index root page: 2854
Average record length: 1.54, total records: 2745434
Average version length: 16.97, total versions: 2495629, max versions: 1
Data pages: 9961, data page slots: 10267, average fill: 83%
Fill distribution:
0 - 19% = 167
20 - 39% = 131
40 - 59% = 527
60 - 79% = 407
80 - 99% = 8729

Index FK_SEL_CLASSIF_CLASSIF (3)
Depth: 2, leaf buckets: 1089, nodes: 2745442
Average data length: 0.00, total dup: 2741486, max dup: 764
Fill distribution:
0 - 19% = 0
20 - 39% = 0
40 - 59% = 95
60 - 79% = 442
80 - 99% = 552

Index PK_SEL_CLASSIF (0)
Depth: 3, leaf buckets: 2041, nodes: 2745434
Average data length: 1.05, total dup: 203639, max dup: 3
Fill distribution:
0 - 19% = 2
20 - 39% = 550
40 - 59% = 1049
60 - 79% = 251
80 - 99% = 189
2. Тормозящий селект только завтра смогу сделать.
Сначала удаление, потом создание FK
...
Рейтинг: 0 / 0
29.09.2016, 10:39
    #39317584
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
Gallemar,

ага, мусора нет, версий нет ....
total records: 2745434
total versions: 2495629, max versions: 1
...
Рейтинг: 0 / 0
29.09.2016, 10:41
    #39317592
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
kdv,

ну, не 22 млн :)
...
Рейтинг: 0 / 0
29.09.2016, 10:47
    #39317602
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
kdvGallemar,

ага, мусора нет, версий нет ....
total records: 2745434
total versions: 2495629, max versions: 1
Ну это уже после того как пользователи поработали
Вообще у нас на пике 100 с лишним усеров, каждый в таблицу вставляет по 4000 тысячи строк за раз. И всё это почти в одно время.
Просто без FK такого не было.
...
Рейтинг: 0 / 0
29.09.2016, 11:11
    #39317629
afgm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с таблицей после добавления FK
GallemarКаждый день sweep, set statistic, nbackup, gbak. Так что мусор точно собран.
nbackup разве мусор умеет собирать?
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблемы с таблицей после добавления FK / 25 сообщений из 34, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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