powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-04030 и работа с XML
25 сообщений из 28, страница 1 из 2
ORA-04030 и работа с XML
    #39565285
OCP_2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Инцидент на одном из контуров Oracle.

Исходные данные:

Система на базе Oracle 11g (11.2.0.3) и интерфейс на платформе APEX 4.2. В системе реализован ряд сценариев по анализу данных на основе справочников, которые выступают в качестве параметров.

Справочники загружаются в систему из XLSX файлов. Объем строк в файле - сотни тысяч.

Excel парсится в апексовую коллекцию. Парсер реализован на PL/SQL. Используются методы из пакета dbms_xmldom.

Поступает обращение:

4 раза подряд загрузили файл одинакового размера для тестирования корректности работы версионности, и на последней итерации упал экземпляр Oracle с ошибкой :

Error occurred while painting error page: ORA-04030: out of process memory when trying to allocate 16408 bytes (koh-kghu sessi,static frame of inst)

В общем, сессия во время парсинга нажирает большой объем PGA. А после отработки не возвращает. И обжорство длится до тех пор, пока не выжрется вся RAM. Т.е даже в SWAP не уходит.

Завели обращение в Support:

Ответ:

1) Использовать после завершения работы DBMS_SESSION.FREE_UNUSED_USER_MEMORY

Не помогло. Отдает часть памяти (1-2 %), но явно не то, что занял парсинг.

2) Так как DBMS_XMLDOM создает LOB для хранения информации. Поступила рекомендация объявлять переменные и после работы явно очищать, например, DBMS_XMLDOM.FREENODE.

Не вышло, выяснили, что возможны 2 типа LOB - Abstract и Temp(Cache). 1-й тип хранится в памяти, 2-й в Temp (на диске). Abstract крайне редко встречаются и это не наш случай.

3) В рекомендациях проскочила фраза про скрытый параметр _use_realfree_heap = TRUE

Как оказалось, этот параметр отвечает за то, чтобы память немедленно после отработки возвращалась ОС. Это и есть решение нашей проблемы. В настоящее время ждем подтверждения.

alter system set "_use_realfree_heap" = TRUE

Загуглил название параметра и нарвался на сообщение на форуме (естественно, англоязычном) У коллег аналогичная проблема на загрузке XML. Напомню, что формат XLSX - это XML. Они тоже заводили обращение и тоже проблему решили параметром "_use_realfree_heap" = TRUE.

Надеюсь кому-то пост окажется полезным. В целом беспокоит стабильность работы Oracle 11g с XML. Я уже имел опыт валидации XML по заданной схеме XSD. И 11g тоже подкачал, периодически уходил в себя, до отстрела сессии, чего не происходило в 12c.
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39565302
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OCP_2015,

Проблем на чём-то другом после применения параметра не вылезло?
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39565307
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чудится мне _use_realfree_heap позволил вашему парсеру отжирать столько памяти, сколько им хочется, а не использовать ее более экономно )))
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39565311
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OCP_2015,

В частности, не натыкались пока на п.2 из описанного ?
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39565318
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DВА,
OCP_2015сессия во время парсинга нажирает большой объем PGA
_use_realfree_heap - The memory for working areas can be allocated as heap 0 when the parameter is set to TRUE. This means that the memory is allocated as a separate heap and not as a sub-heap of the PGA .
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39565335
OCP_2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env,

Спасибо за ссылку. Пока нет.

Знаю, что DBA играли параметром _realfree_heap_pagesize_hint, с учетом того, что у нас на тестовом контуре всего 16 ГБ.
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39565499
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно, у меня на 11.2.0.3 (Solaris SPARC64, Linux x64, Linux x86, Windows x86) _use_realfree_heap = TRUE по умолчанию (ksppstdf = TRUE)
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39565564
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слава,

А _realfree_heap_pagesize_hint во что при этом выставлен?
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39565781
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну там страничка 32k и их кол-во 64k (или наоборот), в общем 2G в произведении
На всех. И с маленькой (2g), и с побольше (60g) SGA. И на 32 бит, и на 64

Но я при перестройке индекса в один поток юзаю до 4G PGA, а PL/SQL таблицы в одной сессии забирали до 16G (SPARC64)
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39566316
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OCP_2015Excel парсится в апексовую коллекцию. Парсер реализован на PL/SQL. Используются методы из пакета dbms_xmldom.dbms_xmldom больше нужен когда надо менять документ.
Для парсинга достаточно других средств. Почему было решено использовать именно его?
OCP_20152) Так как DBMS_XMLDOM создает LOB для хранения информации. Поступила рекомендация объявлять переменные и после работы явно очищать, например, DBMS_XMLDOM.FREENODE.

