|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
При высокочастотной ставки записей в базе имеет ли смысл кроме коннектов держать еще открытые транзакции и может препаренные запросы в каждом флаконе? Инсерты однородные, редко может понадобится еще дополнителные ставки. Коммит(Рет) нужно после каждой. Если при работе сервиса оборвалось связь с FB, можно как-то ловить это в реале, кроме фэйла уже при вызове isc_start_transaction итп? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 20:31 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin MarcociПри высокочастотной ставки записей в базе имеет ли смысл кроме коннектов держать еще открытые транзакции и может препаренные запросы в каждом флаконе? Инсерты однородные, редко может понадобится еще дополнителные ставки. Коммит(Рет) нужно после каждой. Dorin Marcoci, всё зависит от характера хранящихся данных. Телеметрия? Dorin MarcociЕсли при работе сервиса оборвалось связь с FB, можно как-то ловить это в реале, кроме фэйла уже при вызове isc_start_transaction итп? Для этого вам понадобиться нечто большее, чем просто "клиент" и "сервер". Возможно, придется написать некую промежуточную службу, работающую на том же сервере, что и Firebird, через которую будут осуществляться вставки данных и контролироваться транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 20:41 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin Marcoci> держать еще открытые транзакции и может Dorin Marcoci> препаренные запросы в каждом флаконе? Dorin Marcoci> Коммит(Рет) нужно после каждой. Коммит и открытые транзакции плохо совместимы. Хотя с retaining-ом можно, но этот вопрос уже столько раз обсуждался, просто почитай. А вот отпрепаренные запросы легко переживают коммит, их повторно препарить не нужно, только параметры меняй и повторно Exec-Commit. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 21:09 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin MarcociПри высокочастотной ставки записей в базе имеет ли смысл кроме коннектов держать еще открытые транзакции и может препаренные запросы в каждом флаконе? Инсерты однородные, редко может понадобится еще дополнителные ставки. Коммит(Рет) нужно после каждой. Если при работе сервиса оборвалось связь с FB, можно как-то ловить это в реале, кроме фэйла уже при вызове isc_start_transaction итп? 1. Подготовленные запросы - имхо, держать хорошо. Но вы не сказали, сколько у вас клиентов параллельно пишут в базу. 2. Состояние сервера можно контролировать периодическим "пинг-понгом" простых запросов в фоновой нити. 3. Есть библиотечка ZeroMQ , которая позволяет несложным образом реализовать буферизацию сообщений как на приеме, так и на передаче (и задавать объем буферов), реализовано автоматическое восстановление соединения при обрыве и т.п. Контроль за состоянием коннекта выполняется методом посылки - отправки служебных сообщений (когда нет других сообщений) в отдельной нити. Организуйте работу через такую прослойку - будет проще обеспечить работу FB под непрерывной нагрузкой, особенно если входной поток данных неравномерный, и источник данных не может долго ждать, пока сервер завершит операцию вставки. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 21:24 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin MarcociКоммит(Рет) нужно после каждой. Дисковую систему расширяй. Она сляжет первой. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 22:20 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin MarcociКоммит(Рет) нужно после каждой. commit retaining не нужен никогда. пул - сколько угодно. пул транзакций - имеет смысл только для read read_committed rec_version. Остальные транзакции д.б. короткими. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 22:37 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
kdvcommit retaining не нужен никогда. Вообще-то лично у меня ему применение нашлось. Но это скорее экзотика. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 22:42 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, опять же, я следую принципу - если человек не понимает, то лучше ему сказать, что пользоваться фичей Х нельзя, совсем. Если ему интересно, почему "нельзя", он разберется сам (или найдет статьи на ibase.ru о том, почему retaining - не очень хорошо). Если же ему похер, то он и спрашивать не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 22:47 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
kdvон разберется сам Если бы он был в состоянии разобраться сам, то не валил бы в одну мутную кучу пул коннектов, транзакции и препарированные запросы. Ибо это всё же перпендикулярные вещи. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 22:56 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
kdv> опять же, я следую принципу Вот и признался. А я тебе давно говорил, что этот принцип неправильный и ущербный. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2015, 23:50 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Спасибо всем кто откликнулись и изложили мысли. Оставил вопрос вчера к концу рабочего дня и только сегодня взглянул. Данные приходят по сетке (tcp/udp) с каждого девйса где-то раз в 30сек, практически равномерно/рандомно распределенные. Принимаю пакеты серверами Indy (TIdTcpServer, TIdUdpServer). Выделяется поток где обрабатывается каждый входящий пакет. Хотелсь бы обслуживание хотяб 1000 клиентов на одном ноде (это примерно 33 ставок в секунду). Щас работает, но нагрузка маленькая. Есть пул коннектов. При обработке стартует транзакция, запрос ставки и коммит. Вот и пришла и идея повышения марсштбируемости путем добавения в пула еще и по долгой ридкоммитед транзакции и препаренного запроса для каждого коннекта. И после обработки пакета делать коммит ритэйн. Плохо ли? Можно в принципе раз там на 1000 ритэйн коммитов делать и коммит и заново стартовать транзакцию и препарить запрос. Про ZeroMQ, спасибо учту, но пока думаю если в случае перенакопления можно необработанные пакеты в локальном стэке держать пока все потоки-обработчики заняты. Но лимит на количество потоках пока нету, создаются сколько надо. Или держать всегда готовые потоки-обработчики как workerы в apache? Насчет обрыва связи с ФБ сервером, скорее в продакшине будет локально, но хотелось обработать и потеря коннекта, когда было отключения сокета, попытатся восстановить связь. Есть в fbclient-е такой колбэк? Щас могу ловить при старте транзакции/запрса по коду ошибки статуса. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 18:18 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin MarcociВот и пришла и идея повышения марсштбируемости путем добавения в пула еще и по долгой ридкоммитед транзакции и препаренного запроса для каждого коннекта. И после обработки пакета делать коммит ритэйн. Плохо ли? Можно в принципе раз там на 1000 ритэйн коммитов делать и коммит и заново стартовать транзакцию и препарить запрос. Идея бредовая. Во-первых, потому что препарированные запросы не привязаны к транзакции и коммит их не уничтожает. Во-вторых, потому что старт транзакции (в отличии от установки коннекта) - операция лёгкая. Dorin MarcociЩас могу ловить при старте транзакции/запрса по коду ошибки статуса. А следует - при каждом вызове API. Ибо соединение может разорваться когда угодно. PS: И сдаётся мне, что СУБД для задачи таки выбрана неверно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 18:29 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
препарированные запросы не привязаны к транзакции и коммит их не уничтожает хм... вот спасибо. а я думал что они дестроится... СУБД для задачи таки выбрана неверно на чем знаем, на том и пишем :) Дмитрий вроди делал тесты: http://www.ibase.ru/devinfo/instest.htm Результаты неплохие. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 18:57 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin Marcoci И после обработки пакета делать коммит ритэйн. зачем тебе вообще нужен commitRetaining??? и, как уже сказал DS, препарированный запрос может выполняться в любой транзакции, prepare к транзакции не привязан. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 18:58 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
kdvDorin Marcoci И после обработки пакета делать коммит ритэйн. зачем тебе вообще нужен commitRetaining??? ... Да он просто глумится... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 19:05 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin MarcociДмитрий вроди делал тесты: http://www.ibase.ru/devinfo/instest.htm Результаты неплохие. Да с вашими жалкими 33 записями в секунду вы в принципе близко к лимиту быстродействия не подойдёте. Сомнение вызывает что вы вообще собираетесь потом делать с напиханными в БД сырыми данными. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 19:09 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin MarcociДмитрий вроди делал тесты: http://www.ibase.ru/devinfo/instest.htm Результаты неплохие. этому тесту уже 17 лет. Ковязин для семинара в июне 2015 делал тест вставки, там в таблицу без индексов 1млн записей вставляется 2.6 секунд, в таблицу с числовым ПК - 7.6 секунд, в таблицу с пк varchar 35 секунд. Таблоид тоже недавно делал тест параллельной вставки для ФБ 3.0, там 1млн записей в таблицу с числовым ПК вставляется 24 секунды. То есть, в худшем случае это 20 тысяч записей в секунду. Без всяких пулов. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 19:18 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
kdvТо есть, в худшем случае это 20 тысяч записей в секунду. Без всяких пулов. Вы просто не добрались до худшего варианта с отдельной транзакцией на каждую запись. Я же говорил, что дисковая подсистема ляжет первой... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 19:22 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin MarcociНо лимит на количество потоках пока нету, создаются сколько надо. еще добавлю. что по тестам того же Таблоида, никакого смысла в распараллеливании вставки в одну таблицу по разным коннектам нет, совершенно. Более того, производительность вставки, идентичную ОДНОМУ коннекту, можно получить в нескольких коннектах только на суперсервере. На классике и суперклассике при вставке будет борьба за блокирование страницы, и производительность будет по любому хуже (причем чем больше страница, тем хуже). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 19:26 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovВы просто не добрались до худшего варианта с отдельной транзакцией на каждую запись. такой задачи не было :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2015, 19:27 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
kdvзачем тебе вообще нужен commitRetaining??? Дмитрий, я думал что можно выиграть в производительности если делать только CommitRetaining вместо Commit;Start; при обработке пакета. Буду переделывать на пул коннекшинов + препаренные запросы + кототкиу транзакции: старт/ставка/коммит. Так лучше? kdvеще добавлю. что по тестам того же Таблоида, никакого смысла в распараллеливании вставки в одну таблицу по разным коннектам нет, совершенно. Тогда лучше наверное в общий стэк копить пакеты, и раз в секунду инсертить накопленные... запутался уже... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 12:22 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin Marcociя думал что можно выиграть в производительности если делать только CommitRetaining вместо Commit; интересно, откуда появилась мысль про "производительность" commitretaining? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 12:24 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Hello, Kdv! You wrote on 21 декабря 2015 г. 12:29:38: Kdv> интересно, откуда появилась мысль про "производительность" commitretaining? имхо, автор смотрит через кривую призму дельфийских компонентов... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 12:30 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
kdvDorin MarcociНо лимит на количество потоках пока нету, создаются сколько надо. еще добавлю. что по тестам того же Таблоида, никакого смысла в распараллеливании вставки в одну таблицу по разным коннектам нет, совершенно. Более того, производительность вставки, идентичную ОДНОМУ коннекту, можно получить в нескольких коннектах только на суперсервере. На классике и суперклассике при вставке будет борьба за блокирование страницы, и производительность будет по любому хуже (причем чем больше страница, тем хуже). Все вышесказанное имеет смысл только для локального подключения. Если сервер БД - одно, а сервер телеметрии - другое, то смысл распараллеливать есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 12:41 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
kdv"производительность" commitretaining Так будет только фиксация изменений без старта другой транзакции (что я думал непростая операция). Помню Еманов говорил к релизу 2.0 или 2.5 что были сделаны оптимизации по CommitRetaining и что можно держать сколько угодно транзакцию открытой. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 12:42 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
pastorВсе вышесказанное имеет смысл только для локального подключения. Если сервер БД - одно, а сервер телеметрии - другое, то смысл распараллеливать есть. смыслы бывают разными. я не говорил, что "нельзя распараллеливать вставку". Можно, конечно, но по сравнению с 1 коннектом она будет или такая же (суперсервер), или хуже (классик и суперклассик). Просто иногда у людей витают какие-то идеи, не обусловленные практической необходимостью. Dorin MarcociТак будет только фиксация изменений без старта другой транзакции (что я думал непростая операция). retaining - это старт новой транзакции с сохранением "контекста" предыдущей. Нельзя стартовать транзакцию без ее старта. Dorin Marcociбыли сделаны оптимизации по CommitRetaining и что можно держать сколько угодно транзакцию открытой. не припоминаю такого, совсем. На текущий момент, начиная с InterBase 6.0, только один тип транзакции можно держать бесконечно открытой - read read_committed. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 13:05 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin Marcoci, не мог он такого говорить. Commit Retaining был выдуман чтобы не закрывать открытый курсор. Если для вставки не использовать DataSet, то он на фиг не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 13:05 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin MarcociТак будет только фиксация изменений без старта другой транзакции CommitRetaining внутри движка делает коммит + старт новой транзакции. Единственное исключение - если не было изменений, тогда CommitRetaining = no-op. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 13:10 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Понял, спасибо всем! Значит будет чистый коммит. Насчет параметров транзакции, если будут короткие, только ставки, лучше read commited version? или по барабану. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 13:26 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin Marcociтолько ставки, лучше read commited version? или по барабану. похоже, начинается толстый троллинг. read read_committed - читающая транзакция, никакие вставки в ней невозможны (разве что в гтт). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 13:29 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
kdv, может ТС имеет в виду транзакцию: "write\r\nwait\r\nconcurrency\read_committed", чтобы, типа, иметь возможность читать подтвержденные другими транзакциями записи в контексте пишущей транзакции? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 13:36 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
* "write\r\nwait\r\nconcurrency\r\nread_committed" ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 13:37 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin Marcociлучше read commited version? или по барабану. RC может быть лучше по производительности. Или не быть. Но, вероятнее всего, ты на твоей нагрузке разницы не заметишь. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 13:39 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
DBConstructorconcurrency+read_committed" эта комбинация - ахинея. а если вопрос вообще, про изолированность транзакции для вставки - так какая разница??? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 13:40 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
kdv, да, согласен на счет ахинеи! Взаимоисключающие параметры транзакции. Бездумно скопипастил из кода и дописал read_committed. @-\ ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 13:46 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Рустам, анализируя ваши мысли, хотелось уточнить... Гаджимурадов РустамА вот отпрепаренные запросы легко переживают коммит, их повторно препарить не нужно, только параметры меняй и повторно Exec-Commit. - isc_start_transaction - получаем trans_handle - isc_dsql_prepare(trans_handle) - хочет как параметр trans_handle - isc_dsql_execute(trans_handle) - здесь как бы первый раз должно быть ок - isc_commit_transaction - убиваем trans_handle - isc_start_transaction - получаем новый_trans_handle - isc_dsql_execute(новый_trans_handle) - это будет работать, да? Просто я из делфей, почти везде видел UnPrepare при Transaction.Destroy; Щас нашел одну простую лиюбу, переделываю под себя чтоб были живучие препэйры. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 00:40 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin Marcociэто будет работать, да? Да. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 00:47 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin MarcociПросто я из делфей, почти везде видел UnPrepare при Transaction.Destroy; я вижу несколько с другой стороны - из дельфей, на 100 коннектах десятки тысяч prepared-запросов, не привязаных к транзакциям. Привязаных - штук 150. Как-то так. Так что исходники используемых компонент надо проверять. Возможно, что-то вроде IBSQL.Transaction:=nil; как раз вышеописанное и дает. Смотрю TIBTransaction.Destroy - там для привязаных запросов вызывается SQLObjects[i].DoTransactionFree, которая пустышка с вызовом события, а потом RemoveSQLObjects, где тупо убирается owner. Может где-то в недрах базовых классов что-то вызывается, но сильно сомневаюсь, по вышеуказанным причинам (проверить можно, но дельфю не хочу запускать). Достаточно глянуть в mon$statements своей "системы на дельфях", и посмотреть на количество запросов, у которых mon$transaction_id = 0 и у которых > 0. Так что в FB API лезть, как мне кажется, совсем не обязательно. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 02:18 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Тогда, если препэйр не зависит от транзакции лучше бы требовали database_handle вместо transaction_handle в isc_dsql_prepare. Дмитрий, ок, может в TIbTransaction все тип-топ, а вот в найденом либе под лазаруса не торт. Переделываю успешно :) А че не надо в апи лезть, мне интересно, особенно новый ооп в тройке. Часто смотрю что творит Фернандос в интерфэйс паскаля. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 11:36 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin MarcociТогда, если препэйр не зависит от транзакции он зависит. Метаданные при препаре читаются к контексте юзерской транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 11:42 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
dimitr, наверное имелось в виду, что после того, как выполнен prepare в контексте транзакции, подготовленный запрос привязывается к соединению с БД и может выполнятся без подготовки в любой другой транзакции данного соединения. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 12:02 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin Marcociлучше бы требовали database_handle вместо transaction_handle в isc_dsql_prepare. запросу делается prepare в транзакции, а не в воздухе. DBConstructorподготовленный запрос привязывается к соединению с БД и может выполнятся фиг знает, что он имел в виду. кстати, а сейчас это не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 12:20 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
kdvфиг знает, что он имел в виду. кстати, а сейчас это не так? Дмитрий, я лишь уточнил для ТСа как всё в действительности происходит, чтобы он не плавал в теме. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 13:11 |
|
Пул коннектов или что-то еще
|
|||
---|---|---|---|
#18+
Dorin Marcociесли препэйр не зависит от транзакции лучше бы требовали database_handle вместо transaction_handle в isc_dsql_prepare. Хэндл коннекта требует isc_dsql_alloc_stmt(). Этого тебе недостаточно?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 13:26 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1562439]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
others: | 291ms |
total: | 445ms |
0 / 0 |