powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите настроить PostgreSQL
20 сообщений из 20, страница 1 из 1
Помогите настроить PostgreSQL
    #33981380
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
День добрый.

Надеюсь, что местные гуру помогут решить данную проблему.

Конфигурация тестовой машины:
PostgreSQL 8.1.4 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special) под WinXP Prof SP2 (NTFS), P4-2600 HT, 512 MB RAM, IDE Maxtor (70 GB).

postgresql.conf
work_mem = 16192
shared_buffers = 4096
sort_mem = 4096
temp_buffers = 1000

Тестируя приложение на локальной базе (пара табличек максимальная всего 250 тыс. записей) обратил внимание на чудовищные с моей точки зрения тормоза по сравнению с MySQL 5.0.24-community-nt.

Примеры:

CREATE TABLE "public"."fares" (
"ID" INTEGER NOT NULL,
"FaRecordLength" VARCHAR(4),
"FaRecordType" VARCHAR(2),
"FaID" VARCHAR(10) NOT NULL,
"FaBlockID" VARCHAR(19) NOT NULL,
"FaAktion" VARCHAR(1),
"FaTkRef" VARCHAR(18),
"FaRlRef" VARCHAR(18),
"FaRtRef" VARCHAR(900),
"FaTariffTitle" VARCHAR(20),
"FaStructDeparture" VARCHAR(60),
"FaStructArrival" VARCHAR(273),
"FaValidPairs" VARCHAR(128),
"FaSeasonCode" VARCHAR(3),
"FaLastReturn" VARCHAR(8),
"FaAdtRt" VARCHAR(1),
"FaChdRt" VARCHAR(1),
"FaInfRt" VARCHAR(1),
"FaAdtOw" VARCHAR(11),
"FaChdOw" VARCHAR(1),
"FaInfOw" VARCHAR(1),
"FaAdtRtNet" VARCHAR(11),
"FaAdtOwNet" VARCHAR(11),
"FaAdtRtTkt" VARCHAR(11),
"FaAdtOwTkt" VARCHAR(11),
"FaChdDiscount" VARCHAR(3),
"FaChdIata" VARCHAR(1),
"FaInfDiscount" VARCHAR(3),
"FaInfIata" VARCHAR(1),
"FaBlackOutDates" VARCHAR(80),
"FaDatePurchase" VARCHAR(8),
"FaLastDatePurchase" VARCHAR(8),
"FaNotesIn" VARCHAR(4),
"FaNotesOut" VARCHAR(1),
"FaBruttoNettoSwitch" VARCHAR(1),
"FaFareSeekCode" VARCHAR(1),
"FaBlackOutDatesOut" VARCHAR(32),
"FaBroker" VARCHAR(29),
"FaAdtRtMinSelling" VARCHAR(6),
"FaAdtOwMinSelling" VARCHAR(6),
"FaCommissionRtAdt" VARCHAR(6),
"FaCommissionOwAdt" VARCHAR(6),
"crc" VARCHAR(32),
CONSTRAINT "fares_pkey" PRIMARY KEY("ID")
) WITHOUT OIDS;

CREATE INDEX "fares_idx" ON "public"."fares"
USING btree ("crc");

1. запрос
select count(*) from
(
select count(*), crc
from fares
group by crc
having count(*) > 1
) test


PG: 55 sec (повтор - 49 sec).
MySQL: 7 sec (повтор - 0.5 sec).

2. select max(LENGTH("FaRtRef")) from fares

PG: 18 sec (повтор 16 sec.)
MySQL: 1 sec (повтор - 0.7 sec).

3. PS. Таблица fares_new копия таблицы fares,
только с количеством записей +~1000

select count(*) from fares_new
where crc not in (
select crc
from fares
where fares.crc = fares_new.crc )

PG: 109 sec (повтор 79 sec.)
MySQL: 4 sec (повтор - 3 sec).

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

Заранее спасибо!

Алексей.
...
Рейтинг: 0 / 0
Помогите настроить PostgreSQL
    #33981434
ездун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У Постгреса count тормозной. Нужно строить костыли для быстрого получения общего кол-ва. Если нужна скорострельность - бери мускул на MyISAM'e (самый быстрый из существ.БД - но без транзакций), фичастость - постгри.
по настроикам http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html
...
Рейтинг: 0 / 0
Помогите настроить PostgreSQL
    #33981435
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS. vacuum full analyze делал.
...
Рейтинг: 0 / 0
Помогите настроить PostgreSQL
    #33981514
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тормозит, к сожалению, не только count(*):