Не вышло, выяснили, что возможны 2 типа LOB - Abstract и Temp(Cache). 1-й тип хранится в памяти, 2-й в Temp (на диске). Abstract крайне редко встречаются и это не наш случай."Не вышло" - это очень конкретная и профессиональная формулировка.
Вообще dbms_xmldom проектировал какой-то наркоман, но free* процедуры частично помогают.
Процедуры ниже имеют абсолютно идентичный функционал только вторая еще за собой подчищает.
p_xmldom
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
create or replace procedure p_xmldom(n in number) is
  doc   dbms_xmldom.domdocument;
  root  dbms_xmldom.domnode;
  dummy dbms_xmldom.domnode;

  child_document dbms_xmldom.domdocument;
  child_element  dbms_xmldom.domelement;
begin
  doc  := dbms_xmldom.newdomdocument;
  root := dbms_xmldom.makenode(doc);
  root := dbms_xmldom.appendchild(root,
                                  dbms_xmldom.makenode(dbms_xmldom.createelement(doc,
                                                                                 'ROWSET')));
  for i in 1 .. n loop
    child_document := dbms_xmldom.newdomdocument(xmltype('<ROW><ID>' || i ||
                                                         '</ID><NAME>NAME' || i ||
                                                         '</NAME></ROW>'));
    child_element  := dbms_xmldom.getdocumentelement(child_document);
    child_element  := dbms_xmldom.makeelement(dbms_xmldom.importnode(doc,
                                                                     dbms_xmldom.makenode(child_element),
                                                                     true));
    dummy          := dbms_xmldom.appendchild(root,
                                              dbms_xmldom.makenode(child_element));
  end loop;

  --dbms_output.put_line(dbms_xmldom.getxmltype(doc).getclobval());
end p_xmldom;


p_xmldom_fixed
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
create or replace procedure p_xmldom_fixed(n in number) is
  doc   dbms_xmldom.domdocument;
  root  dbms_xmldom.domnode;
  dummy dbms_xmldom.domnode;

  child_document dbms_xmldom.domdocument;
  child_element  dbms_xmldom.domelement;
begin
  doc  := dbms_xmldom.newdomdocument;
  root := dbms_xmldom.makenode(doc);
  root := dbms_xmldom.appendchild(root,
                                  dbms_xmldom.makenode(dbms_xmldom.createelement(doc,
                                                                                 'ROWSET')));
  for i in 1 .. n loop
    child_document := dbms_xmldom.newdomdocument(xmltype('<ROW><ID>' || i ||
                                                         '</ID><NAME>NAME' || i ||
                                                         '</NAME></ROW>'));
    child_element  := dbms_xmldom.getdocumentelement(child_document);
    child_element  := dbms_xmldom.makeelement(dbms_xmldom.importnode(doc,
                                                                     dbms_xmldom.makenode(child_element),
                                                                     true));
    dummy          := dbms_xmldom.appendchild(root,
                                              dbms_xmldom.makenode(child_element));
    dbms_xmldom.freedocument(child_document);
    dbms_xmldom.freeelement(child_element);
    dbms_xmldom.freenode(dummy);
  end loop;

  --  dbms_xmldom.freedocument(doc);
  dbms_xmldom.freenode(root);
  --dbms_output.put_line(dbms_xmldom.getxmltype(doc).getclobval());
end p_xmldom_fixed;


Для первой на создание документа с 10к узлами ушло 58 метров PGA, для второй - 7.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
SQL> select name, value
  2    from v$sesstat ss, v$statname sn
  3   where sn.name like '%ga memory%'
  4     and ss.statistic# = sn.statistic#
  5     and ss.sid = userenv('sid');

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
session uga memory                                                   176560
session uga memory max                                               176560
session pga memory                                                   463076
session pga memory max                                               463076

SQL>
SQL> select pga_used_mem, pga_alloc_mem, pga_freeable_mem, pga_max_mem
  2    from v$process p
  3    join v$session s
  4      on s.paddr = p.addr
  5   where sid = userenv('sid');

PGA_USED_MEM PGA_ALLOC_MEM PGA_FREEABLE_MEM PGA_MAX_MEM
------------ ------------- ---------------- -----------
      578814        624662                0      624662

SQL>
SQL> exec p_xmldom(1e4);

PL/SQL procedure successfully completed.

SQL>
SQL> select name, value
  2    from v$sesstat ss, v$statname sn
  3   where sn.name like '%ga memory%'
  4     and ss.statistic# = sn.statistic#
  5     and ss.sid = userenv('sid');

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
session uga memory                                                 57499560
session uga memory max                                             57499560
session pga memory                                                 58331364
session pga memory max                                             58331364

