Конференция "Базы" » Долго выполняется DELETE [MSSQL]
 
  • Ольга © (12.01.09 11:01) [0]
    Есть простая табличка:

    CREATE TABLE [dbo].[REGIMS] (
    [REGIM_ID] [int] NOT NULL ,
    [OPERMODE] [int] NULL ,
    [CREATED] [datetime] NULL ,
    [FINISHED] [datetime] NULL ,
    [FIXED] [int] NULL ,
    [SHORT_NAME] [varchar] (20)  ,
    [BALANCED] [int] NULL ,
    [DESCRIPTION] [varchar] (240)  NULL
    ) ON [PRIMARY]


    Primary Key - REGIM_ID. На эту таблицу по Foreign Key ссылаются еще 18 таблиц (каскадное удаление не назначено).
    В таблице около 50 000 записей. Сначала удаляю записи из зависимых таблиц по REGIM_ID - выполняется быстро. Но последний шаг:

     DELETE FROM REGIMS WHERE REGIM_ID=2265


    выполняется около 4 минут. В чем может быть дело?
  • Сергей М. © (12.01.09 11:07) [1]
    Что-то с трудом верится ..
  • Ольга © (12.01.09 11:16) [2]
    Верится - не верится, а факт. Меня "приставили к стенке" и требуют срочно исправить ситуацию, которая возникла недавно, до этого все работало с удовлетворительной скоростью.
  • Ega23 © (12.01.09 11:17) [3]
    Только с этой таблицей, или с любой?
    Лог, случаем, за какой-нибудь большой размер не вылез?
  • Ольга © (12.01.09 11:23) [4]
    Проблемы только с этой таблицей (отличается от других большим кол-вом FK). Сама база довольно большая 6Гб, под T-Log выделено 150 Мб, занято 18 Мб.
  • sniknik © (12.01.09 11:29) [5]
    это очистка таблиц? транкейт не работает? (если внешний ключ с удалением из зависимой)
    отключить или удалить его перед очисткой? (с последующим восстановлением конечно)
  • Ольга © (12.01.09 11:36) [6]
    Транкейтить нельзя, т.к. удаляется выборочная информация. Каскадное удаление убрала умышленно, т.к. MSSQL не справляется с таким кол-вом (больше каскадных 5 ключей - и вешается)
  • Ega23 © (12.01.09 11:43) [7]
    Триггер на delete есть?
  • sniknik © (12.01.09 11:47) [8]
    > Каскадное удаление убрала умышленно
    как?
    проверка очевидно остается иначе не было бы так долго. вот проверь, скопируй таблицу с данными в независимую от ключей и удали тоже самое из нее (индексы по полям где условию не забудь в ней воссоздать те же что в оригинале). и как? быстро?
    если быстро то значит проверки есть и их надо отключать (анчек констраинтам делать)...
    в принципе 18 проверок в 18 таблицах к удалению каждой записи... понятно что долго будет.
  • sniknik © (12.01.09 11:50) [9]
    подожди,
    > Primary Key - REGIM_ID.
    > ... REGIM_ID=2265
    это одна запись удаляется 4 минуты? ....
  • Сергей М. © (12.01.09 11:52) [10]
    Асе-таки похоже на "тормоза" при исполнении тела триггера на удаление ..
  • Ega23 © (12.01.09 11:53) [11]

    > это одна запись удаляется 4 минуты? ....


    Похоже на то. Что удивительно.
  • Ольга © (12.01.09 12:01) [12]
    Триггеров нет и галочек на констраинтах нет (зуб даю, это первое, что я проверила), а работает так, как будто они есть.
    Что-то с самой таблицей неладно - даже SELECT выполняется медленно.
    Изменила незначительно структуру таблицы (чтобы прошел ALTER TABLE), удаление стало работать 1.5 минуты. Но это тоже не годится, нужно около 10 сек.
  • Сергей М. © (12.01.09 12:07) [13]
    Похоже что поле первичного ключа перстало быть индексированным.
    Либо индекс выключен либо его там вообще никогда не было.
  • sniknik © (12.01.09 12:17) [14]
    > либо его там вообще никогда не было.
    ->
    > Есть простая табличка:
    > ...
    его и нет. :)  если по скрипту
    разве что в заявлении
    > Primary Key - REGIM_ID
  • Медвежонок Пятачок © (12.01.09 12:24) [15]
    да на сервере тупо идет проверка по всей куче ссылающихся таблиц
  • Сергей М. © (12.01.09 12:24) [16]

    > sniknik ©   (12.01.09 12:17) [14]



    > его и нет


    А как тогда автор умудрилась организовать связь с подчиненными таблицами и каскадные операции ?
    Или эта СУБД позволяет подобные вольности ? Я просто не в курсе..
  • Медвежонок Пятачок © (12.01.09 12:29) [17]
    не было бы пк, форин констрейнты на REGIMS не создались бы
  • Ольга © (12.01.09 12:32) [18]
    Ну что вы, господа, я понимаю праздники... но я уж не до такой степени...
    PK есть и 18 FK, соответственно, есть. В скрипт не включила, чтобы место сэкономить.
  • sniknik © (12.01.09 12:33) [19]
    > Или эта СУБД позволяет подобные вольности ? Я просто не в курсе..
    не пробовал, но вроде не должен.

    +
    ну, форейн я лично видел тут тоже только в заявлениях... может он считает что если в селектах джойн к этой таблице делаеш то это и есть внешний ключ...
 
Конференция "Базы" » Долго выполняется DELETE [MSSQL]
Есть новые Нет новых   [134477   +40][b:0][p:0.001]