Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
как оптимизировать ?
|
|||
|---|---|---|---|
|
#18+
можно здесь что-нить сделать ? время запроса стало совсем безумное вакуум фулл аналайз проводится еженедельно andrei=> explain analyze select domainid FROM e_whois_1 natural left join e_domaincluster where cluster is null and statusId in (21,26,28,29,30,31) limit 2000; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit (cost=0.00..8867.11 rows=2000 width=4) (actual time=1121606.953..1121648.753 rows=2000 loops=1) -> Merge Left Join (cost=0.00..19642301.52 rows=4430371 width=4) (actual time=1121606.947..1121636.296 rows=2000 loops=1) Merge Cond: ("outer".domainid = "inner".domainid) Filter: ("inner"."cluster" IS NULL) -> Index Scan using e_whois_1_pkey on e_whois_1 (cost=0.00..19318996.75 rows=4430371 width=4) (actual time=76.557..901044.053 rows=4138019 loops=1) Filter: ((statusid = 21) OR (statusid = 26) OR (statusid = 28) OR (statusid = 29) OR (statusid = 30) OR (statusid = 31)) -> Index Scan using e_domaincluster_pkey on e_domaincluster (cost=0.00..262429.95 rows=7074643 width=6) (actual time=44.970..171520.555 rows=6697155 loops=1) Total runtime: 1121655.040 ms (8 rows) Time: 1121656.042 ms procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 1 1 8920 15212 32824 609308 0 0 4 1 2 1 33 6 40 21 0 1 8920 14808 32684 609844 0 0 5808 132 1456 953 17 30 0 53 0 1 8920 13668 32404 611456 0 0 6912 0 1404 626 19 37 0 44 0 1 8920 13188 31516 612820 0 0 6444 0 1323 435 18 31 0 51 1 0 8920 13188 30880 613332 0 0 7508 0 1452 764 21 42 0 36 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2006, 16:50 |
|
||
|
как оптимизировать ?
|
|||
|---|---|---|---|
|
#18+
andrei=> \d e_whois_1 Table "public.e_whois_1" Column | Type | Modifiers ----------+----------+----------- domainid | integer | not null created | date | expired | date | statusid | smallint | Indexes: "e_whois_1_pkey" PRIMARY KEY, btree (domainid) andrei=> \d e_domaincluster Table "public.e_domaincluster" Column | Type | Modifiers ----------+----------+----------- domainid | integer | not null cluster | smallint | Indexes: "e_domaincluster_pkey" PRIMARY KEY, btree (domainid) "e_domaincluster_cluster_idx" btree ("cluster") "e_domaincluster_good_clusters_idx" btree (domainid) WHERE "cluster" <> -2 AND "cluster" <> 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2006, 17:00 |
|
||
|
как оптимизировать ?
|
|||
|---|---|---|---|
|
#18+
full vacuum не делает reindex Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2006, 13:24 |
|
||
|
как оптимизировать ?
|
|||
|---|---|---|---|
|
#18+
Смысл запроса в том, чтобы выбрать из e_whois_1 все строки с нужными statusid, для которых а) нет пары в e_domaincluster или б) значение cluster есть null? Одно из этих подмножеств а) или б) фактически пустое? При этом в e_whois_1 строк с нужными statusid четыре лимона? И строк в e_domaincluster семь лимонов? Сколько строк будет получено, если убрать limit 2000? (Вроде бы немногим больше 2000 потому что Index Scan по таблице e_domaincluster пробежал 6,7 млн из 7,1.) То есть чтобы выдать в результате эти "несчастные" две тысячи строк постгрес перелопачивает несколькомилионные таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2006, 10:35 |
|
||
|
как оптимизировать ?
|
|||
|---|---|---|---|
|
#18+
не совсем понятна структура индексов, ограничения и т.п. например: 1.e_domaincluster.cluster NOT NULL ? или может быть NULL? -в зависимости от этого вопрос 2. - каков (и есть ли) индекс по e_domaincluster.cluster? 3. нет ли сложного индекса по полям пк и statusId из e_whois_1? Если есть, то в каком порядке стоят поля в индексе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2006, 11:03 |
|
||
|
как оптимизировать ?
|
|||
|---|---|---|---|
|
#18+
смысл запроса простой - выбрать 2000 необработанных доменов. необработанные - это значит не присутствующие в кластерах. > Одно из этих подмножеств а) или б) фактически пустое? нет, обычно ни одного >При этом в e_whois_1 строк с нужными statusid четыре лимона? поставил считать, скоро опубликую >Сколько строк будет получено, если убрать limit 2000? (Вроде бы немногим больше 2000 потому что Index Scan по таблице e_domaincluster пробежал 6,7 млн из 7,1.) в зависимости от дня недели, бывает и 100к (раз в месяц, сегодня например) >.e_domaincluster.cluster NOT NULL ? или может быть NULL? -в зависимости от этого вопрос может. это left join, и если домен не обработан - то NULL, обработан - integer NOT NULL > 3. нет ли сложного индекса по полям пк и statusId из e_whois_1? Если есть, то в каком порядке стоят поля в индексе? хм. привёл вроде все индексы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2006, 21:05 |
|
||
|
как оптимизировать ?
|
|||
|---|---|---|---|
|
#18+
_andreas >.e_domaincluster.cluster NOT NULL ? или может быть NULL? -в зависимости от этого вопрос может. это left join, и если домен не обработан - то NULL, обработан - integer NOT NULLто шо в left join могут встречацца NULL я и без ваших пояснений догадываюссс. вопрос касался поля таблицы e_domaincluster.cluster, бо в объяблениях таблички e_domaincluster не сказано cluster | smallint | not null. Посему нет ли желание пополнить индексы domaincluster примерно таким idx_cluster_null ((cluster IS NULL))? _andreas > 3. нет ли сложного индекса по полям пк и statusId из e_whois_1? Если есть, то в каком порядке стоят поля в индексе? хм. привёл вроде все индексыхорошо. переформулируем вопрос. нет ли желания обзавестись индексом типа (statusId,domainid), а то еще и {(statusId,domainid) WHERE statusId in (21,26,28,29,30,31)}? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2006, 10:43 |
|
||
|
как оптимизировать ?
|
|||
|---|---|---|---|
|
#18+
> пополнить индексы domaincluster примерно таким idx_cluster_null ((cluster IS NULL)) сорри, здесь по идее таких нет, проще было сразу delete делать, для того-же рез-та >нет ли желания обзавестись индексом типа (statusId,domainid), а то еще и {(statusId,domainid) WHERE statusId in (21,26,28,29,30,31)} спасибо попробуем. там всего несколько непересекающихся множеств интересных значений. reindex помог на порядок. теперь select делается за 90 - 112 сек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2006, 10:53 |
|
||
|
как оптимизировать ?
|
|||
|---|---|---|---|
|
#18+
_andreas> пополнить индексы domaincluster примерно таким idx_cluster_null ((cluster IS NULL)) сорри, здесь по идее таких нетвот idx_cluster_null и раздъястнит энтто ёптимизаттору. Или прямо скажите "АЛЬТЕР ТАБЛЯ блаблабля NOT NULL". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2006, 13:14 |
|
||
|
как оптимизировать ?
|
|||
|---|---|---|---|
|
#18+
andrei=> alter table e_domaincluster alter column cluster set not null; ALTER TABLE Time: 13968.878 ms andrei=> reindex table e_domaincluster; REINDEX Time: 112052.254 ms andrei=> explain analyze select domainid FROM e_whois_1 natural left join e_domaincluster where cluster is null and statusId in (21,26,28,29,30,31) limit 2000; QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit (cost=0.00..9033.11 rows=2000 width=4) (actual time=362214.515..362278.745 rows=2000 loops=1) -> Merge Left Join (cost=0.00..20275184.41 rows=4489083 width=4) (actual time=362214.507..362266.363 rows=2000 loops=1) Merge Cond: ("outer".domainid = "inner".domainid) Filter: ("inner"."cluster" IS NULL) -> Index Scan using e_whois_1_pkey on e_whois_1 (cost=0.00..19963483.07 rows=4489083 width=4) (actual time=36.164..256344.313 rows=4242019 loops=1) Filter: ((statusid = 21) OR (statusid = 26) OR (statusid = 28) OR (statusid = 29) OR (statusid = 30) OR (statusid = 31)) -> Index Scan using e_domaincluster_pkey on e_domaincluster (cost=0.00..249569.19 rows=7244241 width=6) (actual time=18.926..67319.267 rows=6907060 loops=1) Total runtime: 362285.027 ms (8 rows) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2006, 01:08 |
|
||
|
как оптимизировать ?
|
|||
|---|---|---|---|
|
#18+
можно посмотреть explain analyze select domainid FROM e_whois_1 natural left join e_domaincluster where e_domaincluster.domainid is null and statusId in (21,26,28,29,30,31) limit 2000; ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2006, 11:59 |
|
||
|
как оптимизировать ?
|
|||
|---|---|---|---|
|
#18+
не обрасчай внимания. не простнулся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2006, 12:11 |
|
||
|
как оптимизировать ?
|
|||
|---|---|---|---|
|
#18+
попробуйте добавить "order by domainid desc" - подозрениями о фактическом распределении значений (cost=0.00..9033.11 actual time=362214.515..362278.745) навеяло :) P.S.: а может объеденить эти две таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2006, 20:25 |
|
||
|
как оптимизировать ?
|
|||
|---|---|---|---|
|
#18+
> P.S.: а может объеденить эти две таблицы? думаете стоит ? andrei=> select count(*) from e_whois_1; count ---------- 14969966 (1 row) Time: 48707.667 ms andrei=> select count(*) from e_domaincluster; count --------- 7225065 (1 row) Time: 26755.469 ms ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2006, 02:01 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=33655108&tid=2006481]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 402ms |

| 0 / 0 |