2.
select max(LENGTH("FaRtRef")) from fares

PG: 18 sec (повтор 16 sec.)
MySQL: 1 sec (повтор - 0.7 sec).


4.
select * from fares_new
where crc not in (
select crc
from fares
where fares.crc = fares_new.crc )
limit 10

PG: 30 sec (повтор 79 sec.)
MySQL: 3 sec (повтор - 2.5 sec).

А разобраться хотелось бы именно с настройкой PG.
...
Рейтинг: 0 / 0
Помогите настроить PostgreSQL
    #33981635
ChameLe0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
shared_buffers = 4096 слишком мало. Те постгресс в памяти держит только 4096*8Kb данных. Попробуй увеличить например до 16384-32768(128-256Mb). sort_mem = 4096 можно тоже увеличить до 10240 например.
...
Рейтинг: 0 / 0
Помогите настроить PostgreSQL
    #33981697
4321ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Master Alex 4.
select * from fares_new
where crc not in (
select crc
from fares
where fares.crc = fares_new.crc )
limit 10

PG: 30 sec (повтор 79 sec.)
MySQL: 3 sec (повтор - 2.5 sec).

а вот это надо переписать на внешнее объединение (или попробывать с EXCEPT)
...
Рейтинг: 0 / 0
Помогите настроить PostgreSQL
    #33982080
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master AlexТормозит, к сожалению, не только count(*):

2.
select max(LENGTH("FaRtRef")) from fares
PG: 18 sec (повтор 16 sec.)
MySQL: 1 sec (повтор - 0.7 sec).



Есть хоть одна БД, в которой ЭТО не тормозит по умолчанию?
Построй функциональный индекс.

[quot Master Alex]
4.
select * from fares_new
where crc not in (
select crc
from fares
where fares.crc = fares_new.crc )
limit 10

PG: 30 sec (повтор 79 sec.)
MySQL: 3 sec (повтор - 2.5 sec).

А разобраться хотелось бы именно с настройкой PG.[quot Master Alex]

Перепиши с JOIN и опять же попробуй построить функциональный индекс.
Вообще, руки отрывать надо за такие запросы...

А в MySQL много чего не тормозит из-за ее файлово-индексного движка, но вот только ни на что сложнее веб-портала ее лучше не ставить.
...
Рейтинг: 0 / 0
Помогите настроить PostgreSQL
    #33982130
Sad Spirit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ездунУ Постгреса count тормозной.
Это называется "Слышал звон..."

ChameLe0nshared_buffers = 4096 слишком мало. Те постгресс в памяти держит только 4096*8Kb данных. Попробуй увеличить например до 16384-32768(128-256Mb).

Суперсовет, при условии наличия у вопрошающего всего 512 метров памяти, ага.

Master Alex
work_mem = 16192
shared_buffers = 4096
sort_mem = 4096
temp_buffers = 1000

Читаем release notes к версии 8.0 и видим:
Release notes
Server configuration parameters SortMem and VacuumMem have been renamed to work_mem and maintenance_work_mem to better reflect their use. The original names are still supported in SET and SHOW.

Так откуда здесь взялся sort_mem? Да, и в какое значение выставлен effective_cache_size?


1. запрос
select count(*) from
(
select count(*), crc
from fares
group by crc
having count(*) > 1
) test


PG: 55 sec (повтор - 49 sec).
MySQL: 7 sec (повтор - 0.5 sec).

Можно посмотреть explain analyze запроса для postgres'а и его аналог для mysql?


select max(LENGTH("FaRtRef")) from fares


Строить индекс по length("FaRtRef"). Возможно переписать запрос в виде
Код: plaintext
1.
select length("FaRtRef") from fares order by length("FaRtRef") desc limit  1 ;


select count(*) from fares_new
where crc not in (
select crc
from fares
where fares.crc = fares_new.crc )

переписать в виде
Код: plaintext
1.
2.
3.
4.
5.
select count(*) from fares_new
where crc not in (
select crc
from fares
)
fares_new в подзапросе нахер не сдался.

А вообще тот факт, что "повторы" в mysql работают быстрее, а в postgres'е --- нет, говорит нам о том, что postgres нифига кэш не использует. Да и вообще для таблиц в 250 тыс записей десятки секунд на запрос --- величины невероятные. Там случаем память не кончилась, не свопит?
...
Рейтинг: 0 / 0
Помогите настроить PostgreSQL
    #33982241
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Инфа для размышления:

