|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
ТоликmanMrShin, вот за все это огромное спасибо! Так, на всякий случай - в моем варианте физически нельзя получить одну и ту же заявку более чем одному юзеру, это реализовано на уровне схемы БД... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 08:41 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
vmagТак, на всякий случай - в моем варианте физически нельзя получить одну и ту же заявку более чем одному юзеру, это реализовано на уровне схемы БД... Так MrShin пишет про кэши, на уровне схем то все ОК, но если кэш не залился в сеть, то схема ни схема а другой юзер не видит этих данных, или я ошибаюсь? Я попробую сегодня/завтра протестировать твой вариант) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 10:26 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
Толикmanно если кэш не залился в сеть да мне как то эти кэши ... - Запрос на изменение в таблице прямой (захват заявки) - Проверка перед захватом тоже прямо в таблице (кинжальная) имхо должно работать - максимальная плюха которая теоретически может быть это когда все по команде нажмут одновременно кнопку "Взять заявку в обработку!" и все захотят одну и ту же заявку - при этом заявка упадет только кому-то одному, а у других ничего не изменится, только в списке свободных заявок этой заявки уже не будет... но и эту ситуацию можно обыграть - при нажатии кнопки "Взять заявку..." посчитать в начале сколько заявок в работе у этого юзера (в левом списке), а после захвата обновить список и опять посчитать сколько стало, если количество не изменилось, то выдать комментарий - Извини, не успел!... Чем меньше надобности в танцах с бубнами - тем надежнее система... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 11:02 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
vmag- Проверка перед захватом тоже прямо в таблице (кинжальная) Как же, акс ведь из кеша может дернуть эту инфу, я такое наблюдал... а потом он тупо запустит запрос на изменение, который не позарится на внесенные недавно изменения, вот это и генерирует проблему... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 14:26 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
ТоликmanЯ попробую сегодня/завтра протестировать твой вариант) ТоликmanКак же, акс ведь из кеша может дернуть эту инфу, я такое наблюдал... после тестирования, пожалуйста отпишитесь о результате, для меня это тоже важно, до сих пор проблем не было, от 5 до 10 юзеров ни разу не перехлестнулись лет за 10, правда ситуация немного другая, но подход такой же - захваты по признакам сразу из таблиц и сразу в таблицах, а не на базе запросов и в запросах... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 15:44 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
vmagпожалуйста отпишитесь о результате, для меня это тоже важно Сегодня и завтра не выйдет потестить, только в ПН. Сейчас все подготовлю для этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 22:08 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
MrShin, Вопросы появились: Если я выключу транзакции в запросе к одной таблице, чем я рискую? По логике вещей - ничем, верно? Там идет обновление 3-х записей в одной таблице. Риск потери данных из-за выключения компа точно такой же, как и при завершении транзакций, верно? Про 100 милисекунд - как на практике происходит соревнование за доступ к ресурсу? Жесткий диск разве сам не выстраивает очередь? Один юзер получит доступ, а другой получит отказ и повторит попытку только через следующие 100 милисекунд, верно? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2016, 23:53 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
Толикman, Транзакция на один запрос имеет смысл только для того, чтобы быстрее сбросить кэш, так что вам не особо это нужно. Вообще я сам не совсем понял, зачем требуется менять задержку, если таблица СНАЧАЛА блокируется и на чтение и на запись, а уже только потом что-то делается с данными. Задержка и число попыток требуются вообще-то при попытке записи изменений, когда таблица/запись оказывается заблокирована другим пользователем, в данном случае ошибка произойдет уже на этапе создания рекордсета и повторных попыток Акс автоматом делать не будет, насколько я понимаю, хотя могу и ошибаться. Полного описания как именно происходят блокировки с временными циклами я не видел. Возможно, реальная блокировка происходит все-же не в момент открытия рекордсета, а позднее, тогда задержка уже нужна. В общем, в вашем случае я бы не особо заморачивался с многопользовательскими штучками, т.к. вероятность того, что ваши 3 несчастных пользователя нажмут кнопку одновременно ничтожно мала. Они нужны, когда автоматические процессы меняют тысячи записей подряд, и действуют несколько таких процессов одновременно. В этом случае вероятность коллизий резко возрастает. А для такого рода задач я бы Акцесс не выбрал, для этого есть серверные базы данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2016, 06:01 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
MrShinВ общем, в вашем случае я бы не особо заморачивался с многопользовательскими штучками, т.к. вероятность того, что ваши 3 несчастных пользователя нажмут кнопку одновременно ничтожно мала. Они нужны, когда автоматические процессы меняют тысячи записей подряд, и действуют несколько таких процессов одновременно. В этом случае вероятность коллизий резко возрастает. А для такого рода задач я бы Акцесс не выбрал, для этого есть серверные базы данных. я акс использую как замену екселю, когда надо добиться корректного заполнения обязательных полей :) ну и как обычно уносит в автоматизацию, там это хоть как то реализовано. Я до последнего отказываюсь от VBA, мне в 99 из 100 случаев достаточно штатных макросов, что позволяет избежать потребности в безусловном разрешении выполнения всех кодов VBA. Раньше я каждый чих пытался прописать в VBA, но когда понял, что в аксе лучше ничего серьезного даже не проектировать, то ушел от этой концепции, и зачастую оказывается, что есть более оптимальные решения и без VBA, просто не хватает знаний возможностей приложения. Транзакции по умолчанию включены во всех запросах (созданных через конструктор) акса. И как я понял, при выполнении макроса, акс открывает транзакцию и только после его завершения закрывает ее. а у меня там прилично запросов подряд выполянется, сначала резервируется клиент, а потом дописываются данные в связанные таблицы (подтягивается список услуг, информация по речевому модулю и всякая мелочь) - видимо все это идет в рамках одной транзакции... А когда еще и форма открывается (также из штатного макроса) то транзакция видимо вообще закрывается после закрытия формы, соответственно только тогда и происходит отложенная запись изменений. Такие выводы делаю из-за очень частых конфликтов (я тоже считаю что вероятность в один момент направить запрос к БД крайне мала, там ведь даже не секундами считается). Сейчас выключил в ключевых запросах транзакцию, буду пробовать так... Если и это не поможет, то напишу логику на VBA. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2016, 12:27 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
ТоликmanЯ до последнего отказываюсь от VBA у меня есть мопед, но я до последнего не пользуюсь мотором - кручу педали когда езжу... Тут как-то кажется DB. (могу ошибаться) сказал: на акцессе можно реализовать всё, ну по крайней мере - почти всё... естественно, вне VBA эта фраза теряет всякий смысл... Думаю, владей бы вы VBA - этого топика не было бы вообще... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2016, 14:17 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
Конечно, я ждал такой реакции, хорошо еще фото помидора не прикрепили :) Все, что я ниже написал - это моя призма. vmagу меня есть мопед, но я до последнего не пользуюсь мотором - кручу педали когда езжу... Не согласен с аналогией. VBA - это лом, против которого нет приема. Он нужен когда штатных функций недостаточно. Например хешировать пароль, создать несколько экземпляров одной формы, импортировать данные из excel с динамической шапкой и т.д.. - но тут же возникают проблемы безопасности... Но когда на форуме поднимаются темы, типа: "Как выполнить несколько запросов подряд", "как посчитать количество рабочих дней", "как обратиться к элементу подчиненной-подчиненной формы" и первые советы сразу из VBA. Хотя для всего этого у акса уже есть инструменты, не требующие VBA, но мы их не изучаем, потому что проще на VBA. vmagТут как-то кажется DB. (могу ошибаться) сказал: на акцессе можно реализовать всё, ну по крайней мере - почти всё... естественно, вне VBA эта фраза теряет всякий смысл... Конечно. Даже больше. Если заменить в фразе Access на Excel, то утверждение также останется верным! Я как то делал базу, она анализировала данные одного биллинга (excel не тянул), раздулась до гига. И когда кто-то задел витую пару и произошел кратковременный дисконнект, то рухнула вся база в процессе выполнения сложного запроса, слава богу на сервере есть резервные копии. Тогда для меня стала очевидна ниша акса - это чисто прикладные задачки. И что на счет параметров безопасности? Представляете какая дыра появляется, когда разрешаешь выполнять все VBA-макросы без подтверждения? Ведь на VBA можно сделать все! Или нужна подпись, а если есть центр сертификации на корпоративной сетке, то значит где-то есть и MSSQL, зачем вообще тогда Access - максимум - интерфейс к MSSQL (Вот здесь можно, может даже нужно, работать с VBA, чтобы при компиляции скрыть логику)... Акс отличная песочница, для тех кто хочет получить основы БД, но нельзя на нем строить серьезные решения. А раз нельзя, то зачем сразу все усложнять в VBA? Вот хорошая фраза: Закон МейераУсложнять — просто , упрощать — сложно Стоит тебе уйти с рабочего места, как твои плоды сразу прекращают обслуживаться - в VBA никто разбираться не будет, развития решение получать не будет. Будут либо тебя дергать, либо откажутся от твоего решения. А подключать нового человека из вне - вопрос доверия. Чем проще решение на выходе - тем лучше. Лично мое использование акса сводится к автоматизации повторяющихся запросов и создания форм ввода данных, и лишь для этого VBA явно не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2016, 13:33 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
Толикman, нет ли противоречия в этих утверждениях? Толикman...для всего этого у акса уже есть инструменты, не требующие VBA, но мы их не изучаем, потому что проще на VBA...Толикman...Стоит тебе уйти с рабочего места, как твои плоды сразу прекращают обслуживаться - в VBA никто разбираться не будет... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2016, 15:07 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
хм-м-м, да здесь же о другом. Все кто мутит решения в аксе - это мы, здесь и общаемся. А на работе такие решения появляются в двух случаях: 1. Сотрудник разбирается в аксе - таких единицы; 2. Заказчик (директор/начальник) нашел доверенного фрилансера; И стоить сотруднику уволится/сменить должность или фрилансеру перестать заниматься поддержкой своих решений (все развиваются, все растут, времени не хватает), как решение оказывается заброшенным, и со временем у заказчика появляются потребности по ее развитию. А если решение написано на VBA, то встает вопрос о читаемости кода, здесь заказчик редко предъявляет требования. А с не читаемым кодом кто будет работать? Ушли от темы... прошу прощения. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2016, 16:05 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
решается такая задача следующим образом: есть табличка "задачи", есть табличка "распределенные задачи". отработанная задача удаляется из "распределенные задачи" по таймеру автомат закидывает в "распределенные задачи" очередную задачку тому, у кого задачи кончились ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2016, 19:11 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
_bobрешается такая задача следующим образом: есть табличка "задачи", есть табличка "распределенные задачи". хватит одной таблицы "задачи" с признаком состояния этой задачи, и тогда не нужно будет еще и других таблиц: - решенные задачи - не решаемые задачи .... _bobпо таймеру автомат закидывает в "распределенные задачи" очередную задачку тому, у кого задачи кончились такие вопросы нужно решать комплексно (технически+организационно) ибо много вопросов: - что значит задачи кончились? (если таймер сработал, а у всех есть еще текущие задачи) - я хитрый менеджер - мне упали задачи, я их не делаю, остальные делают, у меня их всегда больше всех, я уехал по своим делам, в конце дня сделал штук 10 и так каждый день, в конце месяца получил как все оклад (нужно вводить кучу правил, нормы, нормативы) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2016, 20:19 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
vmag_bobрешается такая задача следующим образом: есть табличка "задачи", есть табличка "распределенные задачи". хватит одной таблицы "задачи" с признаком состояния этой задачи, и тогда не нужно будет еще и других таблиц: - решенные задачи - не решаемые задачи .... _bobпо таймеру автомат закидывает в "распределенные задачи" очередную задачку тому, у кого задачи кончились такие вопросы нужно решать комплексно (технически+организационно) ибо много вопросов: - что значит задачи кончились? (если таймер сработал, а у всех есть еще текущие задачи) - я хитрый менеджер - мне упали задачи, я их не делаю, остальные делают, у меня их всегда больше всех, я уехал по своим делам, в конце дня сделал штук 10 и так каждый день, в конце месяца получил как все оклад (нужно вводить кучу правил, нормы, нормативы) технически+организационно это решается автоматизацией колл-центра с очередями, сдельной оплатой и многим другим ТС задал конкретный вопрос: как решить технически на акцессе умничать не надо ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2016, 07:52 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
ТоликmanА на работе такие решения появляются в двух случаях: 1. Сотрудник разбирается в аксе - таких единицы; 2. Заказчик (директор/начальник) нашел доверенного фрилансера; Маловато у вас информации по этому поводу. Многие крупные компании сознательно выбирают Акс в качестве основы для вспомогательных решений именно из-за мощности, гибкости и достаточно простой поддержки приложений. В большинстве своем, конечно, сама база на основе SQL серверов, но есть и исключения. Например General Motors для планирования заказов по запчастям использует Access с "родной" файловой базой, причем работает это на основе данных, выгружаемых из SAP. SAP, конечно, хорош, но интерфейс уж больно убогий, а написание нормального дружественного интерфейса стоит баснословных денег. Знаю многие другие крупные компании, использующие Акцесс совсем не по упомянутым причинам. Что касается VBA - да, если вы используете Акс только для построения запросов, то он особо и не нужен. Потом людям начинает хотеться бОльших удобств, и вы начинаете упираться в "потолок" возможностей штатных средств и все равно приходится переделывать на VBA. Сами приложения получаются при правильном подходе не намного отличающимися от решений на том же "промышленном" VB.NET, если это, конечно, не требуем многопоточности и еще некоторых возможностей, которых нет в VBA. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2016, 07:53 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
А если решение написано на VBA, то встает вопрос о читаемости кода, здесь заказчик редко предъявляет требования. А с не читаемым кодом кто будет работать? А если решение написано на куче макросов, в нем разобраться намного проще? кто с этим будет работать...... Если заказчик не предъявил требований, а разработчику все равно, то неуправляемую лапшу и на макросах можно сделать, особенно в случаях как этот - когда нужно точно добиваться обновления кешей и проталкивать изменения в какие-то моменты.... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2016, 09:59 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
vmag, Протестировали мы. Выбрали юзеров и по команде нажали на кнопки. У обоих в списках задач появилась эта задача. Конечно после следующего requery список задач в работе обновится, но как бы на это надо давать таймер и повторять запрос. Я реализовал без VBA эту тему. Запрос на бронирование очереди сделал с выборкой на 3 записи. Таким образом резервируется 3 записи вперед. И каждый раз при выборе нового задания система отбирает 3 записи, еще не отработанные сотрудником, включая ранее им зарезервированные. Т.е. добавляется одна новая запись - на ней ставится резервация. Вот запрос на выборку: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
И запрос на обновление: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Здесь видно, что сначала в работу попадают задачи, зарезервированные раньше остальных. Конфликты остались, но они происходят в задачах до которых юзер еще не дошел, и у него есть 2 задания в запасе для нивелирования конфликта. Если юзер закрывает акс, то все остальные видят, что пользователь перестал быть активным и разбирают его задачи. Кстати достаточно удобно стало планировать отложенные звонки - сразу проставляется сотрудник и нужная дата отложенного звонка, когда время подходит этот звонок попадает в общую гребенку и на основании активных сессий попадает в работу тому же, или другому сотруднику. Единственный возможный явный конфликт - если при старте системы все одновременно начнут работать - здесь я создал форму-прелоадер, которая по таймеру (раз в 2 сек) проверяет успешно ли записались данные - это окно вываливается единожды при начале работы. Стресс тест не выдал конфликтов. В целом стало даже быстрее работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2016, 15:15 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
Толикmanvmag, Протестировали мы. Выбрали юзеров и по команде нажали на кнопки. У обоих в списках задач появилась эта задача. Конечно после следующего requery список задач в работе обновится, но как бы на это надо давать таймер и повторять запрос. Забыл написать, в том сообщении приложен твой файл БД (сразу после конфликта) и скриншоты с двух ПК. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2016, 15:18 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
ТоликmanПротестировали мы. Выбрали юзеров и по команде нажали на кнопки. У обоих в списках задач появилась эта задача. мдя... очевидное - невероятное... верю на слово... напрашивается необходимость все таки одного централизованного раздатчика в данном случае... ну раз дожал свой вариант - молодец, чего уж сказать тут... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2016, 17:12 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
vmagнапрашивается необходимость все таки использовать нормальную базу, допустим https://msdn.microsoft.com/ru-ru/library/hh510202.aspx , а акс как фронт-енд, возможно? с нормальными индексами, блокировками. ну и часть кода на vba, которая правильно с этим обращается. ну или использовать как блокировщик допустим файл с каким-то именем на сетевом ресурсе, https://msdn.microsoft.com/ru-ru/library/office/gg264163.aspx открываем монопольно. Открылся - работаем, не открылся - говорим юзеру - попробуй попозже.... сразу как только критическая секция пройдена, и данные гарантированно сброшены на диск - файл закрывается. (вба, с транзакциями, с прочтением и запушиванием буферов) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2016, 17:51 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
Vladimir Baskakovну или использовать как блокировщик допустим файл с каким-то именем на сетевом ресурсе, + ну да... перед захватом заявки пробовать создавать файл с именем например НОМЕР_ЗАЯВКИ.TXT, а после исполнения его удалять ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2016, 09:13 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
vmag, Так можно придумать собственную логику блокировки записей) Мы здесь же отбрасываем вариант с использованием серверной БД, запрос был - как решить в Аксе. Вариант с назначением диспетчера вполне актуальный, но: 1. Придется запускать отдельный файл на чьей то машине, и контролировать факт его работы. При этом этот диспетчер должен видимо каждую секунду/три распределять очередь. Ведь если появится новый сотрудник, он же не должен ждать минуту-две пока этот диспетчер очнется с очередной иттерацией. А частые запросы - это все таки нагрузка. Да может потребоваться отдельная машина, ну как минимум отдельный экземпляр. 2. Если вшить логику диспетчера в каждый клиентский экземпляр и определять лидерство - кто первый, тот и диспетчер, и также по секундам раскидывать очередь, то возникает еще одна проблема - запросы влияют на отклик интерфейса - это очень плохо. Вариант с использованием файлов: 1. Дублирует логику самого акса, костыль еще тот. Писать в файл - это подключать API насколько я помню, это достаточно серьезные интеллектуальные вложения, по-моему... Конечно сейчас все копируется. Но все же. 2. какие еще подводные камни? Пока идет запись, другие могут только ждать. Работа с файловой системой влечет дополнительные сетевые ресурсы, там же каждый раз проверяется используется ли файл другим или нет, и это может порождать задержки, а если мы будем постоянно опрашивать, пока файл не будет удален, то эти задержки кратно растут. Поэтому я искал решение проблемы распределения очереди при возникновении такой потребности. И вариант с резервированием на несколько задач вперед вполне подошел. Я выключил транзакции, блокировку оставил на уровне страниц, и получил решение с постоянным доступом к данным. С точки зрения пользователя все работает. С точки зрения решения, происходит управление конфликтами (они просто предусмотрены). Нет задержек из-за блокировок, нет нагрузки на сеть по секундам (единственная нагрузка - раз в 5 минут обновляется сессия по сотрудникам с каждого клиента), нет тормозов в интерфейсе. Думаю что это оптимальное решение. Не требует сложной логики на VBA, т.е. можно реализовать штатными средствами (Макросами), можно простыми командами VBA. Достаточно продумать логику двух запросов - на выборку и обновление. Кстати кому интересны наблюдения за макросами: Пока непрерывно выполняется макрос - блокировка не снимается, и если в конце макроса открывается форма - блокировка связанных с формой таблиц может сохраниться. Чтобы блокировки с таблиц снялись надо сделать перерыв, причем это зависит от скорости работы машины, на домашнем ПК с SSD мне 250 миллисекунд было недостаточно, а 300 уже достаточно, на рабочем с сеткой это значение приблизилось к 450/500. Прерывание можно делать формой с таймером управляя событиями "Открытие" и "Таймер", при этом останавливать сам макрос не обязательно, достаточно открыть форму в режиме диалогового окна. Надеюсь кому-нибудь данный опыт поможет. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2016, 09:41 |
|
3 телемаркетолога и Access
|
|||
---|---|---|---|
#18+
Толикman, Привык как-то доводить дела до конца... В этом файле учтена возможность синхронного нажатия по команде клавишей Enter и совет от Vladimir Baskakov (хотя и измененный)... - В старой версии несколько юзеров смотрели одновременно одно и то же (статус заявки) и захватывали одно и то же, в результате только у одного из них на экране была гарантировано правдивая картинка результата, остальным нужно было повторное обновление списка рабочих заявок... - В этой версии уже никто не смотрит, а пробует застолбить выбранную заявку во временной таблице tmp, естественно это получится только у одного юзера... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2016, 00:32 |
|
|
start [/forum/topic.php?fid=45&msg=39369137&tid=1612865]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
191ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 368ms |
total: | 657ms |
0 / 0 |