Access Violation, некорректное выполнение запросов или вызовов API, ошибки утилит командной строки, в общем все, что вам мешает работать
Модераторы: kdv, dimitr
-
_so_
- Сообщения: 144
- Зарегистрирован: 04 ноя 2004, 22:17
Сообщение
_so_ » 15 апр 2005, 10:58
Решился я все таки запустить IB7.5 на серваке в своей фирме (отчасти чтобы дать клиентам рекомендации) локально уже тестирую с января и не каких проблем не использовал. На нашем серваке и нагрузка-то небольшая ну максимум пользователей 25.
Код: Выделить всё
CONSBASE (Server) Wed Apr 13 09:01:15 2005
Server: setting SWEEP_QUANTUM to 250, USER_QUANTUM to 1000,
SWEEP_YIELD_TIME to 1 ms, and MAX_THREADS to 1000000
SQL_COMPILER_RECURSION to 2000
CONSBASE (Client) Wed Apr 13 09:01:16 2005
Guardian starting: F:\IB75\bin\ibserver.exe
CONSBASE (Client) Thu Apr 14 16:01:54 2005
INET/inet_error: read errno = 10053 client host = UNKNOWN connection name = localhost user name = UNKNOWN
CONSBASE (Client) Thu Apr 14 16:26:42 2005
REMOTE INTERFACE/gds__detach: Unsuccessful detach from database.
Uncommitted work may have been lost
К даному времни он уже сожрал 600 Мб памяти.
Через IBConsole монитор показал что больше всего сожрал память на:
TRA: Transaction Manager 554 814 КВ
Может для него что-нибудь нужно делать в настройках дополнительно или еще чего-нибудь.
При использовании 7.1 SP2 этого не было. Были утечки памяти в ХП конешно. Но блил они написали что их исправили.
Наверное придется откатываться.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 15 апр 2005, 22:48
IBAnalyst. смотреть, что там с транзакциями. Небось, CommitRetaining пользуете?
-
_so_
- Сообщения: 144
- Зарегистрирован: 04 ноя 2004, 22:17
Сообщение
_so_ » 16 апр 2005, 09:41
CommitRetaining пользуем. Но потранзакциям смотрел вроде ничего страшного не увидел. В понедельник получу статистику.
-
_so_
- Сообщения: 144
- Зарегистрирован: 04 ноя 2004, 22:17
Сообщение
_so_ » 18 апр 2005, 16:25
Параметр Значение
Дата создания 13.04.2005
Дата получения статистики 18.04.2005
Page size 16384
Forced Write OFF
Диалект 1
OnDiskStructure 11.2
Sweep interval 20000
Oldest transaction 22227
Oldest snapshot 24344
Oldest active 24344
Next transaction 27171
Sweep gap (active - oldest) 2117
Размер TIP для Snapshot 4944 транзакций, 17 килобайт
Active transactions 2827, 62% от ежедневных
Транзакций в день 4528, за 6 дней
Процент версий данных 0.05% - записей: 218 mb, версий: 0 mb, страниц 343 mb
Вот статистика.
Я не помню по чему когда-то перешли на CommitRetaining.
Это было когда использовали толь Ib5.5 или IB 5.6 или Ib6.0 (точно не помню) и там была проблема если очень часто открывать закрывать транзакции (легкие), то текли ресурсы по ниткам. Решение прогблемы было перейти на CommitRetaining.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 18 апр 2005, 17:05
перешли на CommitRetaining.
Это было когда использовали толь Ib5.5 или IB 5.6 или Ib6.0 (точно не помню) и там была проблема если очень часто открывать закрывать транзакции
гм. не помню таких проблем. тем более что вы-то сейчас 7.5 пользуете. По статистике IBA подозрительное только вот:
Active transactions 2827, 62% от ежедневных
Транзакций в день 4528, за 6 дней
похоже на ваш CommitRetaining. Транзакции очень длинные, накапливается дикое количество savepoints. Точнее можно посмотреть только в IBPerfMon. Кстати, меня несколько удивляет, что люди никак не могут истолковать его показания (данные врем. системных таблиц).
Такое впечатление, что придется еще один вариант IBAnalyst писать специально для 7.1/7.5.
то текли ресурсы по ниткам
в смысле?
-
_so_
- Сообщения: 144
- Зарегистрирован: 04 ноя 2004, 22:17
Сообщение
_so_ » 18 апр 2005, 19:13
.
Транзакции очень длинные, накапливается дикое количество savepoints
Не понял. savepoints не используется.
в смысле?
Количество ниток используемых IB увеличалось постояно и IB их не отдавал. А потом система начинала безбожно тормозить.
На каких задачах это точно проявлялось не помню (это было лет 6 назад). И тогда за работу с БД я не отвечал.
Уйти CommitRetaining можно попробовать. Завтра займусь.
Но от длиных транзаций на чтение не избавишься. Человек открыл запрос прокачал часть данных и ушел гулять
-
Merlin
- Динозавр IB/FB
- Сообщения: 1502
- Зарегистрирован: 27 окт 2004, 11:44
Сообщение
Merlin » 18 апр 2005, 19:25
_so_ писал(а):.
Транзакции очень длинные, накапливается дикое количество savepoints
Не понял. savepoints не используется.
Сервер тебя не спрашивает, как ему их использовать