SQL>
SQL> select pga_used_mem, pga_alloc_mem, pga_freeable_mem, pga_max_mem
  2    from v$process p
  3    join v$session s
  4      on s.paddr = p.addr
  5   where sid = userenv('sid');

PGA_USED_MEM PGA_ALLOC_MEM PGA_FREEABLE_MEM PGA_MAX_MEM
------------ ------------- ---------------- -----------
    58184906      58492950                0    58492950


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
SQL> select name, value
  2    from v$sesstat ss, v$statname sn
  3   where sn.name like '%ga memory%'
  4     and ss.statistic# = sn.statistic#
  5     and ss.sid = userenv('sid');

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
session uga memory                                                   176560
session uga memory max                                               176560
session pga memory                                                   463076
session pga memory max                                               463076

SQL>
SQL> select pga_used_mem, pga_alloc_mem, pga_freeable_mem, pga_max_mem
  2    from v$process p
  3    join v$session s
  4      on s.paddr = p.addr
  5   where sid = userenv('sid');

PGA_USED_MEM PGA_ALLOC_MEM PGA_FREEABLE_MEM PGA_MAX_MEM
------------ ------------- ---------------- -----------
      578814        624662                0      624662

SQL>
SQL> exec p_xmldom_fixed(1e4);

PL/SQL procedure successfully completed.

SQL>
SQL> select name, value
  2    from v$sesstat ss, v$statname sn
  3   where sn.name like '%ga memory%'
  4     and ss.statistic# = sn.statistic#
  5     and ss.sid = userenv('sid');

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
session uga memory                                                  6072640
session uga memory max                                              6072640
session pga memory                                                  7147748
session pga memory max                                              7147748

SQL>
SQL> select pga_used_mem, pga_alloc_mem, pga_freeable_mem, pga_max_mem
  2    from v$process p
  3    join v$session s
  4      on s.paddr = p.addr
  5   where sid = userenv('sid');

PGA_USED_MEM PGA_ALLOC_MEM PGA_FREEABLE_MEM PGA_MAX_MEM
------------ ------------- ---------------- -----------
     6814222       7374870                0     7374870


скриптик для теста
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
select name, value
  from v$sesstat ss, v$statname sn
 where sn.name like '%ga memory%'
   and ss.statistic# = sn.statistic#
   and ss.sid = userenv('sid');
 
select pga_used_mem, pga_alloc_mem, pga_freeable_mem, pga_max_mem
  from v$process p
  join v$session s
    on s.paddr = p.addr
 where sid = userenv('sid');

exec p_xmldom_fixed(1e4);

select name, value
  from v$sesstat ss, v$statname sn
 where sn.name like '%ga memory%'
   and ss.statistic# = sn.statistic#
   and ss.sid = userenv('sid');
 
select pga_used_mem, pga_alloc_mem, pga_freeable_mem, pga_max_mem
  from v$process p
  join v$session s
    on s.paddr = p.addr
 where sid = userenv('sid');


OCP_2015... скрытый параметр ... ждем подтверждения ... Надеюсь кому-то пост окажется полезным ... Вместо вашего опыта общения с техподдержкой для остальных полезнее был бы test case с демонстрацией когда все плохо и когда все хорошо с влиянием указанного параметра.
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39566528
OCP_2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

Спасибо за скрипты и процедуры, это , действительно, полезный материал.

авторdbms_xmldom больше нужен когда надо менять документ.
Для парсинга достаточно других средств. Почему было решено использовать именно его?

Парсер - апексовый плагин, с заврапленным кодом. Мы его разврапили и залезли в код, добавили только очищение.

автор"Не вышло" - это очень конкретная и профессиональная формулировка.

На SQL.RU многие участники пытаются оценить чей-то профессионализм. Это личные комплексы и самоутверждение? Одному мне это видится не профессиональным? Риторический вопрос.

OCP2015"Не вышло"

В контексте проблемы - утилизация памяти не изменилась.

авторВместо вашего опыта общения с техподдержкой для остальных полезнее был бы test case с демонстрацией когда все плохо и когда все хорошо с влиянием указанного параметра.

Test case постараюсь предоставить, когда будут подтверждены результаты администраторами. Не имею доступа к контуру.


Ранее коллега написал:

Вячеслав Любомудров Странно, у меня на 11.2.0.3 (Solaris SPARC64, Linux x64, Linux x86, Windows x86) _use_realfree_heap = TRUE по умолчанию (ksppstdf = TRUE)

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

_realfree_heap_pagesize_hint 65536
_use_realfree_heap TRUE


Возможно, кто-то ранее "похозяйничал" и менял параметры у заказчика, что и привело к проблеме.