Взял две таблицы по одной целой колонке. В t1 загнал числа от 1 до 10000 по порядку, в t2 - от 2 до 20000 с шагом 2 (2, 4, 6...)

Результатом выполнения запроса во всех случаях является цифра 5000.

MaserAlex, обратите внимание на стоимости запросов:

Код: plaintext
1.
2.
3.
explain analyze 
select count(*) from t1 where id not in (
select id from t2 where t2.id=t1.id
);
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Aggregate  (cost=15286.20..15286.21 rows=1 width=0) (actual time=59.297..59.298 rows=1 loops=1)
  ->  Seq Scan on t1  (cost=0.00..15273.68 rows=5004 width=0) (actual time=0.074..56.934 rows=4999 loops=1)
        Filter: (NOT (subplan))
        SubPlan
          ->  Index Scan using t2_id_idx on t2  (cost=0.00..3.01 rows=1 width=4) (actual time=0.003..0.003 rows=1 loops=10009)
                Index Cond: (id = $0)
Total runtime: 59.396 ms

Код: plaintext
1.
2.
3.
explain analyze
select count(*) from (
select t1.id as id1, t2.id as id2 from t1 left join t2 on (t1.id=t2.id) where t2.id is null
) as tbl;
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Aggregate  (cost=470.26..470.27 rows=1 width=0) (actual time=28.697..28.697 rows=1 loops=1)
  ->  Merge Right Join  (cost=0.00..445.23 rows=10009 width=0) (actual time=0.109..26.483 rows=4999 loops=1)
        Merge Cond: ("outer".id = "inner".id)
        Filter: ("outer".id IS NULL)
        ->  Index Scan using t2_id_idx on t2  (cost=0.00..205.06 rows=10005 width=4) (actual time=0.015..4.629 rows=5006 loops=1)
        ->  Index Scan using t1_id_idx on t1  (cost=0.00..205.10 rows=10009 width=4) (actual time=0.008..9.199 rows=10013 loops=1)
Total runtime: 28.803 ms

Ну и напоследок:

Код: plaintext
1.
2.
3.
explain analyze 
select count(*) from t2 where id not in (
select id from t1
)
Код: plaintext
1.
2.
3.
4.
5.
6.
Aggregate  (cost=372.68..372.69 rows=1 width=0) (actual time=25.461..25.462 rows=1 loops=1)
  ->  Seq Scan on t2  (cost=180.11..360.18 rows=5002 width=0) (actual time=18.997..23.488 rows=5000 loops=1)
        Filter: (NOT (hashed subplan))
        SubPlan
          ->  Seq Scan on t1  (cost=0.00..155.09 rows=10009 width=4) (actual time=0.004..6.738 rows=10009 loops=1)
Total runtime: 25.840 ms

Запрсы нужно писать с умом, любовью и нежностью :-)


=====================================
Страну, в которой все ходят на бровях,
на колени не поставишь...
=====================================
...
Рейтинг: 0 / 0
Помогите настроить PostgreSQL
    #33982247
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Брешу. Первые два запроса - 4999, последний - 5000.


=====================================
Страну, в которой все ходят на бровях,
на колени не поставишь...
=====================================
...
Рейтинг: 0 / 0
Помогите настроить PostgreSQL
    #33982254
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять брешу. Просто числа 1-10 у меня в T1 повторялись :-)


=====================================
Страну, в которой все ходят на бровях,
на колени не поставишь...
=====================================
...
Рейтинг: 0 / 0
Помогите настроить PostgreSQL
    #33982467
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо за идеи по параметрам и корректировку запросов! После подкрутки и установки на нормальный сервер (Dual Xeon 2.8, 1GB) все залетало.
...
Рейтинг: 0 / 0
Помогите настроить PostgreSQL
    #33983057
ChameLe0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sad Spirit
ChameLe0nshared_buffers = 4096 слишком мало. Те постгресс в памяти держит только 4096*8Kb данных. Попробуй увеличить например до 16384-32768(128-256Mb).

Суперсовет, при условии наличия у вопрошающего всего 512 метров памяти, ага.

А вообще тот факт, что "повторы" в mysql работают быстрее, а в postgres'е --- нет, говорит нам о том, что postgres нифига кэш не использует. Да и вообще для таблиц в 250 тыс записей десятки секунд на запрос --- величины невероятные. Там случаем память не кончилась, не свопит?