А явное управление ими в последних версиях - просто вытянутая наружу рукоятка к низкоуровневому механизму, который внутри работал с рождества Джимова. Атомарность оператора, транзакции, конструкции when, suspend - всё они, родимые, savepoints. А поскольку retaining сохраняет контекст транзакции, то и их за собой тянет.
_so_ писал(а):
Но от длиных транзаций на чтение не избавишься. Человек открыл запрос прокачал часть данных и ушел гулять
А read_commited read транзакции на что нам дадены? Вот для этого самого и дадены. И никаких ресурсов за собой не тянут.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 18 апр 2005, 19:27
на тему длинных транзакций - если у вас там ВСЕГО за сутки 4 тысячи транзакций, а oldest active на 2 тыщи меньше Next, то IBA об этом и говорит - что есть какая то длинная с точки зрения данных цифр транзакция (или несколько). Длинные там они или не длинные в другом понимании - это дело десятое.
Количество ниток используемых IB увеличалось постояно и IB их не отдавал.
вот не помню такого, в упор. если только своими хитрыми udf не баловались. IB суперсервер вообще всегда кол-во ниток уменьшал (с момента пика числа коннектов).
Уйти CommitRetaining можно попробовать.
я пишу про мониторинг в IBPerfmon или ibconsole. То есть, мы его смотреть не будем, сразу рубанем код топором?
Но от длиных транзаций на чтение не избавишься. Человек открыл запрос прокачал часть данных и ушел гулять
я из лесу вышел.... про read read_committed не в курсе?
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 18 апр 2005, 19:33
и еще. я лично наблюдал систему с 7.1 SP2 вживую которая 4 тыщи активных транзакций нагенерила за 1.5 часа двумя клиентскими местами. И серверу хоть бы что (да в общем я и сам как то в порядке эксперимента в приложении открыл 5 тысяч транзакций, потом надоело). Там к концу дня просто вылет был с клиента по нехватке хэндлов. Поэтому чем там у вас 2000 транзакций 600 мег отъедают - это надо разбираться, дотошно. через tmp$transactions и др.
-
_so_
- Сообщения: 144
- Зарегистрирован: 04 ноя 2004, 22:17
Сообщение
_so_ » 18 апр 2005, 23:40
Блин что мне про 7.1 sp2 говорить, на нем этой проблемы не было.
На нем текли хранимые процедуры это факт. В 7.5 обещали исправить, но видно добавили что-то новое. Я конечно сомневаюсь, что поможет, если уйти от CommitRetaining.
-
_so_
- Сообщения: 144
- Зарегистрирован: 04 ноя 2004, 22:17
Сообщение
_so_ » 18 апр 2005, 23:48
Насчет read_commited все я в курсе. раньше он и использавлся. Я не могу знать и не помню почему бывший работник перешел на CommitRetaining.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 19 апр 2005, 10:49
в таком ключе дальше продолжать бессмысленно. Если хочется понять проблему, то надо мониторить сервер, включая tmp$heaps. Если не хочется - откатываемся молча на 7.1 SP2.
-
_so_
- Сообщения: 144
- Зарегистрирован: 04 ноя 2004, 22:17
Сообщение
_so_ » 19 апр 2005, 13:25
Согласен. Попробую выяснить на каких пользователях течет и что они делают.
Проверил насчет утечек памятив хранимых проц. По моему стало еще хуже.
Код: Выделить всё
Type Pools Total Free Extend amt. Free stack nodes Free bitmap buckets Free bitmap segments
CCH: Cache mgr/page buffers 1 33842176 1136 16384 0 0 0
DYN: Internal DDL 27 114688 22960 1024 198 21 49
IRQ: Int. metadata queries 55 279552 57200 1024 413 58 98
PRC: Procedure requests 520 482694144 53098800 1024 7450 -23223 2679658
PRM: Metadata structures 1 1228800 75392 16384 5 4 16
REQ: Compiled user queries 21 147456 20864 1024 325 32 39
SQL: SQL interface 9 56320 4664 1024 0 0 0
SRT: Sort memory 2 2097000 0 0 0 0 0
TRA: Transaction manager 3 1418240 100532 1024 8 18 96
TRG: Trigger requests 92 326656 113684 1024 169 70 77
522205032 53495232
Это за три минуиы работы одним конектом. После того как за 10 минут сожрал 1 Гб памяти срубил. Ждать освободит или нет не смог все встало.
Алгоритм простой создается хранимая процедура в ней делается один запрос агрегация и вставляются данные в другую таблицу. Потом ХП удаляется. И алгоритм повторяется многократно для разных видов агрегаций. Если без хранимых процедур, то все живет замечательно, как и с ними до 7.1.
Так-что в ReleaseNotes.pdf либо наврали либо они исправили, но не то (А я им поверил).
С тем поразбираюсь еще денек, не получиться откачусь.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 19 апр 2005, 13:31
пример для воспроизведения на support кинь, если можешь изготовить.
-
Merlin
- Динозавр IB/FB
- Сообщения: 1502
- Зарегистрирован: 27 окт 2004, 11:44
Сообщение
Merlin » 19 апр 2005, 13:43
_so_ писал(а):
Алгоритм простой создается хранимая процедура в ней делается один запрос агрегация и вставляются данные в другую таблицу. Потом ХП удаляется. И алгоритм повторяется многократно для разных видов агрегаций.
Для полноты картины надо бы указать моменты старта транзакций и коммитов. И hard они или или всё-таки retaining. А то сразу возникают грубые подозрения

