Написал запросик (кстати, разместил его в FAQ по СМ), однако слишком мало тестил (тесты на базах магазинов).
Тестил на базе давностью ~1 месяц - запрос работает ~4 минут, и все возвращает, как положено.
Тестил на базе давностью 1,5 года - вот тут уже сложности начались - сначало на тэйблспейс temp обругалось, потом на сегменты RBS. RBS увеличили, не помогло.
Собственно, вопрос:
Как выбрать оптимальное кол-во сегментов, их размер и размер тэйблспэйсов?
Не будет ли так, что запросик мой СЛИШКОМ громоздкий, и всех этих рбс-ов для него надо очень жирных и много. Если их сделать слишком много и слишком больших, не отразится ли это плохо на базе и на быстродействии?
размер базы - 11,5 гб
Oracle 8i
Сегментов RBS 24 шт. по 10 мб (optimal size) 4 мб (next size).
Тэйблспэйс RBS один на 2 гига
текст запроса:
Код:
SELECT
to_char(cc.printtime,'DD.MM.YYYY') "date", sp.article, sp.docid,
max(
(to_number(to_char(cc.printtime,'hh24'))*60 +
to_number(to_char(cc.printtime,'mi'))) -
(to_number(to_char(log.eventtime,'hh24'))*60 +
to_number(to_char(log.eventtime,'mi')))
) "minutes",
to_char(log.eventtime,'hh24:mi:ss') "change_price_time", to_char(cc.printtime,'hh24:mi:ss') "check_time", sp.itemprice "Price", cci.itemprice "check_price"
FROM
SUPERMAG.Smspec sp,
SUPERMAG.Smdoclog log,
SUPERMAG.Smcashchecks cc,
SUPERMAG.Smcashcheckitems cci
where
log.doctype='AC' and
log.oldstate=2 and
log.newstate=3 and
log.id=sp.docid and
sp.article=cci.article and
cc.desknum=cci.desknum and
cc.znum=cci.znum and
cc.checknum=cci.checknum and
to_char(cc.printtime,'DD.MM.YYYY') =to_char(log.eventtime,'DD.MM.YYYY') and
cci.itemprice<>sp.itemprice and
cc.printtime-log.eventtime>0
group by
sp.article, sp.docid, log.eventtime, cc.printtime, cci.itemprice, sp.itemprice
еще добавлял в where log.eventtime>='01.04.2008' - все равно обругалось.
а вот с '01.06.2008' получилось, хотя и ждал минут 20...