clob is slow?

vavan
Дата: 04.03.2011 12:49:48
лошарский вопрос, отчего так нещадно тормозит выборка clob :)
если указывать поле в селекте то открывается долго, несколько минут
если убрать то несколько сек

юзаю bcb/doa
согласно профайлеру тормозит как OCILobRead так и OCILobGetLength (почти также)

на всякой случай задублировал на forums.oracle.com
OracleX
Дата: 04.03.2011 12:57:09
В DOA, да и в ODAC, не очень-то можно управлять моментом загрузки BLOB/CLOB.
vavan
Дата: 04.03.2011 13:01:34
OracleX,

не совсем понял о каком управлении идет речь?
идет проход по всему датасету и сразу же для каждой строки делается фетч clob
понятно что время всей выборки пропорционально кол-ву таких полей и числу записей но отчего такие ДИКИЕ торомоза? в моей ситуации получается что clob поля НЕПРИМЕНИМЫ на практике
orawish
Дата: 04.03.2011 13:09:08
vavan
лошарский вопрос, отчего так нещадно тормозит выборка clob :)
если указывать поле в селекте то открывается долго, несколько минут
если убрать то несколько сек

юзаю bcb/doa
согласно профайлеру тормозит как OCILobRead так и OCILobGetLength (почти также)

на всякой случай задублировал на forums.oracle.com

(безотносительно особенностей вашего клиента)
клоб, вообще то, со времени своего появления в 8 оракле лимит имел пару терабайт
(потом - еще его приподняли).
т.е. соотношение всех скалярных атрибутов в запросе к одному лобу вполне может быть
как несколько магнитиков на одном холодильнике.
ORA__SQL
Дата: 04.03.2011 13:09:35
vavan
лошарский вопрос, отчего так нещадно тормозит выборка clob :)

Потому что в buffer cache по умолчанию blob не попадает.
Какой средний размер blob?
Если размер не большой попробуй включить кэширование
ALTER TABLE table_name MODIFY LOB (lob_column) (CACHE);
См. столбец cache:
SELECT * FROM dba_lobs
vavan
Дата: 04.03.2011 13:11:24
в данный момент размер децкий

MAX(DBMS_LOB.GETLENGTH(CHANGELOG))	MIN(DBMS_LOB.GETLENGTH(CHANGELOG))	AVG(DBMS_LOB.GETLENGTH(CHANGELOG))
532 246 284,312253197383
ORA__SQL
Дата: 04.03.2011 13:18:44
vavan
в данный момент размер децкий

MAX(DBMS_LOB.GETLENGTH(CHANGELOG))	MIN(DBMS_LOB.GETLENGTH(CHANGELOG))	AVG(DBMS_LOB.GETLENGTH(CHANGELOG))
532 246 284,312253197383

Тогда включай кэширование и сравни результаты.
OracleX
Дата: 04.03.2011 13:21:20
>для каждой строки делается фетч clob

Этого можно избежать.
vavan
Дата: 04.03.2011 13:55:26
ORA__SQL
Тогда включай кэширование и сравни результаты.

ок, в след. технологическое окно (после праздников видимо) попробую и отпишусь (дело было на продакшне)
vavan
Дата: 04.03.2011 13:56:15
OracleX
Этого можно избежать.

научишь?