В целом, пост не является конкретным решением. Это направление для размышления и экспериментов на основании рекомендации Support`а.

Если можете доказать, что рекомендация бесполезная, то напишите в этой теме и можно ее закрыть. Если у кого-то возникнет желание обсуждать профессионализм Support`а, то , пожалуйста, делайте это не в данной теме.

«Не согласен - критикуй, критикуешь - предлагай, предлагаешь - делай, делаешь - отвечай!»
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39566531
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OCP_2015Возможно, кто-то ранее "похозяйничал" и менял параметры у заказчика, что и привело к проблеме.Именно
Кто-то залез грязными ручками и изменил недокументированные параметры (которые, как известно, меняются только по прямому указанию саппорта)

Я могу подсказать еще несколько недокументированных параметров (для разминки), после которых БД и не поднялась бы после краха
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39566539
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OCP_2015На SQL.RU многие участники пытаютсяБыл сделан намек что наблюдения лучше сопровождать скриптами а не впечатлениями.
Ну это для технических специалистов, конечно, а не любителей эпистолярного жанра.

Когда ты переносишь оценку фразы на оценку лично себя подумай прежде всего о своих комлексах.
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39566545
Деня-Паша
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OCP_2015Если можете доказать, что рекомендация бесполезная, то напишите в этой теме и можно ее закрыть. Если у кого-то возникнет желание обсуждать профессионализм Support`а, то , пожалуйста, делайте это не в данной теме.

«Не согласен - критикуй, критикуешь - предлагай, предлагаешь - делай, делаешь - отвечай!» тут отвечающие не занимаются закрытием тем, а вопрошающие не указывают другим что где писать

цитатки лучше оставь для своей группы вконтактиге
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39566565
OCP_2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

Намек на скрипты был адекватно воспринят.

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

Давайте, не будем продолжать. Я не сомневаюсь в вашей экспертизе, поскольку пользовался вашими полезными комментариями, еще будучи джуниором.

Спасибо за Ваши комментарии.
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39566665
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OCP_2015Знаю, что DBA играли параметром _realfree_heap_pagesize_hint, с учетом того, что у нас на тестовом контуре всего 16 ГБ.

а вы тогда хто?
OCP у вас в нике - просто случайное сочетание букв? ))
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39566668
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopВместо вашего опыта общения с техподдержкой для остальных полезнее был бы test case с демонстрацией когда все плохо и когда все хорошо с влиянием указанного параметра.

да нечего там особо демонстрировать, админы скорее всего поигрались с параметром _realfree_heap_pagesize_hint, в результате стало можно выесть побольше памяти, чем по-умолчанию.
Вариантов-то других нет )
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39566669
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде, как OCP бывают и разработчики
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39566670
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде как раз понятно, что поигрались с _use_realfree_heap
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39566671
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровВроде, как OCP бывают и разработчики
точно )
совсем зашоренная стала ))
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39566673
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровВроде как раз понятно, что поигрались с _use_realfree_heap

я имею в виду после чего проблема ушла, а не когда все испортили )
коду не хватило того объема пга, что он мог отхватить в рамках процесса по-умолчанию - 64к страниц, параметр увеличили, код потребности свои удовлетворил ))
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39566691
OCP_2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DВА,

Я разработчик.

DBAя имею в виду после чего проблема ушла, а не когда все испортили )
коду не хватило того объема пга, что он мог отхватить в рамках процесса по-умолчанию - 64к страниц, параметр увеличили, код потребности свои удовлетворил ))

Вы уверены, что правильно поняли проблему?

Экземпляр падал минимум на 4-ой итерации выполнения процедуры парсера. Т.е полный цикл завершался, памяти хватало.
Но после отработки память не возвращается. Поэтому первые рекомендации от Support`а были очищать явно переменные в парсере.

Я параметров не видел, их , возможно, вернули в стандартное значение и проблема пропала. Обратной связи от группы поддержки у заказчика пока не было.
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39566701
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OCP_2015Вы уверены, что правильно поняли проблему?


а вы попытались ее корректно описать?
сколько памяти съедал процесс после первой итерации,замерили?
после второй, четвертой?
до изменения параметра?
после изменения параметра?
какое значение параметра было выставлено изначально?
какого именно параметра?

или будем продолжать гадать над вашей проблемой и ее тайным решением? ))
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39566704
OCP_2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DВА,

DBA...
какого именно параметра?


Замеры разумеется проводились. Когда найдем решение, я его сообщу.

Спасибо, за желание и готовность помочь.
...
Рейтинг: 0 / 0
ORA-04030 и работа с XML
    #39566722
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
все-таки показали бы тест-кейс вместе с process_memory_details?
можете на основе этого скрипта: https://github.com/xtender/xt_scripts/blob/master/pga/details.sql
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-04030 и работа с XML
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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