Отличные выводы. Судя по тому что длина одной записи около 1.5-2k, а записей всего около 250к, + учитывая служебные данные => размер таблицы ~400-550Мб. Постгрессу отведено 4к shared_buffers(32 М). Отсюда думаю легко догадаться что постгрес во время запросов постоянно читает с дисков. А судя по запросам они почти все читали полностью таблицу.
...
Рейтинг: 0 / 0
Помогите настроить PostgreSQL
    #33985331
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению на 512 MB памяти мне так и не удалось добиться приемлемой производительности PG. Перепробовал кучу вариантов параметров настройки - все мимо - сервер стоит колом, шуршит диском и не использует индексы там, где их использует MySQL:

explain analyze
select count(*) from
(
select count(*), crc
from fares
group by crc
having count(*) > 1
) test

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
QUERY PLAN
Aggregate  (cost= 73284 . 45 .. 73284 . 46  rows= 1  width= 0 ) (actual time= 50374 . 987 .. 50374 . 987  rows= 1  loops= 1 )
  ->  GroupAggregate  (cost= 66339 . 97 .. 71432 . 21  rows= 148179  width= 36 ) (actual time= 49301 . 779 .. 50351 . 926  rows= 42787  loops= 1 )
        Filter: (count(*) >  1 )
        ->  Sort  (cost= 66339 . 97 .. 66964 . 75  rows= 249911  width= 36 ) (actual time= 49301 . 682 .. 49743 . 360  rows= 249911  loops= 1 )
              Sort Key: fares.crc
              ->  Seq Scan on fares  (cost= 0 . 00 .. 39487 . 11  rows= 249911  width= 36 ) (actual time= 14 . 326 .. 23288 . 953  rows= 249911  loops= 1 )
Total runtime:  50395 . 305  ms

по этому запросу плана выполнения получить не удалось - сервер ушел в стопор и не вернулся :(

select count(*) from fares_new
where crc not in (
select crc
from fares
)

Настройка сервера приаттачена. Если у кого будут идеи или опыт тюнинга PG на 512 MB памяти - welcome!
...
Рейтинг: 0 / 0
Помогите настроить PostgreSQL
    #33985403
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master Alexне использует индексыпопробуйте set enable_seqscan to off, и т. п.

Master Alex-> Seq Scan on fares (cost=0.00..39487.11 rows=249911 width=36) (actual time=14.326..23288.953 rows=249911 loops=1)даже seqscan работает 23 секунды. слишком долго. думаю что любой другой план не будет намного быстрее.

Master Alexпо этому запросу плана выполнения получить не удалось - сервер ушел в стопор и не вернулся :(в таких случаях можно смотреть explain, без analyze

Master Alexselect count(*) from fares_new
where crc not in (
select crc
from fares
)у меня по такому запросу получился план
Код: plaintext
1.
2.
3.
4.
 Aggregate  (cost=49.66..49.67 rows=1 width=0)
   ->  Seq Scan on fares_new  (cost=24.12..48.25 rows=565 width=0)
         Filter: (NOT (hashed subplan))
         SubPlan
           ->  Seq Scan on fares  (cost=0.00..21.30 rows=1130 width=34)
то есть seq-scan в квадрате. попробуйте запросы
Код: plaintext
1.
2.
3.
4.
5.
  select count(*) from
  (
    select crc from fares_new
    except
    select crc from fares
  ) as a
или
Код: plaintext
1.
2.
3.
4.
  select count(*) from
  (
    select fares.crc from fares_new left outer join fares using (crc)
  ) as a
  where crc is null
...
Рейтинг: 0 / 0
Помогите настроить PostgreSQL
    #33985597
Sad Spirit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master Alex
explain analyze
select count(*) from
(
select count(*), crc
from fares
group by crc
having count(*) > 1
) test

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
QUERY PLAN
Aggregate  (cost= 73284 . 45 .. 73284 . 46  rows= 1  width= 0 ) (actual time= 50374 . 987 .. 50374 . 987  rows= 1  loops= 1 )
  ->  GroupAggregate  (cost= 66339 . 97 .. 71432 . 21  rows= 148179  width= 36 ) (actual time= 49301 . 779 .. 50351 . 926  rows= 42787  loops= 1 )
        Filter: (count(*) >  1 )
        ->  Sort  (cost= 66339 . 97 .. 66964 . 75  rows= 249911  width= 36 ) (actual time= 49301 . 682 .. 49743 . 360  rows= 249911  loops= 1 )
              Sort Key: fares.crc
              ->  Seq Scan on fares  (cost= 0 . 00 .. 39487 . 11  rows= 249911  width= 36 ) (actual time= 14 . 326 .. 23288 . 953  rows= 249911  loops= 1 )
Total runtime:  50395 . 305  ms

Ну, и о чём нам говорит план выполнения? Сначала у нас 23 секунды читается с диска таблица. Потом с 23-й секунды до 50-й она сортируется. Очевидно, тоже на диске, т.к. в щедро выделенные 10 метров (work_mem) не помещается.

Хотелось бы посмотреть ещё на результат запроса
Код: plaintext
1.
select relpages from pg_class where relname in ('fares', 'fares_new');

В любом случае, этот запрос без Seq Scan не обойдётся --- особенности архитектуры PostgreSQL; MySQL, возможно, обходится просмотром по индексу. Да и формат хранения данных у него (в случае MyISAM) покомпактнее в разы, так что Seq Scan быстрее.

Вариантов ускорить Seq Scan (повторяю, без него тут всё равно не обойтись, enable_seqscan=off может только затормозить запрос) немного:
1) Добавить памяти
2) Поставить более шустрый диск (23 секунды на чтение таблицы!?)
3) Уменьшить размер таблицы.
4) Можно ещё прямо перед запросом (не в postgresql.conf!) выставить жырное значение work_mem, чтобы делалась не сортировка, а что-то типа hash aggregate. Но от первых 23 секунд это, скорее всего, не избавит.

