[ОТВЕТИТЬ]
26.01.2009 11:49
mighty
 
Версия СМ+ 1.026.3
Полный перенос ускорил с 15 часов до 1 ч 22 мин путем сверки таблиц аналитической базы с базой эталоном сгенерированной на тестовом компе.
Оказалось что СМ+ в процессе переноса отключает только свои ограничения и чеки, про которые знает, у меня видимо были многие поля NOT NULL или от старой базы наследие или кривизна в генераторе, не знаю. Ну вообщем сначала отобрал все таблицы аналитики чтобы сделать их NOLOGGING запросом:
Все действия выполняю в PL\SQL Developer'e
Код:
SELECT 'ALTER TABLE SUPERMAG.'||T.table_name||' NOLOGGING;' FROM DBA_ALL_TABLES T WHERE T.OWNER='SUPERMAG' AND T.TABLE_NAME LIKE 'F%' AND T.logging='YES'
Выбрал все строки и запустил результат этого запроса в отдельном окне SQL.
Потом тоже самое сделал с индексами
Код:
SELECT 'ALTER INDEX SUPERMAG.'||T.index_name||' NOLOGGING;' FROM DBA_INDEXES T WHERE T.OWNER='SUPERMAG' AND T.TABLE_NAME LIKE 'F%' AND T.logging='YES'
Запустил результат запроса.
потом очистил таблицы аналитики:
Код:
truncate table SUPERMAG.FFAVGPRICELOG_;
truncate table SUPERMAG.FFBADLINKS;
truncate table SUPERMAG.FFDEBUGLOG;
truncate table SUPERMAG.FFDOCUMENTS;
truncate table SUPERMAG.FFFINBASES;
truncate table SUPERMAG.FFINVALIDOUTIN;
truncate table SUPERMAG.FFMAPININ;
truncate table SUPERMAG.FFMAPOUTIN;
truncate table SUPERMAG.FFMAPREP;
truncate table SUPERMAG.FFMAPREP_;
truncate table SUPERMAG.FFPARTNERHIST;
truncate table SUPERMAG.FFPAYORDERS;
truncate table SUPERMAG.FFPAYORDERSVAT;
truncate table SUPERMAG.FFPRICETHRESHOLD;
truncate table SUPERMAG.FFPRODDOCUMENTS;
truncate table SUPERMAG.FFPRODEXPSPEC;
truncate table SUPERMAG.FFPRODOUTSPEC;
truncate table SUPERMAG.FFPRODREP;
truncate table SUPERMAG.FFREMAINS;
truncate table SUPERMAG.FFREMAINS_;
truncate table SUPERMAG.FFREMAINSLOG;
truncate table SUPERMAG.FFREMINCOME;
truncate table SUPERMAG.FFREMINCOME_;
truncate table SUPERMAG.FFREMINCOMELOG;
truncate table SUPERMAG.FFREMTHRESHOLD;
truncate table SUPERMAG.FFSALERETURNS;
truncate table SUPERMAG.FFSPEC;
truncate table SUPERMAG.FFSPECSCALE;
truncate table SUPERMAG.FFSTOREHIST;
truncate table SUPERMAG.FFWORKDATA;
truncate table SUPERMAG.FSREMAINS;
delete from  supermag.sscalclog;
delete from  supermag.sstransfers;
commit;
Потом установил все столбцы аналитеских таблиц в NULL
Код:
SELECT 'ALTER TABLE SUPERMAG.'||T.TABLE_NAME||' MODIFY '||T.COLUMN_NAME||' NULL;' FROM DBA_TAB_COLS T WHERE T.OWNER='SUPERMAG' AND T.TABLE_NAME LIKE 'FF%' ORDER BY T.TABLE_NAME,T.COLUMN_NAME
Запустил результаты запроса.
Установил у нужных столбцов проверки на NULL с эталонной базы
Код:
ALTER TABLE  SUPERMAG.FFAVGPRICELOG_  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFAVGPRICELOG_  MODIFY ( CALCDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFAVGPRICELOG_  MODIFY ( PARTNER   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFAVGPRICELOG_  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFAVGPRICELOG_  MODIFY ( SUMNOVAT   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFAVGPRICELOG_  MODIFY ( TOTALSUM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFBADLINKS  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFBADLINKS  MODIFY ( DSTDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFBADLINKS  MODIFY ( DSTOP   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFBADLINKS  MODIFY ( FORCEDMAPPING   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFBADLINKS  MODIFY ( LINKDSTDOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFBADLINKS  MODIFY ( LINKDSTITEM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFBADLINKS  MODIFY ( LINKSRCDOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFBADLINKS  MODIFY ( LINKSRCITEM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFBADLINKS  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFBADLINKS  MODIFY ( SRCDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFBADLINKS  MODIFY ( SRCOP   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFDEBUGLOG  MODIFY ( ID   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFDEBUGLOG  MODIFY ( ISTRANSFER   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFDEBUGLOG  MODIFY ( LOGID   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFDEBUGLOG  MODIFY ( TS   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFDOCUMENTS  MODIFY ( CREATEDAT   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFDOCUMENTS  MODIFY ( CURRENCYMULTORDER   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFDOCUMENTS  MODIFY ( CURRENCYRATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFDOCUMENTS  MODIFY ( CURRENCYTYPE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFDOCUMENTS  MODIFY ( DOCTYPE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFDOCUMENTS  MODIFY ( GOODSOWNER   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFDOCUMENTS  MODIFY ( ID   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFDOCUMENTS  MODIFY ( ISROUBLES   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFDOCUMENTS  MODIFY ( NDOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFDOCUMENTS  MODIFY ( OPCODE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFDOCUMENTS  MODIFY ( PAYCASH   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFFINBASES  MODIFY ( BASECURR   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFFINBASES  MODIFY ( BASECURRMULTORDER   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFFINBASES  MODIFY ( BASECURRRATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFFINBASES  MODIFY ( BASEDOCTYPE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFFINBASES  MODIFY ( BASEID   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFFINBASES  MODIFY ( DOCID   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFFINBASES  MODIFY ( DOCTYPE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFFINBASES  MODIFY ( TOTALSUM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFINVALIDOUTIN  MODIFY ( INCOMEDOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFINVALIDOUTIN  MODIFY ( INCOMEITEM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFINVALIDOUTIN  MODIFY ( LOGID   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFINVALIDOUTIN  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFINVALIDOUTIN  MODIFY ( SALEDOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFINVALIDOUTIN  MODIFY ( SALEITEM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPININ  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPININ  MODIFY ( FORCEDMAPPING   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPININ  MODIFY ( INCOMEDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPININ  MODIFY ( INCOMEDOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPININ  MODIFY ( INCOMEITEM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPININ  MODIFY ( INCOMEOP   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPININ  MODIFY ( INCOMEQ   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPININ  MODIFY ( INCOMETOTALNOVAT   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPININ  MODIFY ( INCOMETOTALSUM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPININ  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPININ  MODIFY ( RETDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPININ  MODIFY ( RETDOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPININ  MODIFY ( RETITEM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPININ  MODIFY ( RETOP   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPOUTIN  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPOUTIN  MODIFY ( FORCEDMAPPING   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPOUTIN  MODIFY ( INCOMEDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPOUTIN  MODIFY ( INCOMEDOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPOUTIN  MODIFY ( INCOMEITEM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPOUTIN  MODIFY ( INCOMEOP   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPOUTIN  MODIFY ( INCOMEQ   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPOUTIN  MODIFY ( INCOMETOTALNOVAT   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPOUTIN  MODIFY ( INCOMETOTALSUM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPOUTIN  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPOUTIN  MODIFY ( SALEDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPOUTIN  MODIFY ( SALEDOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPOUTIN  MODIFY ( SALEITEM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPOUTIN  MODIFY ( SALEOP   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP  MODIFY ( PRIMECOST   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP  MODIFY ( PRIMECOSTFORCED   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP  MODIFY ( PRIMECOSTNOVAT   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP  MODIFY ( RECTYPE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP  MODIFY ( SALECURTYPE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP  MODIFY ( SALEDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP  MODIFY ( SALEID   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP  MODIFY ( SALENOTAX   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP  MODIFY ( SALENOVAT   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP  MODIFY ( SALEOP   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP  MODIFY ( SALEPAYCASH   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP  MODIFY ( SALEQ   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP  MODIFY ( SALESPECITEM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP  MODIFY ( SALESUM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP  MODIFY ( SALESUMCUR   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP  MODIFY ( SALETYPE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP  MODIFY ( SALEVATRATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP_  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP_  MODIFY ( PRIMECOST   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP_  MODIFY ( PRIMECOSTFORCED   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP_  MODIFY ( PRIMECOSTNOVAT   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP_  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP_  MODIFY ( RECTYPE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP_  MODIFY ( SALECURTYPE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP_  MODIFY ( SALEDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP_  MODIFY ( SALEID   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP_  MODIFY ( SALENOTAX   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP_  MODIFY ( SALENOVAT   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP_  MODIFY ( SALEOP   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP_  MODIFY ( SALEPAYCASH   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP_  MODIFY ( SALEQ   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP_  MODIFY ( SALESPECITEM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP_  MODIFY ( SALESUM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP_  MODIFY ( SALESUMCUR   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP_  MODIFY ( SALETYPE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFMAPREP_  MODIFY ( SALEVATRATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPARTNERHIST  MODIFY ( ENDDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPARTNERHIST  MODIFY ( FIFOALG   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPARTNERHIST  MODIFY ( PRIMEALG   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPARTNERHIST  MODIFY ( WAVGPERIOD   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPAYORDERS  MODIFY ( CLIENTINDEX   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPAYORDERS  MODIFY ( CREATEDAT   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPAYORDERS  MODIFY ( CURRENCYMULTORDER   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPAYORDERS  MODIFY ( CURRENCYRATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPAYORDERS  MODIFY ( CURRENCYTYPE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPAYORDERS  MODIFY ( DOCID   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPAYORDERS  MODIFY ( DOCTYPE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPAYORDERS  MODIFY ( ISCASH   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPAYORDERS  MODIFY ( ISROUBLES   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPAYORDERS  MODIFY ( LOCATION   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPAYORDERS  MODIFY ( OPCODE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPAYORDERS  MODIFY ( OURSELFCLIENT   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPAYORDERS  MODIFY ( PAYDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPAYORDERS  MODIFY ( TOTALSUM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPAYORDERS  MODIFY ( TOTALSUMCUR   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPAYORDERSVAT  MODIFY ( DOCID   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPAYORDERSVAT  MODIFY ( DOCTYPE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPAYORDERSVAT  MODIFY ( VATRATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPAYORDERSVAT  MODIFY ( VATSUM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRICETHRESHOLD  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRICETHRESHOLD  MODIFY ( CALCQUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRICETHRESHOLD  MODIFY ( CALCSUMFULL   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRICETHRESHOLD  MODIFY ( CALCSUMNOVAT   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRICETHRESHOLD  MODIFY ( PARTNER   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODDOCUMENTS  MODIFY ( CREATEDAT   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODDOCUMENTS  MODIFY ( DOCTYPE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODDOCUMENTS  MODIFY ( ID   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODDOCUMENTS  MODIFY ( NDOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODDOCUMENTS  MODIFY ( OPCODE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODDOCUMENTS  MODIFY ( STORELOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODDOCUMENTS  MODIFY ( ZONEID   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODEXPSPEC  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODEXPSPEC  MODIFY ( DOCID   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODEXPSPEC  MODIFY ( DOCTYPE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODEXPSPEC  MODIFY ( NDOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODEXPSPEC  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODEXPSPEC  MODIFY ( SPECITEM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODOUTSPEC  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODOUTSPEC  MODIFY ( DOCID   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODOUTSPEC  MODIFY ( DOCTYPE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODOUTSPEC  MODIFY ( NDOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODOUTSPEC  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODOUTSPEC  MODIFY ( SPECITEM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODREP  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODREP  MODIFY ( PRIMECOST   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODREP  MODIFY ( PRIMECOSTFORCED   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODREP  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFPRODREP  MODIFY ( TOTALSUM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMAINS  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMAINS  MODIFY ( CP_FULL   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMAINS  MODIFY ( CP_NOVAT   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMAINS  MODIFY ( FORCED   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMAINS  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMAINS  MODIFY ( REMDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMAINS  MODIFY ( STORELOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMAINS_  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMAINS_  MODIFY ( CP_FULL   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMAINS_  MODIFY ( CP_NOVAT   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMAINS_  MODIFY ( FORCED   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMAINS_  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMAINS_  MODIFY ( REMDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMAINS_  MODIFY ( STORELOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMAINSLOG  MODIFY ( ENDTIME   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMAINSLOG  MODIFY ( ISCLOSEDPERIOD   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMAINSLOG  MODIFY ( REMDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMAINSLOG  MODIFY ( STARTTIME   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMINCOME  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMINCOME  MODIFY ( FORCED   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMINCOME  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMINCOME  MODIFY ( REMDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMINCOME  MODIFY ( STORELOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMINCOME_  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMINCOME_  MODIFY ( FORCED   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMINCOME_  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMINCOME_  MODIFY ( REMDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMINCOME_  MODIFY ( STORELOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMINCOMELOG  MODIFY ( ENDTIME   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMINCOMELOG  MODIFY ( ISCLOSEDPERIOD   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMINCOMELOG  MODIFY ( REMDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMINCOMELOG  MODIFY ( STARTTIME   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMTHRESHOLD  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMTHRESHOLD  MODIFY ( CP_FULL   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMTHRESHOLD  MODIFY ( CP_NOVAT   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMTHRESHOLD  MODIFY ( PARTNER   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFREMTHRESHOLD  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSALERETURNS  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSALERETURNS  MODIFY ( FORCEDMAPPING   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSALERETURNS  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSALERETURNS  MODIFY ( RETDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSALERETURNS  MODIFY ( RETDOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSALERETURNS  MODIFY ( RETITEM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSALERETURNS  MODIFY ( RETOP   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSALERETURNS  MODIFY ( SALEDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSALERETURNS  MODIFY ( SALEDOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSALERETURNS  MODIFY ( SALEITEM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSALERETURNS  MODIFY ( SALEOP   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSPEC  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSPEC  MODIFY ( DOCDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSPEC  MODIFY ( DOCOP   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSPEC  MODIFY ( DOCTYPE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSPEC  MODIFY ( EXPQUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSPEC  MODIFY ( ITEMPRICE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSPEC  MODIFY ( ITEMPRICECUR   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSPEC  MODIFY ( NDOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSPEC  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSPEC  MODIFY ( SPECITEM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSPEC  MODIFY ( TOTALSUM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSPEC  MODIFY ( TOTALSUMCUR   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSPEC  MODIFY ( TOTALSUMNOTAX   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSPEC  MODIFY ( TOTALVAT   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSPEC  MODIFY ( VATRATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSPECSCALE  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSPECSCALE  MODIFY ( NDOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSPECSCALE  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSPECSCALE  MODIFY ( SPECITEM   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSTOREHIST  MODIFY ( ENDDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFSTOREHIST  MODIFY ( STORELOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFWORKDATA  MODIFY ( ISTRANSFER   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFWORKDATA  MODIFY ( LOGID   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFWORKDATA  MODIFY ( VARNAME   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFWORKDATA  MODIFY ( X   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FFWORKDATA  MODIFY ( Y   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FSREMAINS  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FSREMAINS  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FSREMAINS  MODIFY ( REMDATE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FSREMAINS  MODIFY ( STORELOC   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FVPRODREP  MODIFY ( ARTICLE   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FVPRODREP  MODIFY ( PRIMECOST   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FVPRODREP  MODIFY ( QUANTITY   NOT NULL ENABLE);
ALTER TABLE  SUPERMAG.FVPRODREP  MODIFY ( TOTALSUM   NOT NULL ENABLE);
Потом дописал полный перенос таким образом чтобы он удалял индексы, констрайнты, вторичные ключи, проверки и выключал триггеры (во вложении). ТОЛЬКО ВНИМАНИЕ - ПОСЛЕ ДАННОГО ПЕРЕНОСА НАДО ПЕРЕКОМПИЛЛИРОВАТЬ ВСЕ ИНВАЛИДНЫЕ ОБЪЕКТЫ.
Запустил - время переноса 1ч 30 минут на моем ноутбуке, на сервере 1ч. 22 минуты..
Может быть кому нибудь и понадобится этот алгоритм.
Сейчас в офисе рассчитаю себестоимость и буду смотреть планы.

Arsen, может быть ты выложишь свои параметры на форуме. Вопросы полюбому появятся - обсуждение продвинет и тебя вперед и нас?
Вложения
Тип файла: zip SMTransfer.zip (2.8 Кб, 74 просмотров)
26.01.2009 12:30
Arsen
 
Вот мои параметры:
единственной проблемой с переходом с 9 по 10 была, величина параметра processes, sessions. На otn читал, что 10-ка вроди бы генерирует много процессов чем 9 (но честно говоря не понял как?). и потом собстно убедился сам когда смотрел в трейс файлы там было: Maximum number of processes 150 exceeded.
Увеличил и юзеры стали нормально конектится, но ошибка которая выдала у пользователей ни о чем не говорила (нет прослушивателья).
И еще сервис плюс добавил к этому, что это из за того что клиент от 8-ки, даже дал патч 10.2.0.4.3, но это не помогло.
26.01.2009 12:43
mighty
 
Нет Arsen, сделай плз, выгрузку из v$parameter с сортировкой по наименованию параметра..
26.01.2009 14:00
Arsen
 
Извини забыл прикрепить файл, вот он
Вложения
Тип файла: rar parameters.rar (14.1 Кб, 188 просмотров)
26.01.2009 20:34
mighty
 
в 9 часов утра запустил расчет себестоимости..4 часа длился сам расчет..в 13.00 надпись "Индексация результатов расчета"..в 19:00 часов вечера я не выдержал и отключил его..
Никак не могу понять что так влияет на сбор статистики, почем утак долго ALL_ROWS по умолчанию..По всем таблицам аналитики статистика собралась - по FFMAPREP - нет...
27.01.2009 09:53
OlegON
 
сделай
analyze table ffmaprep compute statistic; и хватит пока, на время посмотри.
параллельно можешь select sum(bytes) from dba_segments where segment_name='FFMAPREP';
странное что-то... винты небось тормознутые. ругайся, кто проседает. джобы смотри, активные сессии.
27.01.2009 12:07
mighty
 
Что поменял в настройках:
optimizer_mode=CHOOSE; |было ALL_ROWS
db_file_multiblock_read_count=128 | было 16

В 23:17 запустил расчет (без пеерноса), выполнялся 4 ч. 51 минуту, то етсь понятно 4 часа на расчет, 51 минута на сбор статистики по 5-6 таблицам, вообщем расчиталась себестоимость, сегодня защиту сделаю на случай сбоев, чтобы FFMAPREP -перед расчетом бекапился экспортом, чтобы в случае сбоя ночью можно было дамп сегодняшнего расчета накатить.
Я тут пробовал собирать статистику и через ANALYZE и через DBMS_STATS - результаты разные(по аналитической базе), сейчас на вскидку не помню, но дома сделаю и скажу. Выставил оптимайзер в CHOOSE - руководствовался тем что раньше(3 месяца назад) с этой опцией оптимайзера работало быстро все, расчет себестоимости шел около 3 часов. Удалил статистику, всю потом только заново расчитывал. То есть CHOOSE расчитал её как RULE..

Сейчас ничего не делаю в базе - работают только опереторы с накладными, менеджеры с заказами и менеджеры с кучей отчетов по аналитической базе:
Запрос:
Код:
select sum(bytes) from dba_segments where segment_name='FFMAPREP';
Возвращает: 6560940032

Теперь результаты плана:
Код:
select sum(decode(f.saletype,'CR',-f.salesum,f.salesum)) realiz from supermag.ffmaprep f where f.rectype=1 and f.saletype in ('CR','CS') 
and f.saledate>=to_date('20.01.2005','DD.MM.YYYY')
and f.saledate<=to_date('19.01.2009','DD.MM.YYYY')
and f.article in ( select c.article from supermag.smcard c where  c.accepted<>-1  )
Код:
-----------------------------------------------------------------------------------------------------------
| Id  | Operation                     | Name      | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |           |     1 |    76 |     3   (0)| 00:00:01 |       |       |
|   1 |  SORT AGGREGATE               |           |     1 |    76 |            |          |       |       |
|   2 |   NESTED LOOPS                |           |     1 |    76 |     3   (0)| 00:00:01 |       |       |
|   3 |    PARTITION RANGE ALL        |           |     1 |    66 |     2   (0)| 00:00:01 |     1 |    26 |
|*  4 |     TABLE ACCESS FULL         | FFMAPREP  |     1 |    66 |     2   (0)| 00:00:01 |     1 |    26 |
|*  5 |    TABLE ACCESS BY INDEX ROWID| SMCARD    |     1 |    10 |     1   (0)| 00:00:01 |       |       |
|*  6 |     INDEX UNIQUE SCAN         | SMCARD_PK |     1 |       |     0   (0)| 00:00:01 |       |       |
-----------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   4 - filter("F"."RECTYPE"=1 AND ("F"."SALETYPE"='CR' OR "F"."SALETYPE"='CS') AND
              "F"."SALEDATE">=TO_DATE(' 2005-01-20 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND
              "F"."SALEDATE"<=TO_DATE(' 2009-01-19 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
   5 - filter("C"."ACCEPTED"<>(-1))
   6 - access("F"."ARTICLE"="C"."ARTICLE")
Пипец -фуллскан откуда-то вылез(может из за db_file_multiblock_read_count?).. FFMAPREP партиционирован по дате(помесячно), индексы не партиционированы.
индексы аналитической базы лежат в одном таблспейсе с индексами оперативной базы..хочу разнести, но боюсь большого прироста это не даст.
Вообщем разбираюсь дальше - у кого есть предложения, прошу..
27.01.2009 12:16
kadr
 
Цитата:
mighty Пипец -фуллскан откуда-то вылез(может из за db_file_multiblock_read_count?).. FFMAPREP партиционирован по дате(помесячно), индексы не партиционированы.
индексы аналитической базы лежат в одном таблспейсе с индексами оперативной базы..хочу разнести, но боюсь большого прироста это не даст.
Вообщем разбираюсь дальше - у кого есть предложения, прошу..
Считаю что фуллсканы не страшны.
Сам сейчас на тестовом серваке борюсь со скоростью, индекс FFMAPREP_SALEDATE битовый локально партицированный, при выставлении параметра optimizer_index_cost_adj в районе 10 план меняется на использование индекса, но при реальной работе с фуллсканом по партициям работет быстрее чем по индексному доступу. Разница раза в 3
27.01.2009 12:43
mighty
 
Код:
select sum(decode(f.saletype,'CR',-f.salesum,f.salesum)) realiz from supermag.ffmaprep f where f.rectype=1 and f.saletype in ('CR','CS') 
and f.saledate>=to_date('20.01.2005','DD.MM.YYYY')
and f.saledate<=to_date('19.01.2009','DD.MM.YYYY')
and f.article in ( select c.article from supermag.smcard c where  c.accepted<>-1  )
Запрос при вышеописанном плане отрабатывал 631 секунда - плохо, на таких объемах данных еще 2 месяца назад этот запрос отрабатывался за минуту или даже меньше но там была 9.2.0.8 и 32 разрядная.

Kard, а после изменения optimizer_index_cost_adj статистику надо пересобирать? или план запроса сразу меняется?
27.01.2009 12:55
Arsen
 
Советую не менять этот мараметр - optimizer_index_cost_adj.

Я тоже читал, что при таких значениях план меняется на индексы, но когда поменял его, то случилось вот что: когда редактируешь карточки товаров, сохраниние длится около 3 минуты.
27.01.2009 13:59
kadr
 
Цитата:
mighty
Код:
select sum(decode(f.saletype,'CR',-f.salesum,f.salesum)) realiz from supermag.ffmaprep f where f.rectype=1 and f.saletype in ('CR','CS') 
and f.saledate>=to_date('20.01.2005','DD.MM.YYYY')
and f.saledate<=to_date('19.01.2009','DD.MM.YYYY')
and f.article in ( select c.article from supermag.smcard c where  c.accepted<>-1  )
Запрос при вышеописанном плане отрабатывал 631 секунда - плохо, на таких объемах данных еще 2 месяца назад этот запрос отрабатывался за минуту или даже меньше но там была 9.2.0.8 и 32 разрядная.

Kard, а после изменения optimizer_index_cost_adj статистику надо пересобирать? или план запроса сразу меняется?
сразу меняется, по докам этот параметр показывает стоимость индексного доступа, т.е. по умолчанию 100%, если ставить 50%, то оптимизатору указывается что стоимость индексного пути доступа будет выглядеть наполовину меньше.

Цитата:
Arsen Советую не менять этот мараметр - optimizer_index_cost_adj.

Я тоже читал, что при таких значениях план меняется на индексы, но когда поменял его, то случилось вот что: когда редактируешь карточки товаров, сохраниние длится около 3 минуты.
Любые параметры нужно менять осознанно. План меняется на индексный доступ, но он не всегда самый быстрый, иногда быстрее просканить всю таблицу, чем сначала искать в индексе, потом считывать блок данных, а потом опять искать по индексу и опять считывать блок данных.
28.01.2009 02:43
isi
 
при твоем условии
Код:
 f.saledate>=to_date('20.01.2005','DD.MM.YYYY')
and f.saledate<=to_date('19.01.2009','DD.MM.YYYY')
Oracle в любом случае сделает фулскан, ты же всю таблицу отбираешь, нафига ему индексный доступ
28.01.2009 12:16
mighty
 
Цитата:
isi при твоем условии
Код:
 f.saledate>=to_date('20.01.2005','DD.MM.YYYY')
and f.saledate<=to_date('19.01.2009','DD.MM.YYYY')
Oracle в любом случае сделает фулскан, ты же всю таблицу отбираешь, нафига ему индексный доступ
да нет даже если дату изменить с '20.01.2005' на '20.01.2008' все равно фулскан..

Так что сделано и что получилось:
Перепартиционировал таблицу FFMAPREP было по RANGE(saledate) по месяцам, сделал как у Олега по LIST и RANGE http://www.olegon.ru/showthread.php?...ight=PARTITION
только подразбил еще 2007 год по кварталам, индексы от FFMAPREP выкинул в отдельный таблспейс. Индексы создавал обычные, имхо BITMAP
только для поля INCOMECLIENTINDEX подходит, в остальных используется saledate или saleid -битмап по ним будет очень долго создаваться, насчет выигрыша не знаю, если кто знает скажите.
Код:
--переименовываем таблицу FFMAPREP
ALTER TABLE SUPERMAG.FFMAPREP RENAME TO FFMAPREP_OLD;

--создаем таблспейс для FFMAPREP
CREATE TABLESPACE SM_ANAL_FFMAPREP
    DATAFILE 'D:\ORACLE\ORADATA\VLIGCO\FFMAPREP01.DBF' SIZE 2G AUTOEXTEND OFF,
             'D:\ORACLE\ORADATA\VLIGCO\FFMAPREP02.DBF' SIZE 2G AUTOEXTEND OFF,
             'D:\ORACLE\ORADATA\VLIGCO\FFMAPREP03.DBF' SIZE 2G AUTOEXTEND OFF,
             'D:\ORACLE\ORADATA\VLIGCO\FFMAPREP04.DBF' SIZE 2G AUTOEXTEND OFF
    EXTENT MANAGEMENT LOCAL AUTOALLOCATE
    NOLOGGING
    ONLINE
    SEGMENT SPACE MANAGEMENT MANUAL;

--создаем таблспейс для индексов FFMAPREP
CREATE TABLESPACE FF_INDEX_MAPREP
    DATAFILE 'F:\ORACLE\ORADATA\VLIGCO\FFINDX01.DBF' SIZE 2G AUTOEXTEND OFF,
             'F:\ORACLE\ORADATA\VLIGCO\FFINDX02.DBF' SIZE 2G AUTOEXTEND OFF,
             'F:\ORACLE\ORADATA\VLIGCO\FFINDX03.DBF' SIZE 2G AUTOEXTEND OFF,
             'F:\ORACLE\ORADATA\VLIGCO\FFINDX04.DBF' SIZE 2G AUTOEXTEND OFF             
    EXTENT MANAGEMENT LOCAL AUTOALLOCATE
    NOLOGGING
    ONLINE
    SEGMENT SPACE MANAGEMENT AUTO;

--даем права на таблспейсы пользователю SUPERMAG
ALTER USER SUPERMAG QUOTA UNLIMITED ON FF_INDEX_MAPREP;
ALTER USER SUPERMAG QUOTA UNLIMITED ON SM_ANAL_FFMAPREP;

--создаем партиционированную таблицу FFMAPREP
create table SUPERMAG.FFMAPREP
  PCTFREE     0
  INITRANS    30
  MAXTRANS    255
  TABLESPACE  SM_ANAL_FFMAPREP
  NOLOGGING
  PARTITION BY RANGE (saledate)
  SUBPARTITION BY LIST (saletype)
  (
  PARTITION ff_2006 VALUES LESS THAN (TO_DATE('01012007','DDMMYYYY'))
         (SUBPARTITION ff_2006_wi VALUES ('WI'),
          SUBPARTITION ff_2006_wo VALUES ('WO'),
          SUBPARTITION ff_2006_cs VALUES ('CS'),
          SUBPARTITION ff_2006_cr VALUES ('CR')
         ),
  PARTITION ff1_2007 VALUES LESS THAN (TO_DATE('01042007','DDMMYYYY'))
         (SUBPARTITION ff1_2007_wi VALUES ('WI'),
          SUBPARTITION ff1_2007_wo VALUES ('WO'),
          SUBPARTITION ff1_2007_cs VALUES ('CS'),
          SUBPARTITION ff1_2007_cr VALUES ('CR')
         ),
  PARTITION ff2_2007 VALUES LESS THAN (TO_DATE('01072007','DDMMYYYY'))
         (SUBPARTITION ff2_2007_wi VALUES ('WI'),
          SUBPARTITION ff2_2007_wo VALUES ('WO'),
          SUBPARTITION ff2_2007_cs VALUES ('CS'),
          SUBPARTITION ff2_2007_cr VALUES ('CR')
         ),
  PARTITION ff3_2007 VALUES LESS THAN (TO_DATE('01102007','DDMMYYYY'))
         (SUBPARTITION ff3_2007_wi VALUES ('WI'),
          SUBPARTITION ff3_2007_wo VALUES ('WO'),
          SUBPARTITION ff3_2007_cs VALUES ('CS'),
          SUBPARTITION ff3_2007_cr VALUES ('CR')
         ),
  PARTITION ff4_2007 VALUES LESS THAN (TO_DATE('01012008','DDMMYYYY'))
         (SUBPARTITION ff4_2007_wi VALUES ('WI'),
          SUBPARTITION ff4_2007_wo VALUES ('WO'),
          SUBPARTITION ff4_2007_cs VALUES ('CS'),
          SUBPARTITION ff4_2007_cr VALUES ('CR')
         ),
  PARTITION ff1_2008 VALUES LESS THAN (TO_DATE('01042008','DDMMYYYY'))
         (SUBPARTITION ff1_2008_wi VALUES ('WI'),
          SUBPARTITION ff1_2008_wo VALUES ('WO'),
          SUBPARTITION ff1_2008_cs VALUES ('CS'),
          SUBPARTITION ff1_2008_cr VALUES ('CR')
         ),
  PARTITION ff2_2008 VALUES LESS THAN (TO_DATE('01072008','DDMMYYYY'))
         (SUBPARTITION ff2_2008_wi VALUES ('WI'),
          SUBPARTITION ff2_2008_wo VALUES ('WO'),
          SUBPARTITION ff2_2008_cs VALUES ('CS'),
          SUBPARTITION ff2_2008_cr VALUES ('CR')
         ),
  PARTITION ff3_2008 VALUES LESS THAN (TO_DATE('01102008','DDMMYYYY'))
         (SUBPARTITION ff3_2008_wi VALUES ('WI'),
          SUBPARTITION ff3_2008_wo VALUES ('WO'),
          SUBPARTITION ff3_2008_cs VALUES ('CS'),
          SUBPARTITION ff3_2008_cr VALUES ('CR')
         ),
  PARTITION ff4_2008 VALUES LESS THAN (TO_DATE('01012009','DDMMYYYY'))
         (SUBPARTITION ff4_2008_wi VALUES ('WI'),
          SUBPARTITION ff4_2008_wo VALUES ('WO'),
          SUBPARTITION ff4_2008_cs VALUES ('CS'),
          SUBPARTITION ff4_2008_cr VALUES ('CR')
         ),

  PARTITION ff1_2009 VALUES LESS THAN (TO_DATE('01042009','DDMMYYYY'))
         (SUBPARTITION ff1_2009_wi VALUES ('WI'),
          SUBPARTITION ff1_2009_wo VALUES ('WO'),
          SUBPARTITION ff1_2009_cs VALUES ('CS'),
          SUBPARTITION ff1_2009_cr VALUES ('CR')
         ),
  PARTITION ff2_2009 VALUES LESS THAN (TO_DATE('01072009','DDMMYYYY'))
         (SUBPARTITION ff2_2009_wi VALUES ('WI'),
          SUBPARTITION ff2_2009_wo VALUES ('WO'),
          SUBPARTITION ff2_2009_cs VALUES ('CS'),
          SUBPARTITION ff2_2009_cr VALUES ('CR')
         ),
  PARTITION ff3_2009 VALUES LESS THAN (TO_DATE('01102009','DDMMYYYY'))
         (SUBPARTITION ff3_2009_wi VALUES ('WI'),
          SUBPARTITION ff3_2009_wo VALUES ('WO'),
          SUBPARTITION ff3_2009_cs VALUES ('CS'),
          SUBPARTITION ff3_2009_cr VALUES ('CR')
         ),
  PARTITION ff4_2009 VALUES LESS THAN (TO_DATE('01012010','DDMMYYYY'))
         (SUBPARTITION ff4_2009_wi VALUES ('WI'),
          SUBPARTITION ff4_2009_wo VALUES ('WO'),
          SUBPARTITION ff4_2009_cs VALUES ('CS'),
          SUBPARTITION ff4_2009_cr VALUES ('CR')
         )
)
AS SELECT * FROM SUPERMAG.FFMAPREP_OLD;

--даем права должности SUPERMAG_FN_REPADMIN_CALC
grant select, insert, update on SUPERMAG.FFMAPREP to SUPERMAG_FN_REPADMIN_CALC;

--удаляем индексы старого FFMAPREP_OLD
DROP INDEX SUPERMAG.FFMAPREP_ARTICLE;
DROP INDEX SUPERMAG.FFMAPREP_DOC;
DROP INDEX SUPERMAG.FFMAPREP_LOCFROM;
DROP INDEX SUPERMAG.FFMAPREP_LOCTO;
DROP INDEX SUPERMAG.FFMAPREP_SALEDATE;
DROP INDEX SUPERMAG.FFMAPREP_SUPPLIER;

--создаем новые индексы
create index SUPERMAG.FFMAPREP_ARTICLE on SUPERMAG.FFMAPREP (ARTICLE ASC)
  tablespace FF_INDEX_MAPREP
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  )
  NOLOGGING
  ;
create  index SUPERMAG.FFMAPREP_DOC on SUPERMAG.FFMAPREP (SALEID ASC, SALETYPE ASC, SALESPECITEM ASC)
  tablespace FF_INDEX_MAPREP
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  )
  NOLOGGING LOCAL
  ;
create  index SUPERMAG.FFMAPREP_LOCFROM on SUPERMAG.FFMAPREP (SALELOCATIONFROM ASC, SALEDATE ASC)
  tablespace FF_INDEX_MAPREP
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  )
  NOLOGGING LOCAL
  ;
create  index SUPERMAG.FFMAPREP_LOCTO on SUPERMAG.FFMAPREP (SALELOCATIONTO ASC, SALEDATE ASC)
  tablespace FF_INDEX_MAPREP
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  )
  NOLOGGING LOCAL
  ;
create  index SUPERMAG.FFMAPREP_SALEDATE on SUPERMAG.FFMAPREP (SALEDATE ASC)
  tablespace FF_INDEX_MAPREP
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  )
  NOLOGGING LOCAL
  ;
create  BITMAP index SUPERMAG.FFMAPREP_SUPPLIER on SUPERMAG.FFMAPREP (INCOMECLIENTINDEX ASC)
  tablespace FF_INDEX_MAPREP
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
После этого откомпиллировал инвалидов и собрал статистику по всей схеме SUPERMAG.

Для
Код:
select sum(decode(f.saletype,'CR',-f.salesum,f.salesum)) realiz 
from supermag.ffmaprep f 
where f.rectype=1 and f.saletype in ('CR','CS') 
and f.saledate>=to_date('20.01.2005','DD.MM.YYYY')
and f.saledate<=to_date('19.01.2009','DD.MM.YYYY')
and f.article in (select c.article from supermag.smcard c where  c.accepted<>-1)
Время выполнения: 192 секунды (уже не 631, это радует)
План
Код:
-------------------------------------------------------------------------------------------------------
| Id  | Operation                  | Name     | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
-------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT           |          |     1 |    34 |   135K  (3)| 00:27:10 |       |       |
|   1 |  SORT AGGREGATE            |          |     1 |    34 |            |          |       |       |
|*  2 |   HASH JOIN                |          |    26M|   844M|   135K  (3)| 00:27:10 |       |       |
|*  3 |    TABLE ACCESS FULL       | SMCARD   | 52438 |   409K|   242   (2)| 00:00:03 |       |       |
|   4 |    PARTITION RANGE ITERATOR|          |    26M|   646M|   135K  (3)| 00:27:05 |     1 |    10 |
|   5 |     PARTITION LIST INLIST  |          |    26M|   646M|   135K  (3)| 00:27:05 |KEY(I) |KEY(I) |
|*  6 |      TABLE ACCESS FULL     | FFMAPREP |    26M|   646M|   135K  (3)| 00:27:05 |   KEY |   KEY |
-------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("F"."ARTICLE"="C"."ARTICLE")
   3 - filter("C"."ACCEPTED"<>(-1))
   6 - filter("F"."RECTYPE"=1 AND "F"."SALEDATE"<=TO_DATE(' 2009-01-19 00:00:00', 'syyyy-mm-dd
              hh24:mi:ss') AND "F"."SALEDATE">=TO_DATE(' 2005-01-20 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
Ну с SMCARD все понятно операция <>(!=) отменяет действие индекса если поставить accepted in (0,1,2) план по карточкам переходит из фулскана в индекс(при этом время выполения разпроса уже 154 сек.), но вот план по FFMAPREP странный...фулскан..

меняем дату
Код:
select sum(decode(f.saletype,'CR',-f.salesum,f.salesum)) realiz 
from supermag.ffmaprep f 
where f.rectype=1 and 
f.saletype in ('CR','CS') 
and f.saledate>=to_date('01.12.2008','DD.MM.YYYY')
and f.saledate<=to_date('19.01.2009','DD.MM.YYYY')
and f.article in (select c.article from supermag.smcard c where  c.accepted <>-1)
План
Код:
-------------------------------------------------------------------------------------------------------
| Id  | Operation                  | Name     | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
-------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT           |          |     1 |    34 | 23131   (2)| 00:04:38 |       |       |
|   1 |  SORT AGGREGATE            |          |     1 |    34 |            |          |       |       |
|*  2 |   HASH JOIN                |          |  1964K|    63M| 23131   (2)| 00:04:38 |       |       |
|*  3 |    TABLE ACCESS FULL       | SMCARD   | 52438 |   409K|   242   (2)| 00:00:03 |       |       |
|   4 |    PARTITION RANGE ITERATOR|          |  1964K|    48M| 22874   (2)| 00:04:35 |     9 |    10 |
|   5 |     PARTITION LIST INLIST  |          |  1964K|    48M| 22874   (2)| 00:04:35 |KEY(I) |KEY(I) |
|*  6 |      TABLE ACCESS FULL     | FFMAPREP |  1964K|    48M| 22874   (2)| 00:04:35 |   KEY |   KEY |
-------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("F"."ARTICLE"="C"."ARTICLE")
   3 - filter("C"."ACCEPTED"<>(-1))
   6 - filter("F"."SALEDATE">=TO_DATE(' 2008-12-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND
              "F"."RECTYPE"=1 AND "F"."SALEDATE"<=TO_DATE(' 2009-01-19 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
Только стоимость и расчетное время выборки поменялось, а операции те же и фулскан тот же..
Буду дальше копать..
28.01.2009 14:17
kadr
 
у тебя ещё соединение HASH JOIN, а у Олега NESTED LOOP
И время уменьшилось из-за того что меньше данных фуллсканится, идёт ещё отсечение субпартиций по типам документов
30.01.2009 20:00
deucel
 
Цитата:
mighty Версия СМ+ 1.026.3
Полный перенос ускорил с 15 часов до 1 ч 22 мин путем сверки таблиц аналитической базы с базой эталоном сгенерированной на тестовом компе.
Оказалось что СМ+ в процессе переноса отключает только свои ограничения и чеки, про которые знает, у меня видимо были многие поля NOT NULL или от старой базы наследие или кривизна в генераторе, не знаю.
Думаю они не 'NOT NULL' были, а 'NOVALIDATE' т.е. когда констрейнт 'not null' есть, а в свойствах таблицы поля 'null', но констрейнт все равно отрабатывает.

:))


Опции темы


Часовой пояс GMT +3, время: 03:38.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.