|
Длительное выполнение операторов update ... set
|
|||
---|---|---|---|
#18+
Добрый день, возникла проблема с длительным выполнением операторов update на Informix 9.3 Win 2003, база занимает около 20Гб в чанках. ОЗУ 4Гб, может кто-то подскажет как можно оптимизировать процесс: Выполняется update большого количества таблиц с помощью sql такого вида: update table1 set row_1 = (select row_X1 from tmp_X where row_X2 = row_1) where row_1 = (select row_x3 from tmp_X where row_x3 = row_1); update table2 set row_1 = (select row_X1 from tmp_X where row_X2 = row_1) where row_1 = (select row_x3 from tmp_X where row_x3 = row_1); ... Выполнение идет крайне медленно, при этом нагрузки на диск практически нет, из 4 ядер двух процессоров используется только одно и постоянно на 100%. Обратил внимание на активную работу с буферами в памяти: dskreads pagreads bufreads %cached dskwrits pagwrits bufwrits %cached 280626 289979 2996077508 99.99 2913 3635 4279 31.92 isamtot open start read write rewrite delete commit rollbk 191825491 4352 3719731 89859015 0 43 0 574 0 gp_read gp_write gp_rewrt gp_del gp_alloc gp_free gp_curs 0 0 0 0 0 0 0 ovlock ovuserthread ovbuff usercpu syscpu numckpts flushes 0 0 0 53050.78 17.95 15 357 bufwaits lokwaits lockreqs deadlks dltouts ckpwaits compress seqscans 16585 0 3650402416 0 0 0 1 3710760 ixda-RA idx-RA da-RA RA-pgsused lchwaits 154111 0 79635 233674 395 и насколько я понимаю громадную очередь ожидающую обработки процессором: AIO I/O vps: class/vp s io/s totalops dskread dskwrite dskcopy wakeups io/wup errors kio 0 i 2.1 109600 109562 38 0 24617917 0.0 0 kio 1 i 0.0 567 5 562 0 65288 0.0 0 kio 2 i 0.0 169 0 169 0 17716 0.0 0 kio 3 i 0.0 273 43 230 0 77073 0.0 0 msc 0 i 0.0 0 0 0 0 0 0.0 0 aio 0 i 0.0 0 0 0 0 0 0.0 0 pio 0 i 0.0 0 0 0 0 0 0.0 0 lio 0 i 0.0 0 0 0 0 0 0.0 0 Можно ли в данной ситуации каким-то образом изменяя настройки Informix ускорить обработку... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2009, 12:54 |
|
Длительное выполнение операторов update ... set
|
|||
---|---|---|---|
#18+
Alex_KH, используй индексы, чтобы уменьшить seqscans. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2009, 11:07 |
|
Длительное выполнение операторов update ... set
|
|||
---|---|---|---|
#18+
Alex_KHможет кто-то подскажет как можно оптимизировать процесс: Выполняется update большого количества таблиц с помощью sql такого вида: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Код: plaintext 1. 2. 3. 4.
CREATE INDEX idx1 ON table1(row_1); CREATE INDEX idx2 ON tmp_X(row_X2); CREATE INDEX idx3 ON tmp_X(row_X3); UPDATE STATISTICS LOW FOR TABLE tmp_X; если по table1, table2, ... нет статистики, то и по ним не помешает хотя бы UPDATE STATISTICS LOW ... Если не поможет, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2009, 12:00 |
|
|
start [/forum/topic.php?fid=44&msg=36098050&tid=1607781]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 341ms |
total: | 495ms |
0 / 0 |