|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
Всем доброго дня! Понадобилось добавить фотографии в карточке сотрудников. Реализовал через GTT-таблицу, пока открыто окно редактирования сотрудника - фотографии добавляются в GTT, затем при нажатии на кнопку ОК - заливаются в постоянную. Вроде как мусор из-за GTT скапливаться не должен. Но в ходе тестирования заметил одну странность. К примеру заливаю фотографию размером 1.9 МБ, к одному и тому же сотруднику цепляю ее несколько раз. Все отрабатывает нормально, НО, размер БД почему-то меняется не сразу, а спустя какое-то время, и становится чуть больше, чем я ожидаю. К примеру надо изменить сотрудника 4 раза, каждый раз цепляя фото, и только после 4-го раза размер БД меняется. И меняется на примерно на 9-10 МБ. Это нормально? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2016, 14:33 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
aidynchik, при версионности если блоб меняется, или "еще раз прицепляется", то он будет копироваться полностью каждый раз. Если меняется только запись, то ссылка на блоб остается старая, так что блоб не копируется. Есть аспект с временными блобами а что касается вообще места - то БД в ФБ 2.5 увеличивается не "постранично", а блоками, см. параметр DatabaseGrowthIncrement в firebird.conf. если в БД добавить тучу данных, а потом удалить, то после долгое время БД увеличиваться не будет, т.к. пустое место будет использоваться, и т.д. Так что я советую не париться по этому поводу, за исключением вот такой темы http://www.ibase.ru/dbgrowth/ ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2016, 14:38 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
aidynchikПонадобилось добавить фотографии в карточке сотрудников. Реализовал через GTT-таблицу, пока открыто окно редактирования сотрудника - фотографии добавляются в GTT, затем при нажатии на кнопку ОК - заливаются в постоянную. "Сон разума рожает чудовищ." (с) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2016, 15:03 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
kdvвот такой темы http://www.ibase.ru/dbgrowth/ Кстати! ест там такой параграф... Еще вариант от Arioch: создано view с конкатенацией строковых столбцов Таки вот, в моём примере - 14624481 - радость словить можно было не только VIEW, но и COMPUTED BY столбцы в обычной таблице, а вот это упомянуть забыли. Код: sql 1.
Кстати, интересно что будет с SP или с появившимися в FB3 функциями. Пример тот же - тупо собираем ФИО из отдельных компонент. Но - внутри функции или внутри SP. Что-нибудь типа такого Код: sql 1. 2. 3. 4. 5.
На момент создания процедуры (или аналогичной функции) столбцы Fam/Nam/Sur были VARCHAR(256) Потом один из этих столбцов изменился и стал текстовым BLOB'ом. Процедура - два варианта - то ли была перекомпилирована после изменения таблицы, то ли нет. Будут ли из процедуры течь BLOB ID ? Сам :FIO не BLOB, но результат в него BLOB'овый записывается. Соответственно непонятно как здесь сыграет критерий при закрытии SQL-оператора, если BLOB-id не выдаются запросом "наружу" Аналогично, если BLOB ID явно выходят из запроса, но не из процедуры, типа такого Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
На момент создания процедуры (или аналогичной функции) столбцы Fam/Nam/Sur были VARCHAR(256) Потом один из этих столбцов изменился и стал текстовым BLOB'ом. Будет ли вызов процедуры создавать временные BLOBы, живущие до окончания транзакции, 1) без перекомпиляции процедуры ? 2) после перекомпиляции процедуры ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2016, 15:29 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
AriochНа момент создания процедуры (или аналогичной функции) столбцы Fam/Nam/Sur были VARCHAR(256) Потом один из этих столбцов изменился и стал текстовым BLOB'ом. за такие изменения надо руки выдёргивать AriochБудет ли вызов процедуры создавать временные BLOBы, живущие до окончания транзакции, Вроде недавно Влад какие-то изменения делал чтобы временные блобы жили до конца активного запроса ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2016, 16:00 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
Симонов Денис, если не держать транзакции неделями - то в общем-то не сильно опасное изменение. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2016, 16:07 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
aidynchikЭто нормально?Да. Мы тут с месяцок тому назад с нашим ДБА на пару почистили малёху базу, гигов на десяток, так она с той поры и не растет, стоит себе на отметке 75 гиг и не шелохнется. Мерить мегабайты прироста базы дело решительно пустое. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2016, 16:48 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov"Сон разума рожает чудовищ." (с) Что это значит? Я пошел сложным путем? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2016, 21:46 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
aidynchikЧто это значит?Ну есть еще "буря в стакане воды". aidynchikЯ пошел сложным путем?скорее бессмысленным. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 16:30 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
Ivan_PisarevskyaidynchikЧто это значит?Ну есть еще "буря в стакане воды". aidynchikЯ пошел сложным путем?скорее бессмысленным. Тогда подскажите пожалуйста каким еще можно было пойти... Вставлять записи сразу в постоянную таблицу не закоммичивая транзакцию? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 16:39 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
aidynchikВставлять записи сразу в постоянную таблицу не закоммичивая транзакцию? мы (вроде) тут не очень поняли вашу исходную идею, т.е. на чем вы собрались экономить. aidynchikВроде как мусор из-за GTT скапливаться не должен. gtt у Firebird находятся вне базы данных. Соответственно, про мусор речь не идет. Если данные вставлять в обычные таблицы, то тоже про мусор не может быть и речи - откуда мусор? Единственное оправдание вашему решению - это если вы вставляемые данные перед переносом из gtt в БД обновляете раз по 20, причем в разных транзакциях. Однако я не очень понимаю, по каким причинам это может произойти, если речь идет об "окне редактирования сотрудника". Ладно бы если эти редактирования были "сохранением" промежуточного редактирования. Так ведь максимум жизни данных gtt - это в коннекте. А если приложение отвалилось, то и данные из gtt уже не будут видны. Так зачем здесь gtt? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 17:38 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
kdv, GTT я использовал не из-за BLOB-полей. Я просто не вижу другого выхода при добавлении фото и вообще реквизитов больше одного (например телефоны), которые падают в отдельную таблицу и имеют ссылку на сотрудника. 1) При добавлении к уже имеющемуся сотруднику - да, можно обойтись и без GTT. Но как быть при создании нового сотрудника? Как ее заполнять? Можно вставлять записи с null, затем апдейтить после создания сотрудника, но программа многопользовательская, мало ли там таких записей может быть за это время. ID сотрудника присваивается генератором на момент инсерта в таблицу сотрудников. 2) В вашей ссылке http://www.ibase.ru/dbgrowth/ есть информация о длинных транзакциях. Если вставлять BLOB сразу в обычную таблицу и не коммитить, то есть риск, что транзакция растянется, вдруг юзер посреди редактирования сотрудника пошел пить чай с концами. Это не будет длинной транзакцией? Или я туплю, и чего-то не понимаю в транзакциях? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 17:54 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
aidynchik Я просто не вижу другого выхода при добавлении фото и вообще реквизитов больше одного (например телефоны), которые падают в отдельную таблицу и имеют ссылку на сотрудника. опять я не понимаю. "не вижу другого выхода" - почему? Представьте себе, что в ФБ нет gtt. Что дальше? Случится катастрофа? aidynchikЕсли вставлять BLOB сразу в обычную таблицу и не коммитить, то есть риск, что транзакция растянется, вдруг юзер посреди редактирования сотрудника пошел пить чай с концами. Это не будет длинной транзакцией? Или я туплю, и чего-то не понимаю в транзакциях? Во-первых, длинные транзакции действительно зло. Значит, надо сохранять данные в таблицы только после того как пользователь нажмет кнопку "сохранить" (и именно в этот момент стартовать транзацию). А не в самом начале. Еще раз повторю - с точки зрения потери данных при сбое приложения до сохранения, что гтт, что обычная таблица равнозначны. Если же вы хотите что-то сохранять в промежутке - тогда да, надо использовать обычные таблицы, и периодически делать коммит. Во-вторых, вы с блобами что-то попутали. В статье идет речь про МАССОВЫЕ временные блобы. У вас речь про фотографию сотрудника, ОДНУ. Где вы тут проблему увидели, вообще непонятно. aidynchikНо как быть при создании нового сотрудника? Как ее заполнять? ну, вы же собираетесь реально создать нового сотрудника, так? Не баловством же пользователь программы занимается? Так получите id, создайте сотрудника, сделайте коммит, и добавляйте себе другие данные к этому сотруднику. Или, получите id, создайте сотрудника, добавляйте данные, и потом делайте коммит. Кстати, по поводу "пошел пить чай с концами" - вы можете поставить в программе таймер по неактивности пользователя, и через 10-15 минут предупреждать, что несохраненные данные будут потеряны. Красными буквами на весь экран. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 18:15 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
kdv, извините, я вас подастаю, раз такая возможность =) kdvВ статье идет речь про МАССОВЫЕ временные блобы. У вас речь про фотографию сотрудника, ОДНУ. она может быть и не одна, их может быть и десяток, ограничений нет, таково пожелание заказчика. kdvЗначит, надо сохранять данные в таблицы только после того как пользователь нажмет кнопку "сохранить" (и именно в этот момент стартовать транзацию). А не в самом начале. Сейчас так и происходит. Пользователь нажимает кнопку "Сохранить", транзакция открывается, делается инсерт в таблицу сотрудников, генерится ID, затем переносятся фото из ГТТ в постоянную на уже имеющийся ID сотрудника, транзакция закрывается. Как в этом случае мне получить ID сотрудинка заранее? По нажатию на кнопку "Добавить" в интерфейсе - сразу же генерить ID и вставлять фото в постоянную таблицу на этот ID, хотя даже сотрудник еще не вставлен? Или же вы предлагаете, чтобы программа вначале требовала сохранить сотрудника, а затем только разрешала навешивать на него фотографии и другие множественные реквизиты? Мне кажется это не правильно. Должно работать так - пользователь нажал кнопку "Добавить", заполнил данные, загрузил фотогрфии, нажал кнопку одну общую кнопку Сохранить - процесс пошел. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 18:34 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
aidynchikКак в этом случае мне получить ID сотрудинка заранее? По нажатию на кнопку "Добавить" в интерфейсе - сразу же генерить ID и вставлять фото в постоянную таблицу на этот ID, хотя даже сотрудник еще не вставлен? 1) Сгенерить ID 2) Вставить сотрудника с этим ID 3) Вставить фото и прочие данные с этим ID. В чём проблема? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 19:06 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovaidynchikКак в этом случае мне получить ID сотрудинка заранее? По нажатию на кнопку "Добавить" в интерфейсе - сразу же генерить ID и вставлять фото в постоянную таблицу на этот ID, хотя даже сотрудник еще не вставлен? 1) Сгенерить ID 2) Вставить сотрудника с этим ID 3) Вставить фото и прочие данные с этим ID. В чём проблема? А вдруг дырка в автонумерации? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 19:12 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, я чего-то не знаю или просто туплю? В интерфейсе, когда пользователь вставляет фото - они сразу сохраняются в БД, я для того и задействовал ГТТ. Ведь я не могу передать фото массивом в хранимую процедуру, соответственно я сразу кладу их в БД. Поэтому по вашему пути получается 1) Сгенерил ID 2) При нажатии "добавить фото" - вставил фото с этим id 3) при нажатии "сохранить" вставил сотрудника. Но это же не логично ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 19:27 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
aidynchikя чего-то не знаю или просто туплю? Обои. Поэтому aidynchikВ интерфейсе, когда пользователь вставляет фото - они сразу сохраняются в БД полный бред. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 19:51 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
Товарищ младший сержантА вдруг дырка в автонумерации? Тогда стокубово дырка в консерватории. За автонумерацию в ID - в особо извращенной форме многократно. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 20:03 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, хорошо, тогда объясните мне, пожалуйста, как передать массив БЛОБОВ в хранимую процедуру Firebird 2.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 20:08 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
aidynchik как передать массив БЛОБОВ в хранимую процедуру Firebird 2.5 И как и для чего ты лопатишь во внутри процедуры содержимое этих блобов? А если не лопатишь их содержимое, то на кукуя они на входе процедуры? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 20:17 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
Di_LIne, да не лопачу я... и да, в теле процедуры они мне нафиг не нужны. я понял, все мне тут предлагают, после отработки ХП, запускать отдельные инсерты на вставку блобов ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 20:24 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
aidynchikя понял, все мне тут предлагают, после отработки ХП, запускать отдельные инсерты на вставку блобов Я жеж не все, а по этому икс_клюзив. По утрам класть в карманы штанов по кирпичу. На вопль "Азпадлянакуда?!" отвечаю заранее "Инии..фсё, штоп было!". - Ы? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 20:29 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
aidynchik1) Сгенерил ID 2) При нажатии "добавить фото" - вставил фото с этим id 3) при нажатии "сохранить" вставил сотрудника. Но это же не логично нелогично - это когда вы почему-то переставили местами пункты 2 и 3. Кто вам сказал, что надо добавить фото фиг знает к кому, т.е. к еще несохраненному сотруднику? Как вы все то же самое делаете в gtt? почему вы не можете то же самое делать с обычными таблицами? О каком вообще массиве блобов "передаваемом в процедуру" идет речь? Вы что, в gtt тоже передаете массив блобов? Короче. В обычных таблицах вы можете делать все то же самое, что и сейчас с GTT. Боязнь какого-то там мусора из-за длинных транзакций - так вы не понимаете природу версионности. Любая активная read-write транзакция, даже если она ничего не делает - ни в гтт, ни в обычные таблицы ничего не пишет - все равно является причиной накопления версий в БД. Прочитайте http://www.ibase.ru/mga/ Если уже читали - второй раз, третий, и т.д. Вы себе чего-то там придумали, начали чесать левое ухо правой рукой, и теперь спрашиваете "как же мне быть"? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 20:29 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
aidynchikя понял, все мне тут предлагают, после отработки ХП, запускать отдельные инсерты на вставку блобов 1. откуда взялась ХП? 2. почему вы не можете с обычными таблицами работать так же, как сейчас работаете с гтт? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 20:31 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
aidynchikGTT я использовал не из-за BLOB-полей. Я просто не вижу другого выхода при добавлении фото и вообще реквизитов больше одного (например телефоны), которые падают в отдельную таблицу и имеют ссылку на сотрудника. 1) При добавлении к уже имеющемуся сотруднику - да, можно обойтись и без GTT. Но как быть при создании нового сотрудника? Как ее заполнять? Можно вставлять записи с null, затем апдейтить после создания сотрудника, но программа многопользовательская, мало ли там таких записей может быть за это время. ID сотрудника присваивается генератором на момент инсерта в таблицу сотрудников. я не вижу выхода даже при корректировке одного реквизита Вот что писал kdv Однако я не очень понимаю, по каким причинам это может произойти, если речь идет об "окне редактирования сотрудника". Ладно бы если эти редактирования были "сохранением" промежуточного редактирования . Так ведь максимум жизни данных gtt - это в коннекте. А если приложение отвалилось, то и данные из gtt уже не будут видны. и как по мне он полностью прав. Я бы посоветовал убрать из реализации gtt. Получив в виде бонуса: - возможность корректировки в течении продолжительного времени с "неограниченными" перерывами - сохранение "следов" изменений для возможных последующих разборок - при некотором желании возможность отмены изменений что касается непосредственно блобов то думаю ничего страшного не будет, тем более что ты уже сейчас озадачился этим и "направление движения" вроде как показали ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 20:37 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
kdv1. откуда взялась ХП? 2. почему вы не можете с обычными таблицами работать так же, как сейчас работаете с гтт? ХП была, она создает сотрудника, и реализует проверки перед вставкой, просто я о ней не упоминал, думая что не суть. Весь проект реализован на ХП, возможно надо было сразу сказать. Понадобилось вставлять фото. Не имея ID сотрудника на момент его создания, когда пользователь в интерфейсе нажимает "Добавить фото" - я кладу блоб во временную таблицу. Потом в ХП после вставки сотрудника, имея ID на руках, я перекидываю из временной таблицы в постоянную, потому что я знаю, что во временной таблице только мои блобы, моей сессии, а не чьи-то там. Выбрал путь с ГТТ не из-за боязни мусора, а именно из-за проблем с ID. Теперь же все говорят, что я делаю полный бред, могу сразу кидать в постоянную таблицу. То есть запустить ХП, а после нее запустить цикл инсертов блобов? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 20:42 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
m7m, я еще добавлю, что вообще, по уму, блобы и прочая ахинея обычно является "вторичной" информацией. То есть, фото сотрудника может не быть, а может быть и фото, и анкета, и еще что-то. И если по "первичной информации" о сотрудниках будут идти достаточно частые или тяжелые запросы, то все вторичные столбцы лучше вынести в отдельную таблицу, связанную с сотрудниками как 1-1. Но это так, из разряда "практические советы по проектированию баз данных". ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 20:46 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
aidynchik Весь проект реализован на ХП... Все болезни лечим через одну дырочку? aidynchikТо есть запустить ХП, а после нее запустить цикл инсертов блобов? А мозг включить и расписать на бумашке, если не хватает извилин удерживать головой, пошаговое выполнение "Степ-бай-степ". - Где и кто тебя учил програмать? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 20:50 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
aidynchikПонадобилось вставлять фото. Не имея ID сотрудника на момент его создания вот опять. Интерфейс создания сотрудника есть. Но оттуда не возвращается его id, потому что раньше он был не нужен. То есть, это ваш прокол. Дальше, теперь вы лепите "фото" поперед создания сотрудника. Не надо этого делать. Создали сотрудника, затем добавили фото. У вас же все равно будет и интерфейс ДОБАВЛЕНИЯ фото сотрудникам, поскольку у существующих сотрудников ФОТО НЕТ. То есть, опять проблема с логикой приложения. aidynchikв интерфейсе нажимает "Добавить фото" - я кладу блоб во временную таблицу. зачем во временную таблицу? почему нельзя в TMemoryStream положить фотку, а потом этот стрим записать в блоб сотрудника? Это если фотка копипастится. А если указывается файл с фоткой, так из файла можно блоб прочитать потом. Зачем вот это телодвижение с сохранением блоба в гтт? Опять проблема с логикой в приложении. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 20:51 |
|
вопрос по работе с BLOB-полями
|
|||
---|---|---|---|
#18+
kdvвот опять. Интерфейс создания сотрудника есть. Но оттуда не возвращается его id, потому что раньше он был не нужен. ID конечно возвращается. kdvДальше, теперь вы лепите "фото" поперед создания сотрудника. Не надо этого делать. я этого и не делал, я же клал во временную таблицу, сотрудника нет, соответственно в пост таблицу и не ложил. kdvСоздали сотрудника, затем добавили фото. У вас же все равно будет и интерфейс ДОБАВЛЕНИЯ фото сотрудникам, поскольку у существующих сотрудников ФОТО НЕТ. Так и есть, так и происходит в ХП - создается сотрудник, затем ему привязываются фото из временной таблицы. kdvпочему нельзя в TMemoryStream положить фотку, а потом этот стрим записать в блоб сотрудника? Это если фотка копипастится. А если указывается файл с фоткой, так из файла можно блоб прочитать потом. это все так и реализовано, просто через ГТТ плюс ХП. Не знаю почему таким путем пошел, да, согласен, можно было после создания сотрудника тупо кидать блобы в пост таблицу. Сорри, за потраченное время, всем огромное спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2016, 21:00 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1561785]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 171ms |
0 / 0 |