Рекомендую крепко задуматься о третьем варианте: таблица из 43 полей, причём все, кроме id, имеют тип varchar? Слово "нормализация" о чём-нибудь говорит? :)
...
Рейтинг: 0 / 0
Помогите настроить PostgreSQL
    #33987520
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sad SpiritНу, и о чём нам говорит план выполнения? Сначала у нас 23 секунды читается с диска таблица. Потом с 23-й секунды до 50-й она сортируется. Очевидно, тоже на диске, т.к. в щедро выделенные 10 метров (work_mem) не помещается.

Да, проблема, действительно оказалась в установках, еще раз покрутив их было найдено вот такое сочетание, которое давало вполне приемлемые результаты выполнения запросов:
Код: plaintext
1.
2.
3.
4.
5.
shared_buffers= 35000
work_mem      = 35000
temp_buffers  = 5000
maintenance_work_mem= 15000
effective_cache_size= 15000
random_page_cost= 2

Еще раз огромное спасибо всем за советы и за варианты запросов!
...
Рейтинг: 0 / 0
Помогите настроить PostgreSQL
    #33992908
ShadyAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> "Сначала у нас 23 секунды читается с диска таблица. Потом с 23-й секунды до 50-й она сортируется. Очевидно, тоже на диске, т.к. в щедро выделенные 10 метров (work_mem) не помещается."

А откуда взяты цифры? Что то накосо просмотрев результат анализа не обнаружил числа 23.
...
Рейтинг: 0 / 0
Помогите настроить PostgreSQL
    #33993003
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShadyAngel> "Сначала у нас 23 секунды читается с диска таблица. Потом с 23-й секунды до 50-й она сортируется. Очевидно, тоже на диске, т.к. в щедро выделенные 10 метров (work_mem) не помещается."

А откуда взяты цифры? Что то накосо просмотрев результат анализа не обнаружил числа 23.

actual time=14.326..23288.953
c 14 миллисекунды начала запроса по 23288 миллисекунду
...
Рейтинг: 0 / 0
Помогите настроить PostgreSQL
    #33993295
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sad SpiritРекомендую крепко задуматься о третьем варианте: таблица из 43 полей, причём все, кроме id, имеют тип varchar? Слово "нормализация" о чём-нибудь говорит? :)
Присоединяюсь: много полей типа VARCHAR(1) - храниться какой-то флаг?, ну так smallint или boolean лучше будет!!! Ибо VARCHAR(1) храниться как (минимум) 4байта - длинна(=1) и данные (подозреваю, тоже до 4 байт округленны).
Код: plaintext
1.
2.
3.
4.
5.
6.
"FaChdDiscount" VARCHAR( 3 ),
"FaAdtRtMinSelling" VARCHAR( 6 ),
"FaAdtOwMinSelling" VARCHAR( 6 ),
"FaCommissionRtAdt" VARCHAR( 6 ),
"FaCommissionOwAdt" VARCHAR( 6 ),
"FaInfDiscount" VARCHAR( 3 ),
Это я понимаю числа. Может NUMERIC будет лучше? Не уверен, но попробовать стоит.

Код: plaintext
1.
2.
"FaDatePurchase" VARCHAR( 8 ),
"FaLastDatePurchase" VARCHAR( 8 ),
Здесь проситься тип date !?
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите настроить PostgreSQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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