-
Ivan_Pisarevsky
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
Сообщение
Ivan_Pisarevsky » 19 апр 2005, 14:00
Алгоритм простой создается хранимая процедура в ней делается один запрос агрегация и вставляются данные в другую таблицу. Потом ХП удаляется. И алгоритм повторяется многократно для разных видов агрегаций.
Это в процессе работы постоянно передергиваются метаданные? Ну и гемор... На параметрах не получается сделать?
-
_so_
- Сообщения: 144
- Зарегистрирован: 04 ноя 2004, 22:17
Сообщение
_so_ » 19 апр 2005, 15:56
На параметрах не реально. Слишком разные запросы агрегации.
-
Ivan_Pisarevsky
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
Сообщение
Ivan_Pisarevsky » 19 апр 2005, 16:44
Как насчет вопроса Мерлина про транзакции, после каждого телодвижения с метаданными должон быть коммит. Он есть?
-
_so_
- Сообщения: 144
- Зарегистрирован: 04 ноя 2004, 22:17
Сообщение
_so_ » 19 апр 2005, 16:57
Есть. Но CommitRetaining
-
Merlin
- Динозавр IB/FB
- Сообщения: 1502
- Зарегистрирован: 27 окт 2004, 11:44
Сообщение
Merlin » 19 апр 2005, 17:38
_so_ писал(а):Есть. Но CommitRetaining
Честно говоря, даже не знаю, как оператор DDL ведёт себя с этим извратом. Они ведь на самом деле выполняются на коммите, а до того просто параметры для выполнения пишутся в системные таблицы. А тут - изменения вроде бы и подтверждены, но весь контекст с областью видимого должен сохраниться... Эту хрень придумали, насколько я понимаю, для обеспечения автокоммитного режима BDE, чтоб открытые датасеты не схлопывались. То есть, для упрощения программирования на клиенте ввели полухак в сервер. А потом естественным образом, вместо акцентирования вовремя внимания на кеширующих датасетах типа TClientDataSet (где это допустимо по условиям применения) и внедрения второй транзакции в обычный датасет, потащили этот изврат во все остальные либы. Так что ну его нафик, есть большая вероятность, что всё станет на место если перейдёшь на хард коммит.