Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 clob is slow?  [new]
vavan
Member

Откуда: Казань
Сообщений: 3574
лошарский вопрос, отчего так нещадно тормозит выборка clob :)
если указывать поле в селекте то открывается долго, несколько минут
если убрать то несколько сек

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

на всякой случай задублировал на forums.oracle.com
4 мар 11, 12:49    [10325021]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
OracleX
Member

Откуда:
Сообщений: 1998
В DOA, да и в ODAC, не очень-то можно управлять моментом загрузки BLOB/CLOB.
4 мар 11, 12:57    [10325074]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
vavan
Member

Откуда: Казань
Сообщений: 3574
OracleX,

не совсем понял о каком управлении идет речь?
идет проход по всему датасету и сразу же для каждой строки делается фетч clob
понятно что время всей выборки пропорционально кол-ву таких полей и числу записей но отчего такие ДИКИЕ торомоза? в моей ситуации получается что clob поля НЕПРИМЕНИМЫ на практике
4 мар 11, 13:01    [10325115]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
vavan
лошарский вопрос, отчего так нещадно тормозит выборка clob :)
если указывать поле в селекте то открывается долго, несколько минут
если убрать то несколько сек

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

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

(безотносительно особенностей вашего клиента)
клоб, вообще то, со времени своего появления в 8 оракле лимит имел пару терабайт
(потом - еще его приподняли).
т.е. соотношение всех скалярных атрибутов в запросе к одному лобу вполне может быть
как несколько магнитиков на одном холодильнике.
4 мар 11, 13:09    [10325166]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
ORA__SQL
Member

Откуда: Moscow
Сообщений: 1774
vavan
лошарский вопрос, отчего так нещадно тормозит выборка clob :)

Потому что в buffer cache по умолчанию blob не попадает.
Какой средний размер blob?
Если размер не большой попробуй включить кэширование
ALTER TABLE table_name MODIFY LOB (lob_column) (CACHE);
См. столбец cache:
SELECT * FROM dba_lobs
4 мар 11, 13:09    [10325170]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
vavan
Member

Откуда: Казань
Сообщений: 3574
в данный момент размер децкий

MAX(DBMS_LOB.GETLENGTH(CHANGELOG))	MIN(DBMS_LOB.GETLENGTH(CHANGELOG))	AVG(DBMS_LOB.GETLENGTH(CHANGELOG))
532 246 284,312253197383
4 мар 11, 13:11    [10325185]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
ORA__SQL
Member

Откуда: Moscow
Сообщений: 1774
vavan
в данный момент размер децкий

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

Тогда включай кэширование и сравни результаты.
4 мар 11, 13:18    [10325233]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
OracleX
Member

Откуда:
Сообщений: 1998
>для каждой строки делается фетч clob

Этого можно избежать.
4 мар 11, 13:21    [10325259]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
vavan
Member

Откуда: Казань
Сообщений: 3574
ORA__SQL
Тогда включай кэширование и сравни результаты.

ок, в след. технологическое окно (после праздников видимо) попробую и отпишусь (дело было на продакшне)
4 мар 11, 13:55    [10325519]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
vavan
Member

Откуда: Казань
Сообщений: 3574
OracleX
Этого можно избежать.

научишь?
4 мар 11, 13:56    [10325531]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
OracleX
Member

Откуда:
Сообщений: 1998
>научишь?

1) Отказаться от DOA, т.к. это тормознутая во всем либа.
Взять ODAC, например. Сразу почувствуешь разницу.
2) Т.к. дорабатывать ODAC ты не будешь, то считай,
что выборка BLOB/CLOB-колонки в фетче на 17000 строк - это не твой путь.
3) Если все-таки очень нужно, то проясни, что ты хочешь.

У меня есть такие данные по теме. Таблица в 100 000 строк с небольшими BLOB фетчится
за несколько секунд. В BLOB-колонке для каждой строки имеем признак
"пустой блоб/не пустой". Для интересующей строки можно считать само значение
BLOB без SQL-запроса, т.е. средствами OCI. Понятно, что такой функционал
полезен в экзотических случаях, типа TOAD.

У меня "своя" либа, помес ODAC, DOA и т.п.
4 мар 11, 14:25    [10325806]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
OracleX
Member

Откуда:
Сообщений: 1998
>Для интересующей строки можно считать само значение
>BLOB без SQL-запроса, т.е. средствами OCI.

Не, я наврал насчет SQL-запроса, я привел данные для случая,
когда я делаю впоследствии запрос вида
select BlobColumn from tab where ROWID=:RID 

В моем случае это нужно делать, чтобы экономить ресурсы.
4 мар 11, 14:39    [10325936]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
OracleX
Member

Откуда:
Сообщений: 1998
Только что пропустил тест: таблица в 121 000 строк с двумя BLOB-колонками
и большими Blob-ами фетчится за 1.3 сек.
4 мар 11, 14:50    [10326034]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
vavan
в данный момент размер децкий

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

а вот это - повод задуматься. Не надо на клоб бросаться сразу, когда не влезли в varchar2.
(тем более, когда оно только предполагается из некой общности некого подхода, которую одна бабка надвое сказала)
4 мар 11, 15:01    [10326136]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
Разрушитель мифов
Guest
orawish
клоб, вообще то, со времени своего появления в 8 оракле лимит имел пару терабайт
Да ну?
4 мар 11, 19:05    [10327575]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10045
Разрушитель мифов
orawish
клоб, вообще то, со времени своего появления в 8 оракле лимит имел пару терабайт
Да ну?


тера, гигa what's the diff

SY.
4 мар 11, 19:18    [10327615]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Разрушитель мифов
orawish
клоб, вообще то, со времени своего появления в 8 оракле лимит имел пару терабайт
Да ну?

ну, да.. загнул я слегка - не спорю

Oracle8i Reference
Database Limits, 2 of 5
Datatype Limits
http://download.oracle.com/docs/cd/A87860_01/doc/server.817/a76961/ch42.htm#11750
CLOB
4 GB maximum
The number of LOB columns per table is limited only by the maximum number of columns per table (that is, 1000).a

главное, что он всегда вмещал много-много-до-фига :)
4 мар 11, 19:24    [10327624]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
vavan
Member

Откуда: Казань
Сообщений: 3574
OracleX
>
1) Отказаться от DOA, т.к. это тормознутая во всем либа.
Взять ODAC, например. Сразу почувствуешь разницу.

odac не пробовал но потестил с unidac к-й как я понимаю тож самое. разницы особой не заметил

OracleX
>2) Т.к. дорабатывать ODAC ты не будешь, то считай,
что выборка BLOB/CLOB-колонки в фетче на 17000 строк - это не твой путь.

не понял. его все равно надо дорабатывать?

OracleX
>3) Если все-таки очень нужно, то проясни, что ты хочешь.

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

OracleX
>В BLOB-колонке для каждой строки имеем признак
"пустой блоб/не пустой". Для интересующей строки можно считать само значение
BLOB без SQL-запроса, т.е. средствами OCI

тут опять не понял :(

OracleX
>Понятно, что такой функционал полезен в экзотических случаях, типа TOAD.

вот кстати, упомянул раньше чем я :) тоад фетчит этот запрос существенно быстрее чем всякие даки. и я на этом убил много времени ломая голову как такое возможно. жму ласт в навигаторе и он на глазах вертит счетчик: 500, 1000, 1500 строк и т.д. но я понял что он похоже меня обманывает когда вместо просто фетча в гриде сделал экспорт выборки. вот тогда оно задумалось также надолго как и даки. видимо при просмотре он реально фетчит лобы только для видимых в гриде записей

OracleX
>У меня "своя" либа, помес ODAC, DOA и т.п.

так как же избежать того что ты говорил ранее? доработки либ меня не смущают, этим я занимаюсь непрерывно :)
5 мар 11, 09:56    [10329055]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
vavan
Member

Откуда: Казань
Сообщений: 3574
orawish
а вот это - повод задуматься. Не надо на клоб бросаться сразу, когда не влезли в varchar2.
(тем более, когда оно только предполагается из некой общности некого подхода, которую одна бабка надвое сказала)

а я уже и задумался о применимости на практике clob-полей для задач где нужна приемлемая скорость. хотя я пока склоняюсь к тому что где-то все же можно подкрутить :) вот и другие товарищи здесь нормальные цифры заявляют
5 мар 11, 09:59    [10329074]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54382
а зачем, собссно, фетчить на клиента сразу пару тыщ цлобов?
5 мар 11, 10:15    [10329202]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
vavan
orawish
а вот это - повод задуматься. Не надо на клоб бросаться сразу, когда не влезли в varchar2.
(тем более, когда оно только предполагается из некой общности некого подхода, которую одна бабка надвое сказала)

а я уже и задумался о применимости на практике clob-полей для задач где нужна приемлемая скорость. хотя я пока склоняюсь к тому что где-то все же можно подкрутить :) вот и другие товарищи здесь нормальные цифры заявляют

размер лобов имеет значение. они и храниться могут (и должны бы) по-разному в зависимости от размера. тип данных предполагает и ограничение на использование sql-функционала ораклового. ну и - с чего началось - есть особенности (конкретных) реализаций апи на стороне клиента.
клоб - хороший тип. там и тогда где (и когда :) он действительно нужен.
5 мар 11, 12:17    [10329965]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54382
orawish
клоб - хороший тип. там и тогда где (и когда :) он действительно нужен.
дык это про каждый тип
)
5 мар 11, 12:37    [10330088]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
vavan
Member

Откуда: Казань
Сообщений: 3574
orawish
они и храниться могут (и должны бы) по-разному в зависимости от размера. тип данных предполагает и ограничение на использование sql-функционала ораклового. ну и - с чего началось - есть особенности (конкретных) реализаций апи на стороне клиента

а они и так хранятся по-разному в зависимости от размера. до 4000 символов inline, что в моем случае должно только улучшать перформанс. однако наблюдается мрак какой-то
а вообще. помимо рассуждений за общечеловеческие ценности есть конкретика что же именно не так, почему аццкие тормоза, что можно подкрутить и/или какой специфический апи надо поюзать чтоб стало радостно?
5 мар 11, 13:39    [10330507]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
OracleX
Member

Откуда:
Сообщений: 1998
vavan
Попробуй все же ODAC, желательно посвежее.
Там есть опции для управления загрузкой BLOB/CLOB
CacheLobs = true
DeferredLobRead =false

Я воспроизвел твои условия: нужно сразу фетчить много маленьких BLOB.
В качестве данных был взят англо-русский словарь Мюллера с 121 000 строк.
Использована "своя" либа, по алгоритму фетча строк и LOB, - похоже на ODAC,
но существенно оптимизировано.

Время полного фетча с CaheLobs=false (не грузить BLOB, нужен только признак IsNull)
при двух BLOB-колонках (одна из которых содержит русский перевод, а вторая колонка
с пустыми значениями) равно 1,4 сек.

Время полного фетча с CaheLobs=true равно 11 сек. При этом все значения BLOB хранятся
в оперативной памяти.

При одной BLOB-колонке разница должна быть еще меньше,
так как основное процессорное время при фетче занимают экзотические колонки,
поскольку простые колонки фетчатся пачками одним махом в приемные буфера.

ODAC совершенствуется, надеюсь, что он покажет сопоставимую разницу
(замедление из-за CacheLobs до 8 раз).
5 мар 11, 13:47    [10330558]     Ответить | Цитировать Сообщить модератору
 Re: clob is slow?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
andreymx
orawish
клоб - хороший тип. там и тогда где (и когда :) он действительно нужен.
дык это про каждый тип
)
лонги ф топку :)
5 мар 11, 13:49    [10330570]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Oracle Ответить